diff --git a/.github/workflows/pr-check-dist.yml b/.github/workflows/pr-check-dist.yml index 6d18850..78ab292 100644 --- a/.github/workflows/pr-check-dist.yml +++ b/.github/workflows/pr-check-dist.yml @@ -12,12 +12,12 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 19 - + - name: npm install run: npm install diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index 623d257..dd5e6fb 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -1,5 +1,5 @@ name: Tag the new release -on: +on: push: tags: "v[0-9]+.[0-9]+.[0-9]+" @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: | echo "GITHUB_REF is $GITHUB_REF" diff --git a/.github/workflows/wasm-tools-tests.yml b/.github/workflows/wasm-tools-tests.yml index 844ea0d..4c9a56a 100644 --- a/.github/workflows/wasm-tools-tests.yml +++ b/.github/workflows/wasm-tools-tests.yml @@ -12,9 +12,9 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 19 @@ -27,7 +27,7 @@ jobs: NODE_OPTIONS: --openssl-legacy-provider - name: upload artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: setup-wasm-tools path: dist/wasm-tools/setup/index.js @@ -39,10 +39,10 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wasm-tools path: dist/wasm-tools/setup/ @@ -61,10 +61,10 @@ jobs: version: ["1.0.43", "1.200.0"] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wasm-tools path: dist/wasm-tools/setup/ @@ -92,10 +92,10 @@ jobs: version: ["1.0.43", "1.200.0"] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wasm-tools path: dist/wasm-tools/setup/ @@ -113,4 +113,4 @@ jobs: if: ${{ !contains(env.WASM_TOOLS_VERSION, matrix.version) }} run: | echo "expected version: ${{ matrix.version }}, found: ${{ env.WASM_TOOLS_VERSION }}" - exit 1 \ No newline at end of file + exit 1 diff --git a/.github/workflows/wasmtime-tests.yml b/.github/workflows/wasmtime-tests.yml index 476a5f8..75d958b 100644 --- a/.github/workflows/wasmtime-tests.yml +++ b/.github/workflows/wasmtime-tests.yml @@ -12,9 +12,9 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 19 @@ -27,7 +27,7 @@ jobs: NODE_OPTIONS: --openssl-legacy-provider - name: upload artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: setup-wasmtime path: dist/wasmtime/setup/index.js @@ -39,10 +39,10 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wasmtime path: dist/wasmtime/setup/ @@ -61,10 +61,10 @@ jobs: version: ["12.0.0", "17.0.0"] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wasmtime path: dist/wasmtime/setup/ @@ -97,10 +97,10 @@ jobs: version: ["12.0.0", "17.0.0"] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wasmtime path: dist/wasmtime/setup/ diff --git a/.github/workflows/wit-bindgen-tests.yml b/.github/workflows/wit-bindgen-tests.yml index 0c89f26..db81834 100644 --- a/.github/workflows/wit-bindgen-tests.yml +++ b/.github/workflows/wit-bindgen-tests.yml @@ -12,9 +12,9 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: 19 @@ -27,7 +27,7 @@ jobs: NODE_OPTIONS: --openssl-legacy-provider - name: upload artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: setup-wit-bindgen path: dist/wit-bindgen/setup/index.js @@ -39,10 +39,10 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wit-bindgen path: dist/wit-bindgen/setup/ @@ -61,10 +61,10 @@ jobs: version: ["0.16.0", "0.19.0"] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wit-bindgen path: dist/wit-bindgen/setup/ @@ -92,10 +92,10 @@ jobs: version: ["0.16.0", "0.19.0"] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve saved Github action - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: setup-wit-bindgen path: dist/wit-bindgen/setup/ diff --git a/dist/wasm-tools/setup/index.js b/dist/wasm-tools/setup/index.js index f5f4f02..35e609b 100644 --- a/dist/wasm-tools/setup/index.js +++ b/dist/wasm-tools/setup/index.js @@ -16590,6 +16590,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; +var __asyncValues = (this && this.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +}; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.verify = exports.download = exports.getDownloadLink = exports.getLatestRelease = exports.resolveVersion = void 0; const core = __importStar(__nccwpck_require__(2186)); @@ -16609,6 +16616,7 @@ function resolveVersion(owner, repo) { } exports.resolveVersion = resolveVersion; function getLatestRelease(owner, repo) { + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function* () { const token = core.getInput('github_token'); const octokit = (() => { @@ -16617,13 +16625,35 @@ function getLatestRelease(owner, repo) { const platform = (0, system_1.getPlatform)(); const arch = (0, system_1.getArch)(); core.info(`finding latest release for platform ${platform} and architecture ${arch}`); - const allReleases = yield octokit.rest.repos.listReleases({ owner, repo }); - const release = allReleases.data.find(item => !item.prerelease && - item.assets.find(asset => asset.name.includes(ASSET_ARCHIVE_PATTERN))); - if (!release) { - throw new Error(`no releases found for platform ${platform} and architecture ${arch}`); + // Note that `getLatestRelease` isn't used as the are some scenarios where the + // github-tagged latest release won't work (e.g. multiple release artifacts + // from the same repo). + const params = { owner, repo }; + const iter = octokit.paginate.iterator(octokit.rest.repos.listReleases, params); + try { + for (var _d = true, iter_1 = __asyncValues(iter), iter_1_1; iter_1_1 = yield iter_1.next(), _a = iter_1_1.done, !_a;) { + _c = iter_1_1.value; + _d = false; + try { + const releases = _c; + const release = releases.data.find(item => !item.prerelease && + item.assets.find(asset => asset.name.includes(ASSET_ARCHIVE_PATTERN))); + if (release) + return release.tag_name; + } + finally { + _d = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = iter_1.return)) yield _b.call(iter_1); + } + finally { if (e_1) throw e_1.error; } } - return release.tag_name; + throw new Error(`no releases found for platform ${platform} and architecture ${arch}`); }); } exports.getLatestRelease = getLatestRelease; @@ -16635,14 +16665,13 @@ function getDownloadLink(owner, repo, tag_name) { })(); const platform = (0, system_1.getPlatform)(); const arch = (0, system_1.getArch)(); - const allReleases = yield octokit.rest.repos.listReleases({ owner, repo }); - const release = allReleases.data.find(item => item.tag_name === tag_name); + const release = yield octokit.rest.repos.getReleaseByTag({ owner, repo, tag: tag_name }); if (!release) { throw new Error(`failed to find release for tag '${tag_name}' for platform '${platform}' and arch '${arch}'`); } // the archive extension could be .tar.gz (for wasm-tools) or .tar.xz (for wasmtime) const archiveExtension = (0, system_1.getPlatform)() === 'windows' ? '.zip' : '.tar.'; - const asset = release.assets.find(item => item.name.includes(`${ASSET_ARCHIVE_PATTERN}${archiveExtension}`)); + const asset = release.data.assets.find(item => item.name.includes(`${ASSET_ARCHIVE_PATTERN}${archiveExtension}`)); if (!asset) { throw new Error(`failed to find asset for tag '${tag_name}' for platform '${platform}' and arch '${arch}'`); } diff --git a/dist/wasmtime/setup/index.js b/dist/wasmtime/setup/index.js index d924ed0..26f7bbd 100644 --- a/dist/wasmtime/setup/index.js +++ b/dist/wasmtime/setup/index.js @@ -16590,6 +16590,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; +var __asyncValues = (this && this.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +}; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.verify = exports.download = exports.getDownloadLink = exports.getLatestRelease = exports.resolveVersion = void 0; const core = __importStar(__nccwpck_require__(2186)); @@ -16609,6 +16616,7 @@ function resolveVersion(owner, repo) { } exports.resolveVersion = resolveVersion; function getLatestRelease(owner, repo) { + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function* () { const token = core.getInput('github_token'); const octokit = (() => { @@ -16617,13 +16625,35 @@ function getLatestRelease(owner, repo) { const platform = (0, system_1.getPlatform)(); const arch = (0, system_1.getArch)(); core.info(`finding latest release for platform ${platform} and architecture ${arch}`); - const allReleases = yield octokit.rest.repos.listReleases({ owner, repo }); - const release = allReleases.data.find(item => !item.prerelease && - item.assets.find(asset => asset.name.includes(ASSET_ARCHIVE_PATTERN))); - if (!release) { - throw new Error(`no releases found for platform ${platform} and architecture ${arch}`); + // Note that `getLatestRelease` isn't used as the are some scenarios where the + // github-tagged latest release won't work (e.g. multiple release artifacts + // from the same repo). + const params = { owner, repo }; + const iter = octokit.paginate.iterator(octokit.rest.repos.listReleases, params); + try { + for (var _d = true, iter_1 = __asyncValues(iter), iter_1_1; iter_1_1 = yield iter_1.next(), _a = iter_1_1.done, !_a;) { + _c = iter_1_1.value; + _d = false; + try { + const releases = _c; + const release = releases.data.find(item => !item.prerelease && + item.assets.find(asset => asset.name.includes(ASSET_ARCHIVE_PATTERN))); + if (release) + return release.tag_name; + } + finally { + _d = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = iter_1.return)) yield _b.call(iter_1); + } + finally { if (e_1) throw e_1.error; } } - return release.tag_name; + throw new Error(`no releases found for platform ${platform} and architecture ${arch}`); }); } exports.getLatestRelease = getLatestRelease; @@ -16635,14 +16665,13 @@ function getDownloadLink(owner, repo, tag_name) { })(); const platform = (0, system_1.getPlatform)(); const arch = (0, system_1.getArch)(); - const allReleases = yield octokit.rest.repos.listReleases({ owner, repo }); - const release = allReleases.data.find(item => item.tag_name === tag_name); + const release = yield octokit.rest.repos.getReleaseByTag({ owner, repo, tag: tag_name }); if (!release) { throw new Error(`failed to find release for tag '${tag_name}' for platform '${platform}' and arch '${arch}'`); } // the archive extension could be .tar.gz (for wasm-tools) or .tar.xz (for wasmtime) const archiveExtension = (0, system_1.getPlatform)() === 'windows' ? '.zip' : '.tar.'; - const asset = release.assets.find(item => item.name.includes(`${ASSET_ARCHIVE_PATTERN}${archiveExtension}`)); + const asset = release.data.assets.find(item => item.name.includes(`${ASSET_ARCHIVE_PATTERN}${archiveExtension}`)); if (!asset) { throw new Error(`failed to find asset for tag '${tag_name}' for platform '${platform}' and arch '${arch}'`); } diff --git a/dist/wit-bindgen/setup/index.js b/dist/wit-bindgen/setup/index.js index 98f1132..031f7f9 100644 --- a/dist/wit-bindgen/setup/index.js +++ b/dist/wit-bindgen/setup/index.js @@ -16590,6 +16590,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; +var __asyncValues = (this && this.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +}; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.verify = exports.download = exports.getDownloadLink = exports.getLatestRelease = exports.resolveVersion = void 0; const core = __importStar(__nccwpck_require__(2186)); @@ -16609,6 +16616,7 @@ function resolveVersion(owner, repo) { } exports.resolveVersion = resolveVersion; function getLatestRelease(owner, repo) { + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function* () { const token = core.getInput('github_token'); const octokit = (() => { @@ -16617,13 +16625,35 @@ function getLatestRelease(owner, repo) { const platform = (0, system_1.getPlatform)(); const arch = (0, system_1.getArch)(); core.info(`finding latest release for platform ${platform} and architecture ${arch}`); - const allReleases = yield octokit.rest.repos.listReleases({ owner, repo }); - const release = allReleases.data.find(item => !item.prerelease && - item.assets.find(asset => asset.name.includes(ASSET_ARCHIVE_PATTERN))); - if (!release) { - throw new Error(`no releases found for platform ${platform} and architecture ${arch}`); + // Note that `getLatestRelease` isn't used as the are some scenarios where the + // github-tagged latest release won't work (e.g. multiple release artifacts + // from the same repo). + const params = { owner, repo }; + const iter = octokit.paginate.iterator(octokit.rest.repos.listReleases, params); + try { + for (var _d = true, iter_1 = __asyncValues(iter), iter_1_1; iter_1_1 = yield iter_1.next(), _a = iter_1_1.done, !_a;) { + _c = iter_1_1.value; + _d = false; + try { + const releases = _c; + const release = releases.data.find(item => !item.prerelease && + item.assets.find(asset => asset.name.includes(ASSET_ARCHIVE_PATTERN))); + if (release) + return release.tag_name; + } + finally { + _d = true; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = iter_1.return)) yield _b.call(iter_1); + } + finally { if (e_1) throw e_1.error; } } - return release.tag_name; + throw new Error(`no releases found for platform ${platform} and architecture ${arch}`); }); } exports.getLatestRelease = getLatestRelease; @@ -16635,14 +16665,13 @@ function getDownloadLink(owner, repo, tag_name) { })(); const platform = (0, system_1.getPlatform)(); const arch = (0, system_1.getArch)(); - const allReleases = yield octokit.rest.repos.listReleases({ owner, repo }); - const release = allReleases.data.find(item => item.tag_name === tag_name); + const release = yield octokit.rest.repos.getReleaseByTag({ owner, repo, tag: tag_name }); if (!release) { throw new Error(`failed to find release for tag '${tag_name}' for platform '${platform}' and arch '${arch}'`); } // the archive extension could be .tar.gz (for wasm-tools) or .tar.xz (for wasmtime) const archiveExtension = (0, system_1.getPlatform)() === 'windows' ? '.zip' : '.tar.'; - const asset = release.assets.find(item => item.name.includes(`${ASSET_ARCHIVE_PATTERN}${archiveExtension}`)); + const asset = release.data.assets.find(item => item.name.includes(`${ASSET_ARCHIVE_PATTERN}${archiveExtension}`)); if (!asset) { throw new Error(`failed to find asset for tag '${tag_name}' for platform '${platform}' and arch '${arch}'`); } diff --git a/src/action.ts b/src/action.ts index 66b7549..1e6b0f9 100644 --- a/src/action.ts +++ b/src/action.ts @@ -35,20 +35,24 @@ export async function getLatestRelease( `finding latest release for platform ${platform} and architecture ${arch}` ) - const allReleases = await octokit.rest.repos.listReleases({owner, repo}) - const release = allReleases.data.find( - item => - !item.prerelease && - item.assets.find(asset => asset.name.includes(ASSET_ARCHIVE_PATTERN)) - ) - - if (!release) { - throw new Error( - `no releases found for platform ${platform} and architecture ${arch}` + // Note that `getLatestRelease` isn't used as the are some scenarios where the + // github-tagged latest release won't work (e.g. multiple release artifacts + // from the same repo). + const params = {owner, repo}; + const iter = octokit.paginate.iterator(octokit.rest.repos.listReleases, params); + for await (const releases of iter) { + const release = releases.data.find( + item => + !item.prerelease && + item.assets.find(asset => asset.name.includes(ASSET_ARCHIVE_PATTERN)) ) + if (release) + return release.tag_name; } - return release.tag_name + throw new Error( + `no releases found for platform ${platform} and architecture ${arch}` + ) } export async function getDownloadLink( @@ -64,8 +68,7 @@ export async function getDownloadLink( const platform = getPlatform() const arch = getArch() - const allReleases = await octokit.rest.repos.listReleases({owner, repo}) - const release = allReleases.data.find(item => item.tag_name === tag_name) + const release = await octokit.rest.repos.getReleaseByTag({owner, repo, tag: tag_name}) if (!release) { throw new Error( `failed to find release for tag '${tag_name}' for platform '${platform}' and arch '${arch}'` @@ -74,7 +77,7 @@ export async function getDownloadLink( // the archive extension could be .tar.gz (for wasm-tools) or .tar.xz (for wasmtime) const archiveExtension = getPlatform() === 'windows' ? '.zip' : '.tar.' - const asset = release.assets.find(item => + const asset = release.data.assets.find(item => item.name.includes(`${ASSET_ARCHIVE_PATTERN}${archiveExtension}`) )