Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions __tests__/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ process.env["RUNNER_TOOL_CACHE"] = toolDir;
import * as installer from "../src/installer";

describe("installer tests", () => {
beforeEach(async function() {
beforeEach(async function () {
await io.rmRF(toolDir);
await io.rmRF(tempDir);
await io.mkdirP(toolDir);
Expand Down Expand Up @@ -49,8 +49,16 @@ describe("installer tests", () => {
describe("Gets the latest release of protoc", () => {
beforeEach(() => {
nock("https://api.github.com")
.get("/repos/protocolbuffers/protobuf/releases")
.replyWithFile(200, path.join(dataDir, "releases.json"));
.get("/repos/protocolbuffers/protobuf/releases?page=1")
.replyWithFile(200, path.join(dataDir, "releases-1.json"));

nock("https://api.github.com")
.get("/repos/protocolbuffers/protobuf/releases?page=2")
.replyWithFile(200, path.join(dataDir, "releases-2.json"));

nock("https://api.github.com")
.get("/repos/protocolbuffers/protobuf/releases?page=3")
.replyWithFile(200, path.join(dataDir, "releases-3.json"));
});

afterEach(() => {
Expand All @@ -74,7 +82,7 @@ describe("installer tests", () => {

it("Gets latest version of protoc using 3.x and no matching version is installed", async () => {
await installer.getProtoc("3.x", true, GITHUB_TOKEN);
const protocDir = path.join(toolDir, "protoc", "3.9.1", os.arch());
const protocDir = path.join(toolDir, "protoc", "3.12.4", os.arch());

expect(fs.existsSync(`${protocDir}.complete`)).toBe(true);
if (IS_WINDOWS) {
Expand All @@ -90,8 +98,16 @@ describe("installer tests", () => {
describe("Gets the latest release of protoc with broken latest rc tag", () => {
beforeEach(() => {
nock("https://api.github.com")
.get("/repos/protocolbuffers/protobuf/releases")
.get("/repos/protocolbuffers/protobuf/releases?page=1")
.replyWithFile(200, path.join(dataDir, "releases-broken-rc-tag.json"));

nock("https://api.github.com")
.get("/repos/protocolbuffers/protobuf/releases?page=2")
.replyWithFile(200, path.join(dataDir, "releases-2.json"));

nock("https://api.github.com")
.get("/repos/protocolbuffers/protobuf/releases?page=3")
.replyWithFile(200, path.join(dataDir, "releases-3.json"));
});

afterEach(() => {
Expand Down
26,455 changes: 26,455 additions & 0 deletions __tests__/testdata/releases-1.json

Large diffs are not rendered by default.

14,392 changes: 14,392 additions & 0 deletions __tests__/testdata/releases-2.json

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions __tests__/testdata/releases-3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[

]
20,907 changes: 0 additions & 20,907 deletions __tests__/testdata/releases.json

This file was deleted.

36 changes: 23 additions & 13 deletions lib/installer.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ function getProtoc(version, includePreReleases, repoToken) {
listeners: {
stdout: (data) => {
stdOut += data.toString();
}
}
},
},
};
yield exc.exec("go", ["env", "GOPATH"], options);
const goPath = stdOut.trim();
Expand Down Expand Up @@ -127,17 +127,27 @@ function fetchVersions(includePreReleases, repoToken) {
let rest;
if (repoToken != "") {
rest = new restm.RestClient("setup-protoc", "", [], {
headers: { Authorization: "Bearer " + repoToken }
headers: { Authorization: "Bearer " + repoToken },
});
}
else {
rest = new restm.RestClient("setup-protoc");
}
let tags = (yield rest.get("https://api.github.com/repos/protocolbuffers/protobuf/releases")).result || [];
let tags = [];
for (let pageNum = 1, morePages = true; morePages; pageNum++) {
let nextPage = (yield rest.get("https://api.github.com/repos/protocolbuffers/protobuf/releases?page=" +
pageNum)).result || [];
if (nextPage.length > 0) {
tags = tags.concat(nextPage);
}
else {
morePages = false;
}
}
return tags
.filter(tag => tag.tag_name.match(/v\d+\.[\w\.]+/g))
.filter(tag => includePrerelease(tag.prerelease, includePreReleases))
.map(tag => tag.tag_name.replace("v", ""));
.filter((tag) => tag.tag_name.match(/v\d+\.[\w\.]+/g))
.filter((tag) => includePrerelease(tag.prerelease, includePreReleases))
.map((tag) => tag.tag_name.replace("v", ""));
});
}
// Compute an actual version starting from the `version` configuration param.
Expand All @@ -152,13 +162,13 @@ function computeVersion(version, includePreReleases, repoToken) {
version = version.slice(0, version.length - 2);
}
const allVersions = yield fetchVersions(includePreReleases, repoToken);
const validVersions = allVersions.filter(v => semver.valid(v));
const possibleVersions = validVersions.filter(v => v.startsWith(version));
const validVersions = allVersions.filter((v) => semver.valid(v));
const possibleVersions = validVersions.filter((v) => v.startsWith(version));
const versionMap = new Map();
possibleVersions.forEach(v => versionMap.set(normalizeVersion(v), v));
possibleVersions.forEach((v) => versionMap.set(normalizeVersion(v), v));
const versions = Array.from(versionMap.keys())
.sort(semver.rcompare)
.map(v => versionMap.get(v));
.map((v) => versionMap.get(v));
core.debug(`evaluating ${versions.length} versions`);
if (versions.length === 0) {
throw new Error("unable to get latest version");
Expand All @@ -180,7 +190,7 @@ function normalizeVersion(version) {
else {
// handle beta and rc
// e.g. 1.10beta1 -? 1.10.0-beta1, 1.10rc1 -> 1.10.0-rc1
if (preStrings.some(el => versionPart[1].includes(el))) {
if (preStrings.some((el) => versionPart[1].includes(el))) {
versionPart[1] = versionPart[1]
.replace("beta", ".0-beta")
.replace("rc", ".0-rc")
Expand All @@ -196,7 +206,7 @@ function normalizeVersion(version) {
else {
// handle beta and rc
// e.g. 1.8.5beta1 -> 1.8.5-beta1, 1.8.5rc1 -> 1.8.5-rc1
if (preStrings.some(el => versionPart[2].includes(el))) {
if (preStrings.some((el) => versionPart[2].includes(el))) {
versionPart[2] = versionPart[2]
.replace("beta", "-beta")
.replace("rc", "-rc")
Expand Down
4 changes: 2 additions & 2 deletions node_modules/@actions/core/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions node_modules/@actions/exec/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions node_modules/@actions/io/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions node_modules/@actions/tool-cache/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions node_modules/semver/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions node_modules/tunnel/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions node_modules/typed-rest-client/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions node_modules/underscore/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions node_modules/uuid/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading