deploy-pages 🚀<\/h1>/;
assert.match(data.htmlContent ?? "", firstLine);
});
it("should fetch code blob", async () => {
const data = await getGitHubBlob("actions", "deploy-pages", "main", ".gitattributes");
assert.strictEqual(data.repo.owner, "actions");
assert.strictEqual(data.repo.name, "deploy-pages");
assert.strictEqual(data.branch, "main");
assert.strictEqual(data.path, ".gitattributes");
assert.strictEqual(data.size, "39 Bytes / 1 lines / 1 loc");
assert.strictEqual(data.language, "Git Attributes");
assert.strictEqual(data.image, false);
assert.deepStrictEqual(data.textLines, ["dist/** -diff linguist-generated=true "]);
assert.deepStrictEqual(data.htmlLines, [
'\u003cspan class="pl-e"\u003edist\u003c/span\u003e/\u003cspan class="pl-k"\u003e**\u003c/span\u003e \u003cspan class="pl-k"\u003e-\u003c/span\u003e\u003cspan class="pl-v"\u003ediff\u003c/span\u003e \u003cspan class="pl-v"\u003elinguist-generated\u003c/span\u003e=\u003cspan class="pl-c1"\u003etrue\u003c/span\u003e ',
]);
assert.strictEqual(data.htmlContent, null);
});
it("should fetch issues", async () => {
const data = await getGitHubIssues("actions", "deploy-pages");
assert.strictEqual(data.repo.owner, "actions");
assert.strictEqual(data.repo.name, "deploy-pages");
const issue402 = data.issues.find((issue) => issue.number === 402);
assert.ok(issue402);
assert.strictEqual(issue402.title, "Dry Run");
assert.strictEqual(issue402.state, "OPEN");
assert.strictEqual(issue402.createdAt, "2025-07-03T19:07:08Z");
});
it("should fetch commits", async () => {
const data = await getGitHubCommits("actions", "deploy-pages", "main", "");
assert.strictEqual(data.repo.owner, "actions");
assert.strictEqual(data.repo.name, "deploy-pages");
assert.strictEqual(data.branch, "main");
assert.strictEqual(data.path, "");
assert.ok(data.commitGroups.length > 0);
const firstGroup = data.commitGroups[0];
assert.ok(firstGroup.title.length > 0);
assert.ok(firstGroup.commits.length > 0);
const firstCommit = firstGroup.commits[0];
assert.ok(firstCommit.oid.length === 40);
assert.ok(firstCommit.shortMessage.length > 0);
assert.ok(firstCommit.authors.length > 0);
});
it("should fetch commits with path", async () => {
const data = await getGitHubCommits("actions", "deploy-pages", "main", "src");
assert.strictEqual(data.repo.owner, "actions");
assert.strictEqual(data.repo.name, "deploy-pages");
assert.strictEqual(data.branch, "main");
assert.strictEqual(data.path, "src");
assert.ok(data.commitGroups.length > 0);
});
it("should fetch releases", async () => {
const data = await getGitHubReleases("actions", "deploy-pages");
assert.strictEqual(data.repo.owner, "actions");
assert.strictEqual(data.repo.name, "deploy-pages");
assert.ok(data.releases.length > 0);
const firstRelease = data.releases[0];
assert.ok(firstRelease.tagName.length > 0);
assert.ok(firstRelease.title.match(/^v\d/));
assert.ok(firstRelease.publishedAt.length > 0);
assert.ok(firstRelease.bodyHtml.length > 0);
});
it("should fetch single release", async () => {
const data = await getGitHubRelease("actions", "deploy-pages", "v4.0.5");
assert.strictEqual(data.repo.owner, "actions");
assert.strictEqual(data.repo.name, "deploy-pages");
assert.ok(data.release.tagName.length > 0);
assert.ok(data.release.title.length > 0);
assert.ok(data.release.publishedAt.length > 0);
assert.ok(data.release.bodyHtml.length > 0);
assert.ok(data.release.assets && data.release.assets.length >= 2);
assert.strictEqual(data.release.assets[0].name, "Source code (zip)");
assert.strictEqual(
data.release.assets[0].url,
"https://github.com/actions/deploy-pages/archive/refs/tags/v4.0.5.zip",
);
});
});
describe("rich file types", () => {
it("should support PNG", async () => {
const data = await getGitHubBlob("github", "docs", "main", "assets/images/site/logo.png");
assert.strictEqual(data.repo.owner, "github");
assert.strictEqual(data.repo.name, "docs");
assert.strictEqual(data.branch, "main");
assert.strictEqual(data.path, "assets/images/site/logo.png");
assert.strictEqual(data.size, "1.26 KB");
assert.strictEqual(data.language, null);
assert.strictEqual(data.image, true);
assert.strictEqual(data.textLines, null);
assert.strictEqual(data.htmlLines, null);
assert.strictEqual(data.htmlContent, null);
});
});
describe("error handling", () => {
it("should throw for non-existent repository", async () => {
await assert.rejects(getGitHubRepo("nosuchowner", "nosuchrepo"), (err) => {
assert(err instanceof GitHubHTTPError, "error should be an HTTPError");
assert.strictEqual(err.status, 404);
return true;
});
});
});
});