diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b836370..83c8a27f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,12 +20,12 @@ jobs: node-version: '12' - run: npm install -g npm - run: npm install - - run: npm run build - run: npm run jslint - run: npm run licenses - run: npm install -g markdownlint-cli - run: npm run markdownlint - run: npm run shellcheck - run: npm run yamllint + - run: npm run build - name: Check if build left artifacts run: git diff --exit-code diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a2237004..b8da3145 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,11 +11,6 @@ jobs: unit_test: name: Pre-release unit tests runs-on: ubuntu-latest - env: - CI_TEST_OTP_VSN: '23.2' - CI_TEST_ELIXIR_VSN: '1.11' - CI_TEST_REBAR3_VSN: '3.14' - CI_TEST_ENV: test steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 diff --git a/__tests__/rebar3_builds.txt b/__tests__/rebar3_builds.txt new file mode 100644 index 00000000..6811b4a4 --- /dev/null +++ b/__tests__/rebar3_builds.txt @@ -0,0 +1,302 @@ +[ + { + "name": "beta-4", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/beta-4", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/beta-4", + "commit": { + "sha": "356ac5033d12b8b91ed0d6c4d308b00070ab12b9", + "url": "https://api.github.com/repos/erlang/rebar3/commits/356ac5033d12b8b91ed0d6c4d308b00070ab12b9" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2JldGEtNA==" + }, + { + "name": "beta-2", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/beta-2", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/beta-2", + "commit": { + "sha": "bfd40d502b429100bab7980c7a0557b6d573e4ce", + "url": "https://api.github.com/repos/erlang/rebar3/commits/bfd40d502b429100bab7980c7a0557b6d573e4ce" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2JldGEtMg==" + }, + { + "name": "beta-1", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/beta-1", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/beta-1", + "commit": { + "sha": "4f981061f3ed3a89c2f1fad41601d8adaff9ecc5", + "url": "https://api.github.com/repos/erlang/rebar3/commits/4f981061f3ed3a89c2f1fad41601d8adaff9ecc5" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2JldGEtMQ==" + }, + { + "name": "alpha", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/alpha", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/alpha", + "commit": { + "sha": "5ef7d024c30c35e69e4882c1bc847fd46af6901a", + "url": "https://api.github.com/repos/erlang/rebar3/commits/5ef7d024c30c35e69e4882c1bc847fd46af6901a" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2FscGhh" + }, + { + "name": "alpha-6", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/alpha-6", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/alpha-6", + "commit": { + "sha": "e09be186c10c113040fd984fa27cbda5581eef0f", + "url": "https://api.github.com/repos/erlang/rebar3/commits/e09be186c10c113040fd984fa27cbda5581eef0f" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2FscGhhLTY=" + }, + { + "name": "alpha-5", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/alpha-5", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/alpha-5", + "commit": { + "sha": "8642e923c6fd9f1887b3499b3c92069eed875d22", + "url": "https://api.github.com/repos/erlang/rebar3/commits/8642e923c6fd9f1887b3499b3c92069eed875d22" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2FscGhhLTU=" + }, + { + "name": "alpha-4", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/alpha-4", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/alpha-4", + "commit": { + "sha": "38191c369a29c4cd8f6c5a30233014b7d7547813", + "url": "https://api.github.com/repos/erlang/rebar3/commits/38191c369a29c4cd8f6c5a30233014b7d7547813" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2FscGhhLTQ=" + }, + { + "name": "alpha-3", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/alpha-3", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/alpha-3", + "commit": { + "sha": "15a7ccfaab4af9da65dfed834a0762d835f6bd2c", + "url": "https://api.github.com/repos/erlang/rebar3/commits/15a7ccfaab4af9da65dfed834a0762d835f6bd2c" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2FscGhhLTM=" + }, + { + "name": "alpha-2", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/alpha-2", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/alpha-2", + "commit": { + "sha": "61455c04d01b07aa9a12368091259bbb840e836a", + "url": "https://api.github.com/repos/erlang/rebar3/commits/61455c04d01b07aa9a12368091259bbb840e836a" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2FscGhhLTI=" + }, + { + "name": "alpha-1", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/alpha-1", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/alpha-1", + "commit": { + "sha": "f97d5ab19df1f199e2cad6b3017c7cb017c69ede", + "url": "https://api.github.com/repos/erlang/rebar3/commits/f97d5ab19df1f199e2cad6b3017c7cb017c69ede" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzL2FscGhhLTE=" + }, + { + "name": "3.14.4", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.14.4", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.14.4", + "commit": { + "sha": "2d443b5c8b9fe5f1beb8027e9c2ca7e5dcc61810", + "url": "https://api.github.com/repos/erlang/rebar3/commits/2d443b5c8b9fe5f1beb8027e9c2ca7e5dcc61810" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTQuNA==" + }, + { + "name": "3.14.3", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.14.3", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.14.3", + "commit": { + "sha": "6036581295a6741612dea9eed5277affc5da21d1", + "url": "https://api.github.com/repos/erlang/rebar3/commits/6036581295a6741612dea9eed5277affc5da21d1" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTQuMw==" + }, + { + "name": "3.14.2", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.14.2", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.14.2", + "commit": { + "sha": "07fdbf5e2a1126d190cabb19d5d9a2db33f230cf", + "url": "https://api.github.com/repos/erlang/rebar3/commits/07fdbf5e2a1126d190cabb19d5d9a2db33f230cf" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTQuMg==" + }, + { + "name": "3.14.1", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.14.1", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.14.1", + "commit": { + "sha": "7b90fafef225fea20e7c1acab6052d28fd9f9edf", + "url": "https://api.github.com/repos/erlang/rebar3/commits/7b90fafef225fea20e7c1acab6052d28fd9f9edf" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTQuMQ==" + }, + { + "name": "3.14.0", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.14.0", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.14.0", + "commit": { + "sha": "390421e1c3a76029c611d2f33aff8d8f5b4ea562", + "url": "https://api.github.com/repos/erlang/rebar3/commits/390421e1c3a76029c611d2f33aff8d8f5b4ea562" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTQuMA==" + }, + { + "name": "3.14.0-rc2", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.14.0-rc2", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.14.0-rc2", + "commit": { + "sha": "9e6dacc9e51c5fe501b393952a32d379a0041897", + "url": "https://api.github.com/repos/erlang/rebar3/commits/9e6dacc9e51c5fe501b393952a32d379a0041897" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTQuMC1yYzI=" + }, + { + "name": "3.14.0-rc1", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.14.0-rc1", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.14.0-rc1", + "commit": { + "sha": "11936db9a8ecd0d8d85a7c4c846220fb39bdb3f7", + "url": "https://api.github.com/repos/erlang/rebar3/commits/11936db9a8ecd0d8d85a7c4c846220fb39bdb3f7" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTQuMC1yYzE=" + }, + { + "name": "3.13.2", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.13.2", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.13.2", + "commit": { + "sha": "73c36138ffbca4851331878791156845047761d2", + "url": "https://api.github.com/repos/erlang/rebar3/commits/73c36138ffbca4851331878791156845047761d2" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTMuMg==" + }, + { + "name": "3.13.1", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.13.1", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.13.1", + "commit": { + "sha": "411347618031227b6d2de01112e175876a106e60", + "url": "https://api.github.com/repos/erlang/rebar3/commits/411347618031227b6d2de01112e175876a106e60" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTMuMQ==" + }, + { + "name": "3.13.0", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.13.0", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.13.0", + "commit": { + "sha": "e33357af97605f8b2cfffab3e16fc1588165afa1", + "url": "https://api.github.com/repos/erlang/rebar3/commits/e33357af97605f8b2cfffab3e16fc1588165afa1" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTMuMA==" + }, + { + "name": "3.12.0", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.12.0", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.12.0", + "commit": { + "sha": "6cf8f2633d1e9e2d1f4c61ab450b57390da8cf66", + "url": "https://api.github.com/repos/erlang/rebar3/commits/6cf8f2633d1e9e2d1f4c61ab450b57390da8cf66" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTIuMA==" + }, + { + "name": "3.11.1", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.11.1", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.11.1", + "commit": { + "sha": "2d63f7d273ab9965a70019e1dd94a11a632247b3", + "url": "https://api.github.com/repos/erlang/rebar3/commits/2d63f7d273ab9965a70019e1dd94a11a632247b3" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTEuMQ==" + }, + { + "name": "3.11.0", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.11.0", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.11.0", + "commit": { + "sha": "0860d9f9f345574ee46e43379a2bc10e6ac521a3", + "url": "https://api.github.com/repos/erlang/rebar3/commits/0860d9f9f345574ee46e43379a2bc10e6ac521a3" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTEuMA==" + }, + { + "name": "3.10.0", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.10.0", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.10.0", + "commit": { + "sha": "1cee74f7306098bb503fe98d55dd270cf712ff42", + "url": "https://api.github.com/repos/erlang/rebar3/commits/1cee74f7306098bb503fe98d55dd270cf712ff42" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuMTAuMA==" + }, + { + "name": "3.9.1", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.9.1", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.9.1", + "commit": { + "sha": "df53ad18ff5330660bd102d3a4071cb0962c8dda", + "url": "https://api.github.com/repos/erlang/rebar3/commits/df53ad18ff5330660bd102d3a4071cb0962c8dda" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuOS4x" + }, + { + "name": "3.9.0", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.9.0", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.9.0", + "commit": { + "sha": "94bcd31f94bee7c33d642e9d78fc9cf60f7015d0", + "url": "https://api.github.com/repos/erlang/rebar3/commits/94bcd31f94bee7c33d642e9d78fc9cf60f7015d0" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuOS4w" + }, + { + "name": "3.8.0", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.8.0", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.8.0", + "commit": { + "sha": "4b6f537df214f91eafd4f15a57058d1e7d247e67", + "url": "https://api.github.com/repos/erlang/rebar3/commits/4b6f537df214f91eafd4f15a57058d1e7d247e67" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuOC4w" + }, + { + "name": "3.7.5", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.7.5", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.7.5", + "commit": { + "sha": "b562a893f8967cf8102d1ded8d3d23a66ff1116a", + "url": "https://api.github.com/repos/erlang/rebar3/commits/b562a893f8967cf8102d1ded8d3d23a66ff1116a" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuNy41" + }, + { + "name": "3.7.4", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.7.4", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.7.4", + "commit": { + "sha": "0907ccea9a235432118946e51e874e84b7e9a25d", + "url": "https://api.github.com/repos/erlang/rebar3/commits/0907ccea9a235432118946e51e874e84b7e9a25d" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuNy40" + }, + { + "name": "3.7.3", + "zipball_url": "https://api.github.com/repos/erlang/rebar3/zipball/3.7.3", + "tarball_url": "https://api.github.com/repos/erlang/rebar3/tarball/3.7.3", + "commit": { + "sha": "fc20a946609a8d1e22686472c47c2896b97eaefa", + "url": "https://api.github.com/repos/erlang/rebar3/commits/fc20a946609a8d1e22686472c47c2896b97eaefa" + }, + "node_id": "MDM6UmVmMjY2MTAxMzA6cmVmcy90YWdzLzMuNy4z" + } +] diff --git a/__tests__/setup-beam.test.js b/__tests__/setup-beam.test.js index c5fe7531..f0b4ca49 100644 --- a/__tests__/setup-beam.test.js +++ b/__tests__/setup-beam.test.js @@ -1,34 +1,87 @@ const setupElixir = require('../src/setup-elixir') const {deepStrictEqual} = require('assert') +const { + promises: {readFile}, +} = require('fs') async function test() { - let vsn - vsn = await setupElixir.getOTPVersion('19.3.x', 'ubuntu-16.04') - deepStrictEqual(vsn, 'OTP-19.3.6') + simulateInput('otp-version', '23.2') + simulateInput('elixir-version', '1.11') + simulateInput('rebar3-version', '3.14') - vsn = await setupElixir.getOTPVersion('^19.3.6', 'ubuntu-16.04') - deepStrictEqual(vsn, 'OTP-19.3.6') + getOTPVersion({ + spec: '19.3.x', osVersion: 'ubuntu-16.04', + expected: 'OTP-19.3.6', + }) + + getOTPVersion({ + spec: '^19.3.6', osVersion: 'ubuntu-16.04', + expected: 'OTP-19.3.6', + }) + + getOTPVersion({ + spec: '^19.3', osVersion: 'ubuntu-18.04', + expected: 'OTP-19.3.6', + }) + + getElixirVersion({ + spec: 'v1.10.x', otpVersion: 'OTP-23', + expected: ['v1.10.4', '23'], + }) + + getElixirVersion({ + spec: '^v1.10', otpVersion: 'OTP-23', + expected: ['v1.10.4', '23'], + }) + + getElixirVersion({ + spec: 'v1.11.0-rc.0', otpVersion: 'OTP-23', + expected: ['v1.11.0-rc.0', '23'], + }) - vsn = await setupElixir.getOTPVersion('^19.3', 'ubuntu-18.04') - deepStrictEqual(vsn, 'OTP-19.3.6') + getRebar3Version({ + spec: '3.x', + expected: '3.14.4', + }) - vsn = await setupElixir.getElixirVersion('v1.10.x', 'OTP-23') - deepStrictEqual(vsn, ['v1.10.4', '23']) + getRebar3Version({ + spec: '^3.14.4', + expected: '3.14.4', + }) + + getRebar3Version({ + spec: '^3.14', + expected: '3.14.4', + }) +} - vsn = await setupElixir.getElixirVersion('^v1.10', 'OTP-23') - deepStrictEqual(vsn, ['v1.10.4', '23']) +async function getOTPVersion(opts) { + const otpBuildsListing = listing('erlang_builds.txt') + const got = await setupElixir.getOTPVersion(opts.spec, opts.osVersion, otpBuildsListing) + const expected = opts.expected + deepStrictEqual(got, expected) +} - vsn = await setupElixir.getElixirVersion('v1.11.0-rc.0', 'OTP-23') - deepStrictEqual(vsn, ['v1.11.0-rc.0', '23']) +async function getElixirVersion(opts) { + const elixirBuildsListing = listing('elixir_builds.txt') + const got = await setupElixir.getElixirVersion(opts.spec, opts.otpVersion, elixirBuildsListing) + const expected = opts.expected + deepStrictEqual(got, expected) +} - vsn = await setupElixir.getRebar3Version('3.x') - deepStrictEqual(vsn, '3.14.4') +async function getRebar3Version(opts) { + const rebar3BuildsListing = listing('rebar3_builds.txt') + const got = await setupElixir.getRebar3Version(opts.spec, rebar3BuildsListing) + const expected = opts.expected + deepStrictEqual(got, expected) +} - vsn = await setupElixir.getRebar3Version('^3.14.4') - deepStrictEqual(vsn, '3.14.4') +function listing(filename) { + return readFile(path.join(__dirname, '..', '__tests__', filename)).then((buf) => buf.toString()) +} - vsn = await setupElixir.getRebar3Version('^3.14') - deepStrictEqual(vsn, '3.14.4') +function simulateInput(key, value) { + process.env[`INPUT_${key.replace(/ /g, '_').toUpperCase()}`] = value } test() diff --git a/dist/.github/workflows/ci.yml b/dist/.github/workflows/ci.yml index 2b836370..83c8a27f 100644 --- a/dist/.github/workflows/ci.yml +++ b/dist/.github/workflows/ci.yml @@ -20,12 +20,12 @@ jobs: node-version: '12' - run: npm install -g npm - run: npm install - - run: npm run build - run: npm run jslint - run: npm run licenses - run: npm install -g markdownlint-cli - run: npm run markdownlint - run: npm run shellcheck - run: npm run yamllint + - run: npm run build - name: Check if build left artifacts run: git diff --exit-code diff --git a/dist/.github/workflows/test.yml b/dist/.github/workflows/test.yml index a2237004..b8da3145 100644 --- a/dist/.github/workflows/test.yml +++ b/dist/.github/workflows/test.yml @@ -11,11 +11,6 @@ jobs: unit_test: name: Pre-release unit tests runs-on: ubuntu-latest - env: - CI_TEST_OTP_VSN: '23.2' - CI_TEST_ELIXIR_VSN: '1.11' - CI_TEST_REBAR3_VSN: '3.14' - CI_TEST_ENV: test steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 diff --git a/dist/.github1/elixir.json b/dist/.github1/elixir.json deleted file mode 100644 index e26040d3..00000000 --- a/dist/.github1/elixir.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "problemMatcher": [ - { - "owner": "elixir-mixCompileError", - "severity": "error", - "pattern": [ - { - "regexp": "^\\*\\* \\((\\w+)\\) (.*):(\\d+): (.*)$", - "file": 2, - "line": 3, - "message": 0 - } - ] - }, - { - "owner": "elixir-mixCompileWarning", - "severity": "warning", - "pattern": [ - { - "regexp": "^warning: (.*)$", - "message": 1 - }, - { - "regexp": "^ (.*):(\\d+).*$", - "file": 1, - "line": 2 - } - ] - }, - { - "owner": "elixir-mixTestFailure", - "severity": "error", - "pattern": [ - { - "regexp": "^\\s*\\d+\\) (.*)$", - "message": 1 - }, - { - "regexp": "^\\s*(.*):(\\d+)$", - "file": 1, - "line": 2 - } - ] - } - ] -} diff --git a/dist/.github1/workflows/ci.yml b/dist/.github1/workflows/ci.yml deleted file mode 100644 index 2b836370..00000000 --- a/dist/.github1/workflows/ci.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -name: ci - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - check_integrity: - name: Make sure expected pre-release actions are performed - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: '12' - - run: npm install -g npm - - run: npm install - - run: npm run build - - run: npm run jslint - - run: npm run licenses - - run: npm install -g markdownlint-cli - - run: npm run markdownlint - - run: npm run shellcheck - - run: npm run yamllint - - name: Check if build left artifacts - run: git diff --exit-code diff --git a/dist/.github1/workflows/test.yml b/dist/.github1/workflows/test.yml deleted file mode 100644 index a2237004..00000000 --- a/dist/.github1/workflows/test.yml +++ /dev/null @@ -1,90 +0,0 @@ ---- -name: test - -on: - push: {branches: main} - pull_request: {branches: main} - repository_dispatch: - workflow_dispatch: - -jobs: - unit_test: - name: Pre-release unit tests - runs-on: ubuntu-latest - env: - CI_TEST_OTP_VSN: '23.2' - CI_TEST_ELIXIR_VSN: '1.11' - CI_TEST_REBAR3_VSN: '3.14' - CI_TEST_ENV: test - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: {node-version: '12'} - - run: npm ci - - run: npm test - - integration_test: - name: > - Pre-release integration tests - (Erlang/OTP ${{matrix.pair.otp-version}}, - Elixir ${{matrix.pair.elixir-version}}, - rebar3 ${{matrix.pair.rebar3-version}}) - runs-on: ubuntu-latest - strategy: - matrix: - pair: - # Full Versions - - otp-version: '22.0' - elixir-version: '1.9.1' - - otp-version: '22.3.4' - rebar3-version: '3.14.4' - - otp-version: '23.2' - rebar3-version: '3.14.4' - # Semver ranges - - otp-version: '21.x' - elixir-version: '<1.9.1' - - otp-version: '21.x' - rebar3-version: '3.14.4' - - otp-version: '22.3.4' - rebar3-version: '3.x' - # Branches - - otp-version: '22.0' - elixir-version: master - - otp-version: 'master' - elixir-version: '1.11.3' - # Pre-releases - - otp-version: '23.0' - elixir-version: '1.11.0-rc.0' - steps: - - uses: actions/checkout@v2 - - name: Use erlef/setup-elixir - id: setup-elixir - uses: ./ - with: - otp-version: ${{matrix.pair.otp-version}} - elixir-version: ${{matrix.pair.elixir-version}} - rebar3-version: ${{matrix.pair.rebar3-version}} - - name: Output Erlang/OTP version - run: echo "Erlang/OTP ${{steps.setup-elixir.outputs.otp-version}}" - - name: Check Erlang/OTP version - run: erl -version - - name: Output Elixir version - run: echo "Elixir ${{steps.setup-elixir.outputs.elixir-version}}" - if: ${{matrix.pair.elixir-version}} - - name: Run Mix project tests - run: |- - cd test-projects/mix - mix deps.get - mix test - if: ${{matrix.pair.elixir-version}} - - name: Run rebar3 project tests - run: | - cd test-projects/rebar3 - rebar3 as test do xref,dialyzer,ct,cover - if: ${{matrix.pair.rebar3-version}} - - name: Output rebar3 version - run: echo "rebar3 ${{steps.setup-elixir.outputs.rebar3-version}}" - if: ${{matrix.pair.rebar3-version}} - - name: Check rebar3 version - run: rebar3 version - if: ${{matrix.pair.rebar3-version}} diff --git a/dist/__tests__/elixir_builds.txt b/dist/__tests__/elixir_builds.txt deleted file mode 100644 index 3c118d0d..00000000 --- a/dist/__tests__/elixir_builds.txt +++ /dev/null @@ -1,313 +0,0 @@ -master d25b61db13d94ee83374748581c7bcb8e2dfc0e6 2020-09-16T06:12:57Z a8ca8155a9b4b6ec1d60454f9032a29d4b95afa782984e3ed783c5f242541090 -master-otp-21 d25b61db13d94ee83374748581c7bcb8e2dfc0e6 2020-09-16T06:12:48Z a8ca8155a9b4b6ec1d60454f9032a29d4b95afa782984e3ed783c5f242541090 -master-otp-22 d25b61db13d94ee83374748581c7bcb8e2dfc0e6 2020-09-16T06:11:25Z 917d5856e50670c8670e60fcbaddd74aa207e7cb60a91fe5f7d62959db1161de -master-otp-23 d25b61db13d94ee83374748581c7bcb8e2dfc0e6 2020-09-16T06:09:48Z 80af5358209cdc3c8321c3852e962957fd3e63a22b1da13f56a3f1571ecb1e7e -v0.12.4 543dfdeac80cfaf3483927c189cf9974f1e361eb 2016-06-02T12:43:53Z -v0.12.5 b07fbcf8b73e9353cc336107050a8aac5fdabd11 2016-06-02T12:42:56Z -v0.13.0 ada53524caa6ea27ffaa1a373f5c86bd6cadb0d5 2016-06-02T12:42:00Z -v0.13.1 c03d42b0ccf38b31dcaef0cb7e9ea8851cb39907 2016-06-02T12:41:00Z -v0.13.2 7a24767137c596a84014a0ed1a8dde64e45f9666 2016-06-02T12:40:00Z -v0.13.3 3c48099718cd718d25527875a407cc842cf72565 2016-06-02T12:39:01Z -v0.14.0 9cff61493e9e3626e8d243dfe8aec07230a7fe73 2016-06-02T12:38:04Z -v0.14.1 22f3a50ebabfefd36be1a8472c8b78257df6affa 2016-03-07T22:22:53Z -v0.14.2 44b04120425c83984c867ee6b06974b7c139ba52 2016-03-07T22:22:53Z -v0.14.3 82535feb90ba1a27ad12b9389d86b11b8311a618 2016-06-02T12:36:35Z -v0.15.0 2f2a52a64874a0a5b6d5c1fab812a80e94d982bc 2016-06-02T12:35:36Z -v0.15.1 a54d9212b89da61ec0dd4227ed24e59f37738fe5 2016-06-02T12:34:37Z -v1.0 9033b217d9721c86d1e73ccd91ceb7c6716124d9 2020-03-25T22:13:41Z 0fccc644156e18ff02c8fe0fa6d3b5ee085b05ecc956ae93151ea938d2d0297b -v1.0-otp-17 9033b217d9721c86d1e73ccd91ceb7c6716124d9 2020-03-25T22:13:35Z 0fccc644156e18ff02c8fe0fa6d3b5ee085b05ecc956ae93151ea938d2d0297b -v1.0-otp-18 9033b217d9721c86d1e73ccd91ceb7c6716124d9 2020-03-25T22:12:48Z a3d53f5001261eca9c976b911f3ece7b0d32ec45029975781c1b67f0511eb216 -v1.0.0 52ff7e96867c027745d29f5d3feb77f546f22c4f 2017-06-26T04:08:29Z -v1.0.0-otp-17 52ff7e96867c027745d29f5d3feb77f546f22c4f 2017-06-26T04:08:31Z -v1.0.0-rc1 5b4497fa6b2da7831418cf1307248dc73b4ee34b 2017-06-26T04:12:30Z -v1.0.0-rc1-otp-17 5b4497fa6b2da7831418cf1307248dc73b4ee34b 2017-06-26T04:12:32Z -v1.0.0-rc2 8931f345826b71056ab3df0fba7dbb1b9c3bce25 2017-06-26T04:10:30Z -v1.0.0-rc2-otp-17 8931f345826b71056ab3df0fba7dbb1b9c3bce25 2017-06-26T04:10:32Z -v1.0.1 89460154bb1ab3faa9a7aad4a1edc621cc35d1de 2017-06-26T04:06:28Z -v1.0.1-otp-17 89460154bb1ab3faa9a7aad4a1edc621cc35d1de 2017-06-26T04:06:30Z -v1.0.2 34df8176385200d483ab483a973c498ffa62e580 2017-06-26T04:04:26Z -v1.0.2-otp-17 34df8176385200d483ab483a973c498ffa62e580 2017-06-26T04:04:28Z -v1.0.3 307675284cfde2e2e3ff4b868ff5c2253dac3936 2017-06-26T04:02:25Z -v1.0.3-otp-17 307675284cfde2e2e3ff4b868ff5c2253dac3936 2017-06-26T04:02:27Z -v1.0.4 e02d7bf913f3e5ea8c9e49648e69324ec5c65919 2020-03-25T22:13:16Z 64aa83a5f82a36f451e692f2abb080756056b141e45a088546610182916aab1e -v1.0.4-otp-17 e02d7bf913f3e5ea8c9e49648e69324ec5c65919 2020-03-25T22:13:10Z 64aa83a5f82a36f451e692f2abb080756056b141e45a088546610182916aab1e -v1.0.5 3eb938a0ba7db5c6cc13d390e6242f66fdc9ef00 2020-03-25T22:13:18Z 7fab3ebec908087824c94e9a9d2606aa83793d98737a5389e737aad71d1b6d5b -v1.0.5-otp-17 3eb938a0ba7db5c6cc13d390e6242f66fdc9ef00 2020-03-25T21:25:52Z fb980bd05a63a3d419fc56235c52dbef96bcd91b559da523a12f92e352d49719 -v1.0.5-otp-18 3eb938a0ba7db5c6cc13d390e6242f66fdc9ef00 2018-11-25T23:13:38Z -v1.1 5591ab2dffeb8df448728dd2e712c416ac1a07ca 2020-03-25T22:14:09Z 085c6bfbce870870741cbdbf4917e3785b54bd804749955052d8875857847652 -v1.1-otp-17 5591ab2dffeb8df448728dd2e712c416ac1a07ca 2020-03-25T22:14:03Z 085c6bfbce870870741cbdbf4917e3785b54bd804749955052d8875857847652 -v1.1-otp-18 5591ab2dffeb8df448728dd2e712c416ac1a07ca 2020-03-25T21:25:40Z 3989ccea818ce8da9d355f9b3080780cd1c0fc03b51a2d0bb47673250bae4504 -v1.1.0 f2a9c7016633ca63541a8160c63a53eb7edbccdb 2020-03-25T21:27:07Z de44f8b3b3969d2fd280a50f4f96a8f2b7249037a696d6c2214d50b4e3b9adb9 -v1.1.0-otp-17 f2a9c7016633ca63541a8160c63a53eb7edbccdb 2020-03-25T22:14:20Z a0b5ff7c507881f6557c86686574c046b5bd67cddf2fedfc82cd5d9c8176ed0b -v1.1.0-otp-18 f2a9c7016633ca63541a8160c63a53eb7edbccdb 2020-03-25T22:13:27Z e767678a166e0799792321073f53ac9655d120e8fa0a5a789af6832356c53755 -v1.1.0-rc.0 0e3c06b03149022b980e69872003d401c4788fea 2020-03-25T21:27:09Z 205c018fd2b0a4ebd4fa00a43b68cf2222aba43ab06fc07eeda98c0058a3d6d6 -v1.1.0-rc.0-otp-17 0e3c06b03149022b980e69872003d401c4788fea 2020-03-25T22:14:30Z 9a5674bfc64bc7236436c097d99aafce02c83ec926d58854a1f175284f271648 -v1.1.0-rc.0-otp-18 0e3c06b03149022b980e69872003d401c4788fea 2020-03-25T22:13:38Z 81a3be6e2711a66c90676ad0029ee305430e7c9384901857a1ec9047aea30235 -v1.1.1 139d2eac5998259379862ff6ed2a5287f7de4ea6 2020-03-25T22:14:44Z 61c3ebc971aecfe8624ff819ab7b2e7a7802a867f2ec5407c9827d879521b866 -v1.1.1-otp-17 139d2eac5998259379862ff6ed2a5287f7de4ea6 2020-03-25T22:14:38Z 61c3ebc971aecfe8624ff819ab7b2e7a7802a867f2ec5407c9827d879521b866 -v1.1.1-otp-18 139d2eac5998259379862ff6ed2a5287f7de4ea6 2020-03-25T22:13:44Z bdfa8f86fc0ca296c045b67d6c7d9a7b25f3dddcb2388c066dddfe03e231a0aa -v1.10 8731ef03d97a8febcaa272a85efe1656a797892b 2020-07-14T10:41:39Z 4de78cc0d7ae93146912a6866070a19caddb18ed5766babf50432de05f1f670c -v1.10-otp-21 8731ef03d97a8febcaa272a85efe1656a797892b 2020-07-14T10:41:34Z 4de78cc0d7ae93146912a6866070a19caddb18ed5766babf50432de05f1f670c -v1.10-otp-22 8731ef03d97a8febcaa272a85efe1656a797892b 2020-07-14T10:40:30Z 53bae3f6816383278ec2b85324f5c55df0d3e9c9ac260e9d8f7fc18e184e6e23 -v1.10-otp-23 8731ef03d97a8febcaa272a85efe1656a797892b 2020-07-14T10:39:13Z 17785f8d823baca46daec4a1c61dc846eee86fc89497b50777d819dd54ff5ac5 -v1.10.0 5bd7a90864417e7be9483002cfa0e543d265b71d 2020-03-25T22:15:30Z 15e0f608cde3757a7a2e44f3683dd3ec5f184cd76cfa43366467f9d3556870ce -v1.10.0-otp-21 5bd7a90864417e7be9483002cfa0e543d265b71d 2020-03-25T22:15:23Z 15e0f608cde3757a7a2e44f3683dd3ec5f184cd76cfa43366467f9d3556870ce -v1.10.0-otp-22 5bd7a90864417e7be9483002cfa0e543d265b71d 2020-03-25T22:14:28Z b0c1f9bcddba50dc39e63b16e2df38a0fef74995d29bc47084ffb6ad5bd7b533 -v1.10.0-rc.0 105770cfa0ac0591c1fecca17f2221e0ac6af051 2020-03-25T22:16:49Z 8e6aec5f0c2bcf8c08451af20cfc0e61e0e484561e68a0e5f42eb8d6c99727d1 -v1.10.0-rc.0-otp-21 105770cfa0ac0591c1fecca17f2221e0ac6af051 2020-03-25T22:16:31Z 8e6aec5f0c2bcf8c08451af20cfc0e61e0e484561e68a0e5f42eb8d6c99727d1 -v1.10.0-rc.0-otp-22 105770cfa0ac0591c1fecca17f2221e0ac6af051 2020-03-25T22:15:26Z 3e6d407075290902b220c18726da4a785623e57dee620f414a8cefead34e1c01 -v1.10.1 51c95b60004d3d9d297fff23f576bdd97c931afd 2020-03-25T22:16:45Z 70adaff3b66377251aa8687087fa589981336371dd80d134e57abc39b6788a7c -v1.10.1-otp-21 51c95b60004d3d9d297fff23f576bdd97c931afd 2020-03-25T21:29:16Z ee33314dad3ab8be426bcc2c77eaff7713fe03306b2d92b53dc0618d29a82ee7 -v1.10.1-otp-22 51c95b60004d3d9d297fff23f576bdd97c931afd 2020-03-25T22:15:35Z 8aba1324a382eded4dc614fad5d21f9af63d46a0f60b0834369868fa10b3402f -v1.10.2 07450832e7fbc902bfdee124adda1b5a0f6b689d 2020-03-25T22:17:19Z dd23b5b2f78860de341b7fbeae0f4e8b681dca971036e1546ba86d04852b9097 -v1.10.2-otp-21 07450832e7fbc902bfdee124adda1b5a0f6b689d 2020-03-25T22:17:06Z dd23b5b2f78860de341b7fbeae0f4e8b681dca971036e1546ba86d04852b9097 -v1.10.2-otp-22 07450832e7fbc902bfdee124adda1b5a0f6b689d 2020-03-25T22:16:15Z 58616d0a492f9375d6e892200bf3d7618e5021a7a639620595b570a52973eac1 -v1.10.3 c88ecdec1655b04f88e3caef22f050bb85740e4c 2020-05-13T18:09:54Z c9b6ebc81bed67be4eeac420b3d4c8d727f69caf23103ce65d9d0795eab50aec -v1.10.3-otp-21 c88ecdec1655b04f88e3caef22f050bb85740e4c 2020-05-13T18:09:48Z c9b6ebc81bed67be4eeac420b3d4c8d727f69caf23103ce65d9d0795eab50aec -v1.10.3-otp-22 c88ecdec1655b04f88e3caef22f050bb85740e4c 2020-05-13T18:09:03Z db294219b295b1b24e7f7b5f8a133851f84f3eb175f73a7f43dbfa55e05af3fb -v1.10.3-otp-23 c88ecdec1655b04f88e3caef22f050bb85740e4c 2020-05-13T18:08:09Z ef567be0c939211a21843a39dfdec3f870328e3ef9fb2695c0aa8a2d37b50d96 -v1.10.4 1145dc01680aab7094f8a6dbd38b65185e14adb4 2020-07-05T12:01:41Z e780a224631e029b3eee675ef251d01fc0f29bf550027cd0e93c2dbeeb8f4da8 -v1.10.4-otp-21 1145dc01680aab7094f8a6dbd38b65185e14adb4 2020-07-05T12:01:36Z e780a224631e029b3eee675ef251d01fc0f29bf550027cd0e93c2dbeeb8f4da8 -v1.10.4-otp-22 1145dc01680aab7094f8a6dbd38b65185e14adb4 2020-07-05T12:00:35Z ab49b0e07cac98cf8e73168be359b6ec3e6e7f6357be1407e31d7d823ca9e97c -v1.10.4-otp-23 1145dc01680aab7094f8a6dbd38b65185e14adb4 2020-07-05T11:59:26Z ebe895088bdfdf6d156f090f3ec4c939265ce2ebe3868886832ddeb7f8f3aba1 -v1.11 57abca4c1687c77781785afef488d24cd945fa37 2020-09-14T22:27:05Z 20bc4ecf1fb7256f16081abc8c05a25b7fdebc89e7c6769e9fb80bee2f39a621 -v1.11-otp-21 57abca4c1687c77781785afef488d24cd945fa37 2020-09-14T22:26:58Z 20bc4ecf1fb7256f16081abc8c05a25b7fdebc89e7c6769e9fb80bee2f39a621 -v1.11-otp-22 57abca4c1687c77781785afef488d24cd945fa37 2020-09-14T22:25:35Z 4b5d7096f3a83ce9ee267c8f68f9d706da903958a5bf75a2c23f640caa05fe31 -v1.11-otp-23 57abca4c1687c77781785afef488d24cd945fa37 2020-09-14T22:24:03Z 7e2480c562ea3d7a15b82985b114668cdd8dbb8e00e819070a41c45ac79cd4a7 -v1.11.0-rc.0 48cee5aaa54fad593c5aca940ab3dd330652eab8 2020-09-14T10:57:02Z ff64bb368e07ba6b6c4434c36b8de89a4fbfac70e01a1e087c48a4e8eddf8b3a -v1.11.0-rc.0-otp-21 48cee5aaa54fad593c5aca940ab3dd330652eab8 2020-09-14T10:56:53Z ff64bb368e07ba6b6c4434c36b8de89a4fbfac70e01a1e087c48a4e8eddf8b3a -v1.11.0-rc.0-otp-22 48cee5aaa54fad593c5aca940ab3dd330652eab8 2020-09-14T10:55:50Z 6874ed67a30ec4e4ba8d9332d3833a0f0d68ebcd4fe3cd6e5992741384c888a4 -v1.11.0-rc.0-otp-23 48cee5aaa54fad593c5aca940ab3dd330652eab8 2020-09-14T10:54:36Z 171229bade46586771d05a18e489002d57cbe7b9a41640c3802ca07f5bff87d6 -v1.2 9c91d2cc91fa2ee2ceb88075e69e5eb18bbb1af8 2020-03-25T22:16:42Z 9bc461faad6f92f10f09e5d3b61b216dc4b28122cdae3a28b3bbfac8a693160f -v1.2-otp-18 9c91d2cc91fa2ee2ceb88075e69e5eb18bbb1af8 2020-03-25T22:16:36Z 9bc461faad6f92f10f09e5d3b61b216dc4b28122cdae3a28b3bbfac8a693160f -v1.2-otp-19 9c91d2cc91fa2ee2ceb88075e69e5eb18bbb1af8 2020-03-25T21:28:02Z b2d2fb4fa365d848ee6c8fabe11b72376a57bfeb9d2fc3c0067ce3e7c0a94c88 -v1.2.0 b1344724b695a9a474d73d4633c5a151f1a7d61d 2020-03-25T22:16:11Z 44f2a639ed3ffbae7489c4e229370b205014c9495a674d2bda23463a802de49d -v1.2.0-otp-18 b1344724b695a9a474d73d4633c5a151f1a7d61d 2020-03-25T22:16:04Z 44f2a639ed3ffbae7489c4e229370b205014c9495a674d2bda23463a802de49d -v1.2.0-rc.0 a2860b32a3cc8f543406b582fc583185c8c31e5c 2017-06-26T03:35:19Z -v1.2.0-rc.0-otp-18 a2860b32a3cc8f543406b582fc583185c8c31e5c 2017-06-26T03:36:45Z -v1.2.0-rc.1 211a1299cc033debf9a00fc5ac5f4d4e1eb4d6a7 2017-06-26T03:32:52Z -v1.2.0-rc.1-otp-18 211a1299cc033debf9a00fc5ac5f4d4e1eb4d6a7 2017-06-26T03:34:19Z -v1.2.1 a3d88dc406ca9642bcabf375db7f74f2cc6a751d 2020-03-25T22:16:38Z fc9d9c833d5cbcb49dba0a5d567c40c27bd9c39478f3712c0a5e738b96e4b53a -v1.2.1-otp-18 a3d88dc406ca9642bcabf375db7f74f2cc6a751d 2018-11-25T23:39:21Z -v1.2.2 9decf4c78a911bc1375891bb65fbf2e50fcedeb8 2020-03-25T22:17:12Z 8f0010f5924d5e8d1e42e907c85e662a7d0c41d33d92cf2c0c7c40b5d5190e44 -v1.2.2-otp-18 9decf4c78a911bc1375891bb65fbf2e50fcedeb8 2020-03-25T21:29:41Z 6699e120159a17c7e06e2ad4b5ce3fb6741d68cf43c9153c51e3ef00b3b1cb58 -v1.2.3 737ac62926db7a692e2fe67c27b696cfd0866674 2020-03-25T22:17:23Z 7513357020d13813ac09f1b4abaf825df62936f95e8ea33224a9719b88423bb7 -v1.2.3-otp-18 737ac62926db7a692e2fe67c27b696cfd0866674 2020-03-25T22:17:17Z 7513357020d13813ac09f1b4abaf825df62936f95e8ea33224a9719b88423bb7 -v1.2.4 17e8dbbf16c08dff0ded22c37ae80a37f99ff99a 2020-03-25T22:17:34Z 485cf049c609a33dd3f7f49842ea1d23b6ee41170e7e148a65feded33e4ec3c6 -v1.2.4-otp-18 17e8dbbf16c08dff0ded22c37ae80a37f99ff99a 2020-03-25T22:17:27Z 485cf049c609a33dd3f7f49842ea1d23b6ee41170e7e148a65feded33e4ec3c6 -v1.2.5 e5374cf5d3beb510a0fdeddd0f8b89e8e26445ef 2020-03-25T22:17:43Z 1e583f13c332082e58b1b9c4d183c161c95623924606d1673dd260d9d52ecef0 -v1.2.5-otp-18 e5374cf5d3beb510a0fdeddd0f8b89e8e26445ef 2020-03-25T22:17:37Z 1e583f13c332082e58b1b9c4d183c161c95623924606d1673dd260d9d52ecef0 -v1.2.6 3dbfb92860fb24f83c92e1f1b67f48554fb211d6 2020-03-25T22:18:06Z a9a29ba0b872be92aee79f221bd5cfcccbe242edf298df04940004b211b75332 -v1.2.6-otp-18 3dbfb92860fb24f83c92e1f1b67f48554fb211d6 2020-03-25T22:17:59Z a9a29ba0b872be92aee79f221bd5cfcccbe242edf298df04940004b211b75332 -v1.3 bbf5e2bc7bc3179588bab5e87ad740ff5790d72e 2020-03-25T22:19:45Z 971b9b3ec0fe6aba8811f675bfb44f13b1be97439e2b959dba3941dbf6b04ba4 -v1.3-otp-18 bbf5e2bc7bc3179588bab5e87ad740ff5790d72e 2020-03-25T22:19:38Z 971b9b3ec0fe6aba8811f675bfb44f13b1be97439e2b959dba3941dbf6b04ba4 -v1.3-otp-19 bbf5e2bc7bc3179588bab5e87ad740ff5790d72e 2020-03-25T22:18:42Z 3b1eb45ad96b573db97759931e120f78e1ac35983da14bc1ace8e9e4821e6a7b -v1.3.0 416bf41a032280b988d537bd4635beecc3aeed29 2020-03-25T22:20:09Z 10f3755e1575b85e364db5120d53ac72d1e7af66cc86d46874a035d142ff14b5 -v1.3.0-otp-18 416bf41a032280b988d537bd4635beecc3aeed29 2020-03-25T22:20:02Z 10f3755e1575b85e364db5120d53ac72d1e7af66cc86d46874a035d142ff14b5 -v1.3.0-otp-19 416bf41a032280b988d537bd4635beecc3aeed29 2020-03-25T21:41:57Z 0dde36e034c35af1b3d51db86616800619f6e455d3c5410dd7daa36ec23f0972 -v1.3.0-rc.0 7881123953300152650e83e4ba6e56e4d6895d72 2020-03-25T22:20:16Z 4f8a004a6e6f97d8a27044ff45f0a149728fbb6d6c839e6af4122bb3b2bf866e -v1.3.0-rc.0-otp-18 7881123953300152650e83e4ba6e56e4d6895d72 2020-03-25T21:32:26Z beacc2e95f1d4a5af290bbeef031f328fb0df4dabd95215fe1df9aebcd16a47b -v1.3.0-rc.0-otp-19 7881123953300152650e83e4ba6e56e4d6895d72 2020-03-25T22:18:50Z b5b32c2c920038f50a8037d51722f83364026cdfb4a14e6c6c0f7add18e55878 -v1.3.0-rc.1 9eb47818abb00f207e442ffe06eef5a28155d371 2020-03-25T22:19:57Z 583b9f1bbfc650784fcd9f9a2930a5ea077a05262112aad2c983ef25d390c428 -v1.3.0-rc.1-otp-18 9eb47818abb00f207e442ffe06eef5a28155d371 2020-03-25T22:19:50Z 583b9f1bbfc650784fcd9f9a2930a5ea077a05262112aad2c983ef25d390c428 -v1.3.0-rc.1-otp-19 9eb47818abb00f207e442ffe06eef5a28155d371 2020-03-25T22:18:52Z 3d9a9441319c1cbe749833fce2ff5d057676ecebb98d371c1c4a1bf9cad4ad46 -v1.3.1 01a1acd27b2b742a480dbc2210177f45982cc77e 2020-03-25T22:20:24Z 75b8c766c25873ab49e217bfa74b680c0f1630b28ad59b6cddca29fe549b87da -v1.3.1-otp-18 01a1acd27b2b742a480dbc2210177f45982cc77e 2020-03-25T22:20:18Z 75b8c766c25873ab49e217bfa74b680c0f1630b28ad59b6cddca29fe549b87da -v1.3.1-otp-19 01a1acd27b2b742a480dbc2210177f45982cc77e 2020-03-25T22:19:17Z e40938de58f10ad2b436eaae5725239ae06bd0d8416aa05d58b3970603488fd3 -v1.3.2 56f1037973d50721206324db48cf86509779c862 2020-03-25T22:20:27Z 32b7542ab3fffd51422bc44721f878e82a23ec6d11ae798805e1c52717f8566a -v1.3.2-otp-18 56f1037973d50721206324db48cf86509779c862 2020-03-25T22:20:20Z 32b7542ab3fffd51422bc44721f878e82a23ec6d11ae798805e1c52717f8566a -v1.3.2-otp-19 56f1037973d50721206324db48cf86509779c862 2020-03-25T22:19:21Z 3a0095634b1ba86156c0cec4d07eacebad9185eb57507a6ecf3e4a94769cf685 -v1.3.3 0caa75760b14e7392a9f2d7aa08218ba53c8c76a 2020-03-25T22:20:43Z a68a1fdec897290d816cb265fe66588e8345f23f53254d954be266edad4e0c59 -v1.3.3-otp-18 0caa75760b14e7392a9f2d7aa08218ba53c8c76a 2020-03-25T21:33:07Z 535fc67015404e21326f9aa55f8866a416ae6a5cfe65dc9ddd2885d8abdde3d2 -v1.3.3-otp-19 0caa75760b14e7392a9f2d7aa08218ba53c8c76a 2020-03-25T22:19:29Z 3ae582c46d95c22c724df9a4f617684c277737d8ac82f154ce718baed20726bd -v1.3.4 87710cd49521fc396f3f04fa8615f05e7f57ecc0 2020-03-25T22:20:46Z 1c3048f9de5f645c4f393201a15c403924886dc18690c36abbeb48aa342cc952 -v1.3.4-otp-18 87710cd49521fc396f3f04fa8615f05e7f57ecc0 2020-03-25T22:20:37Z 1c3048f9de5f645c4f393201a15c403924886dc18690c36abbeb48aa342cc952 -v1.3.4-otp-19 87710cd49521fc396f3f04fa8615f05e7f57ecc0 2020-03-25T22:19:40Z fc55e25dae9eb99db14bcf73952274db99467cbde17d7084232e4cc444e9e57d -v1.4 5131c6be9d1799eb32567afa95290313833afab4 2020-03-25T22:22:08Z 73b9d87a2d83a447ee13f78469fa0cb477691b5a7c580b6b1e8543ded0d74740 -v1.4-otp-18 5131c6be9d1799eb32567afa95290313833afab4 2020-03-25T22:22:02Z 73b9d87a2d83a447ee13f78469fa0cb477691b5a7c580b6b1e8543ded0d74740 -v1.4-otp-19 5131c6be9d1799eb32567afa95290313833afab4 2020-03-25T22:21:01Z 30da8426d030698c54ce18ab7388224eee9873ea05d84314ca07b8e9a20ce98c -v1.4-otp-20 5131c6be9d1799eb32567afa95290313833afab4 2020-03-25T22:19:59Z 3aa8e74da72590a059a106dbbc0ecfa8cdcaae0de947296a2758d29d6898334c -v1.4.0 f045705ac559290866abda5f9daeac4b701b6e7f 2020-03-25T22:21:20Z 3b215e4caa0346086e05bd687b8e6d24429cee2f33738be5acbce34eb42ee961 -v1.4.0-otp-18 f045705ac559290866abda5f9daeac4b701b6e7f 2020-03-25T22:21:14Z 3b215e4caa0346086e05bd687b8e6d24429cee2f33738be5acbce34eb42ee961 -v1.4.0-otp-19 f045705ac559290866abda5f9daeac4b701b6e7f 2020-03-25T21:33:02Z c6a69b98a6a337a778888a2ca525cbc68e1323e2eee9a66126d3703df7a3cb69 -v1.4.0-rc.0 fbfb41dfeedf14ccc4bd80c3c366382c8a2fcb9e 2020-03-25T21:35:09Z 73e665879a38ebe9ac2f9e01151d824fabb346c972153c55c6a51a15d77dfd0a -v1.4.0-rc.0-otp-18 fbfb41dfeedf14ccc4bd80c3c366382c8a2fcb9e 2018-11-26T00:18:02Z -v1.4.0-rc.0-otp-19 fbfb41dfeedf14ccc4bd80c3c366382c8a2fcb9e 2020-03-25T22:22:35Z 6465652089273611d4b30956cf805368dc7f98251ff97f2f4260aa92f5559040 -v1.4.0-rc.0-otp-20 fbfb41dfeedf14ccc4bd80c3c366382c8a2fcb9e 2020-03-25T22:21:44Z d19b14c98892750c03274862e4ae9bacc4e5541762acecb069e1e2b3998bec61 -v1.4.0-rc.1 16a14c1f6d25e4b51e78fdcacf4f824966a17eb5 2020-03-25T22:24:04Z c7f8f78eb2e61fc664b3827c112b0019a26415147bf46942b048647b37f164e1 -v1.4.0-rc.1-otp-18 16a14c1f6d25e4b51e78fdcacf4f824966a17eb5 2020-03-25T22:23:57Z c7f8f78eb2e61fc664b3827c112b0019a26415147bf46942b048647b37f164e1 -v1.4.0-rc.1-otp-19 16a14c1f6d25e4b51e78fdcacf4f824966a17eb5 2020-03-25T22:22:58Z 709696973ae7f81a3cdc4fd6438981f67988ef26fe1481dc63fda29985d6a66f -v1.4.0-rc.1-otp-20 16a14c1f6d25e4b51e78fdcacf4f824966a17eb5 2020-03-25T22:21:58Z d847e27bdbbd6ecff6f6e94d9087b31a57eaf2822a38b6af87e81beea3e9b1de -v1.4.1 0397a46bb762923a91353e1c957ae2443d50dc05 2020-03-25T22:23:21Z 9398a8fbd4c64bbde76cbc179f2837ba6815a9d60fdca49fe43cd86c70ed0fcb -v1.4.1-otp-18 0397a46bb762923a91353e1c957ae2443d50dc05 2020-03-25T22:23:14Z 9398a8fbd4c64bbde76cbc179f2837ba6815a9d60fdca49fe43cd86c70ed0fcb -v1.4.1-otp-19 0397a46bb762923a91353e1c957ae2443d50dc05 2020-03-25T22:22:15Z fc54fa404028f712a135db14d9cf8d6bcec505cae020dc1c60db92f22b43a93f -v1.4.2 27fdc68ff41a75b16778f2ed8d4d6605764e31b6 2020-03-25T22:24:08Z bb6b153387177a6e440b385420ce20e6017d05170fff681f0d23c7fba82fca1b -v1.4.2-otp-18 27fdc68ff41a75b16778f2ed8d4d6605764e31b6 2020-03-25T22:24:02Z bb6b153387177a6e440b385420ce20e6017d05170fff681f0d23c7fba82fca1b -v1.4.2-otp-19 27fdc68ff41a75b16778f2ed8d4d6605764e31b6 2020-03-25T22:22:42Z 88a6afd1d9c7d0a2c60e2c24be439942568f6ab2a4bc507fd3831865188efe8d -v1.4.3 b2b974dc71e2d98c3179c08a9356835f68442a80 2020-03-25T22:23:39Z b2313b3e4efb2841d2c3c7cd34fc03cae85366ca9e7a2f56e4eca836811f2177 -v1.4.3-otp-18 b2b974dc71e2d98c3179c08a9356835f68442a80 2020-03-25T22:23:33Z b2313b3e4efb2841d2c3c7cd34fc03cae85366ca9e7a2f56e4eca836811f2177 -v1.4.3-otp-19 b2b974dc71e2d98c3179c08a9356835f68442a80 2020-03-25T22:22:31Z da40d1f7aaa389b6366ad3fbd0fc622caa70081f30b0dcbc5820eb57fd3e13ea -v1.4.4 867da6f876c48279823a41a33030c95ef37379b2 2020-03-25T22:23:43Z c1f13c7b6f46bb82928a1545a2980c93f4f32c5065d172b18d978913e39aec57 -v1.4.4-otp-18 867da6f876c48279823a41a33030c95ef37379b2 2020-03-25T22:23:36Z c1f13c7b6f46bb82928a1545a2980c93f4f32c5065d172b18d978913e39aec57 -v1.4.4-otp-19 867da6f876c48279823a41a33030c95ef37379b2 2019-01-11T13:10:55Z -v1.4.5 e25c37108a5294b205ad0abe558cb82f19d342c5 2020-03-25T22:24:53Z a52e8962a2856887e8401ea3868c35f9811d2584bebe0e1e2243242f5bf208ee -v1.4.5-otp-18 e25c37108a5294b205ad0abe558cb82f19d342c5 2020-03-25T22:24:46Z a52e8962a2856887e8401ea3868c35f9811d2584bebe0e1e2243242f5bf208ee -v1.4.5-otp-19 e25c37108a5294b205ad0abe558cb82f19d342c5 2020-03-25T22:23:46Z 16351a7334cfb840b5be0be854c95c3092425463da7bd97509dfc0d964d3ece8 -v1.4.5-otp-20 e25c37108a5294b205ad0abe558cb82f19d342c5 2020-03-25T22:22:45Z 8b3c151e66b2ba79786aad6dd83a2b6f846cf6451e361847f0604bbb31a11db3 -v1.5 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T22:24:25Z 6a1e40830b90883395c84abc7f98a41da33d70e89da841256fdf568c3afcaf42 -v1.5-otp-18 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T21:36:44Z f706fbb55eb5d2dde87d71a69f82176f8d6876e0a3b7471f2c28839169b98cf9 -v1.5-otp-19 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T22:23:30Z 12c498b581f6cec636d8994195548ac9730aefde3ef9b1d7febc06ffe24a2430 -v1.5-otp-20 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T21:35:04Z f7347176a029cae438d87c87117af3862ce9175514eb69a468ade4bbe37c6e92 -v1.5.0 117b2bf614d4b74281ff6dfe0e0e95caf50ff100 2020-03-25T22:25:26Z 9e1b22e464e70f7d614b91d002d37dbabec2bd1a0ff7ced0578435d69f5b695f -v1.5.0-otp-18 117b2bf614d4b74281ff6dfe0e0e95caf50ff100 2020-03-25T21:38:02Z ad69e965bef4d98282a17551cd33350ca0d189c0c35b7ea3f78c9dd36fb221aa -v1.5.0-otp-19 117b2bf614d4b74281ff6dfe0e0e95caf50ff100 2020-03-25T22:24:16Z 5829820f88b2af596c2ed810dbe12cbe02fd5445052ac8338cf2855085eeaa15 -v1.5.0-otp-20 117b2bf614d4b74281ff6dfe0e0e95caf50ff100 2020-03-25T22:23:18Z ca38567d4468fc5463105c87e79886a458404596fad06cf60d9b41ab63b8ae10 -v1.5.0-rc.0 fa0de77862f10496f8285079c7cdc367ead7c8c8 2020-03-25T22:26:37Z 3cc7f60e1e1514de2a39b91af1605fc15017a170a1f56649a77cba08792e0693 -v1.5.0-rc.0-otp-18 fa0de77862f10496f8285079c7cdc367ead7c8c8 2020-03-25T21:38:42Z 8fded176eed47bd6787280f68fe66c57ab34f441cf9d05b1015f605026af133e -v1.5.0-rc.0-otp-19 fa0de77862f10496f8285079c7cdc367ead7c8c8 2020-03-25T22:25:25Z ca09faf48cf590bc128fd2a3cb1ea40a53cad9d8f242be7f3ba684b536de86ef -v1.5.0-rc.0-otp-20 fa0de77862f10496f8285079c7cdc367ead7c8c8 2020-03-25T22:24:19Z 94dc670c3989970976c951b554d78b235c8d16d434faf398147788c661c3481d -v1.5.0-rc.1 704fb9599b522bb530efdc5bb527d005e0c8ed68 2020-03-25T21:13:57Z a93294558d96225d89adad8140195e2d037671bbba268f7232cbf9a0c262a75a -v1.5.0-rc.1-otp-18 704fb9599b522bb530efdc5bb527d005e0c8ed68 2020-03-25T21:13:51Z a93294558d96225d89adad8140195e2d037671bbba268f7232cbf9a0c262a75a -v1.5.0-rc.1-otp-19 704fb9599b522bb530efdc5bb527d005e0c8ed68 2020-03-25T22:26:30Z 3a77c443c52bad797b527a5042a11800f95204efe6f84ec3d580ea15836db06d -v1.5.0-rc.1-otp-20 704fb9599b522bb530efdc5bb527d005e0c8ed68 2020-03-25T22:25:17Z 634c5939d546639e1e7535555b40eea9181fed035bc3276f6eb8b7978e7776bb -v1.5.0-rc.2 e5208421b32f197379b26c55bfde22651bea5e1c 2018-11-26T02:09:46Z -v1.5.0-rc.2-otp-18 e5208421b32f197379b26c55bfde22651bea5e1c 2020-03-25T22:27:49Z 4a8f1ac1160d9b0b7d664e23d5beeb1a8fc763ec23b4c50b8ae26bea7ecf053f -v1.5.0-rc.2-otp-19 e5208421b32f197379b26c55bfde22651bea5e1c 2020-03-25T21:12:20Z e813dd6ec6cb5fdd8047e4c663903e32cc36eda50d6f7259596477f41390df41 -v1.5.0-rc.2-otp-20 e5208421b32f197379b26c55bfde22651bea5e1c 2020-03-25T22:25:44Z 5cbab05adcf1953bbd6b56f56c1ba0ca81a4697bcc93d488c8e6b2d6e638cdf9 -v1.5.1 1406d853e0e6515007696f871d0a9e2c023da6da 2020-03-25T22:27:58Z cae0fcae269ac84e5e67e522dc0bdd857a660fa3e46733a198d9ded465e4fba8 -v1.5.1-otp-18 1406d853e0e6515007696f871d0a9e2c023da6da 2020-03-25T22:27:51Z cae0fcae269ac84e5e67e522dc0bdd857a660fa3e46733a198d9ded465e4fba8 -v1.5.1-otp-19 1406d853e0e6515007696f871d0a9e2c023da6da 2020-03-25T22:26:47Z 8109aae79aa6fc175ecf45283309b54697b3d050c38d14250f939b4dcae08696 -v1.5.1-otp-20 1406d853e0e6515007696f871d0a9e2c023da6da 2020-03-25T21:10:55Z b2af6a669a7d62d9e29ca5057393de5531597286812335684c6a826b9b628563 -v1.5.2 05418eaa4bf4fa8473900741252d93d76ed3307b 2020-03-25T22:27:19Z 6376a037205f9de43a520335be42c2475d3576f3da944b998a24082eea359054 -v1.5.2-otp-18 05418eaa4bf4fa8473900741252d93d76ed3307b 2020-03-25T22:27:12Z 6376a037205f9de43a520335be42c2475d3576f3da944b998a24082eea359054 -v1.5.2-otp-19 05418eaa4bf4fa8473900741252d93d76ed3307b 2020-03-25T22:26:22Z 1f72b8efad0e23ed3da34313cc87724b09bd8eb312d544827c07acf5cd9c6a63 -v1.5.2-otp-20 05418eaa4bf4fa8473900741252d93d76ed3307b 2020-03-25T22:25:33Z 972f37c2372d0237eab5efc295f4c79bef958a79ead0c08784bf42e821fc53ba -v1.5.3 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T22:27:45Z 34e7571a455e5983ca34c846edb323954d89e16ca037bbb68fd8a51d580338b5 -v1.5.3-otp-18 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T22:27:37Z 34e7571a455e5983ca34c846edb323954d89e16ca037bbb68fd8a51d580338b5 -v1.5.3-otp-19 7340ca2d925297e98dd71528a09bf0fb8634b47f 2018-11-26T02:26:23Z -v1.5.3-otp-20 7340ca2d925297e98dd71528a09bf0fb8634b47f 2018-11-26T02:24:29Z -v1.6 ddc554a7efef67f16e462709e7f46662f21f7ab5 2020-03-25T22:27:39Z 81cae25bef08452ceaf734c382c56f710c55ad5c45e1357a39b1dabf47b65d4b -v1.6-otp-19 ddc554a7efef67f16e462709e7f46662f21f7ab5 2020-03-25T22:27:31Z 81cae25bef08452ceaf734c382c56f710c55ad5c45e1357a39b1dabf47b65d4b -v1.6-otp-20 ddc554a7efef67f16e462709e7f46662f21f7ab5 2020-03-25T22:26:41Z 1b6fe7864287f959d4e1b401679389e44ea8ba97fb91cbc2fda5232630f2cde7 -v1.6-otp-21 ddc554a7efef67f16e462709e7f46662f21f7ab5 2020-03-25T22:25:53Z ee2763087170a639d9f5c3b044de81bafdbd717aba11e69db9fe7d94007a8c8e -v1.6.0 63b8d0ba34f38baa6f3a11020215b2f66213d27e 2020-03-25T22:27:06Z 610e548f35d0a90e0a8d291449d17bbba9d5d1e80509792f5e44aea7bb76ac4c -v1.6.0-otp-19 63b8d0ba34f38baa6f3a11020215b2f66213d27e 2020-03-25T22:26:58Z 610e548f35d0a90e0a8d291449d17bbba9d5d1e80509792f5e44aea7bb76ac4c -v1.6.0-otp-20 63b8d0ba34f38baa6f3a11020215b2f66213d27e 2020-03-25T22:26:09Z c09a0a90143abf9a37fce19a1959308fc52d52c461f1a703eae3ee18b616c683 -v1.6.0-rc.0 182c730bdb431fd1ff6789057e4903c33e377f43 2017-12-24T12:37:44Z -v1.6.0-rc.0-otp-19 182c730bdb431fd1ff6789057e4903c33e377f43 2017-12-24T12:38:46Z -v1.6.0-rc.0-otp-20 182c730bdb431fd1ff6789057e4903c33e377f43 2017-12-24T12:39:45Z -v1.6.0-rc.1 67e575eca7b97d4fe063626671d1fd1da0ba7fed 2018-01-11T10:39:01Z -v1.6.0-rc.1-otp-19 67e575eca7b97d4fe063626671d1fd1da0ba7fed 2018-01-11T10:40:00Z -v1.6.0-rc.1-otp-20 67e575eca7b97d4fe063626671d1fd1da0ba7fed 2018-01-11T10:40:58Z -v1.6.1 2b588dfb3ebb2f3221bec3509cb1dbb8e08ef1af 2020-03-25T22:28:09Z f9102f0a90aec8ad2a372a782aedc9ed4c3bd0d6ae391a7cc84cb3fc6c5f133c -v1.6.1-otp-19 2b588dfb3ebb2f3221bec3509cb1dbb8e08ef1af 2020-03-25T22:28:03Z f9102f0a90aec8ad2a372a782aedc9ed4c3bd0d6ae391a7cc84cb3fc6c5f133c -v1.6.1-otp-20 2b588dfb3ebb2f3221bec3509cb1dbb8e08ef1af 2020-03-25T22:27:15Z 679c6d51e6955225b6fd553282f09d003ecdc1b2bcebf3fd3d855034a60419f3 -v1.6.2 c2a9c93f023c0c00e5f387a1476f4cca01752bb8 2020-03-25T22:28:44Z c9e1e85acfd362fd1dfe6abb89019b57bf44fc032c982a37fca60ec2ccf0cefa -v1.6.2-otp-19 c2a9c93f023c0c00e5f387a1476f4cca01752bb8 2020-03-25T22:28:38Z c9e1e85acfd362fd1dfe6abb89019b57bf44fc032c982a37fca60ec2ccf0cefa -v1.6.2-otp-20 c2a9c93f023c0c00e5f387a1476f4cca01752bb8 2020-03-25T21:11:05Z e555433aa78c4c50dc4adcd14f7713f03c8d17ad3bc0db4e8ebbd6cfeca50e85 -v1.6.3 45c7f828ef7cb29647d4ac999761ed4e2ff0dc08 2020-03-25T22:29:23Z c33d6c4440838fe1c09e514ff0a907937a5bae5336b424129d8a4375e308bb01 -v1.6.3-otp-19 45c7f828ef7cb29647d4ac999761ed4e2ff0dc08 2020-03-25T22:29:16Z c33d6c4440838fe1c09e514ff0a907937a5bae5336b424129d8a4375e308bb01 -v1.6.3-otp-20 45c7f828ef7cb29647d4ac999761ed4e2ff0dc08 2020-03-25T22:28:23Z e9b49410f9c2b49464c23e813d1f43303f9199926323d047631c82019423517f -v1.6.4 c107a2fe2623d11d132cdfeefbb7370abd44f85c 2020-03-25T21:15:15Z f4945bf238bb96675c8462c781f520a23025a58311608b4760f0ca71a98dd0e9 -v1.6.4-otp-19 c107a2fe2623d11d132cdfeefbb7370abd44f85c 2020-03-25T22:29:37Z 57f5902d73f55e502fa9f785c7fa76505e649a494bd507fe55ee98356a5d89b7 -v1.6.4-otp-20 c107a2fe2623d11d132cdfeefbb7370abd44f85c 2020-03-25T22:28:47Z 7b09df2473d0b4073fd7612ba3317b578e1a9646955e18cd15807107a0a11dac -v1.6.5 a9f1be07ca1a939739bd013f100686c8cf81432a 2020-03-25T22:29:56Z d6bf2716030666d4939211d867fad73eabb9fbacd330861a6e325eded452f84d -v1.6.5-otp-19 a9f1be07ca1a939739bd013f100686c8cf81432a 2020-03-25T22:29:49Z d6bf2716030666d4939211d867fad73eabb9fbacd330861a6e325eded452f84d -v1.6.5-otp-20 a9f1be07ca1a939739bd013f100686c8cf81432a 2020-03-25T22:29:01Z 1606a442acf49326d6805d9aa0a323fabfb150a27c5cb5de36489d5d759447a5 -v1.6.5-otp-21 a9f1be07ca1a939739bd013f100686c8cf81432a 2018-11-26T02:52:18Z -v1.6.6 1ec9d1d7bdd01665deb3607ba6beb8bcd524b85d 2020-03-25T22:30:57Z 025cb325e1cd9b6823bbd869f1b30f7f0529bef38e52335af5063a292b210a29 -v1.6.6-otp-19 1ec9d1d7bdd01665deb3607ba6beb8bcd524b85d 2020-03-25T22:30:50Z 025cb325e1cd9b6823bbd869f1b30f7f0529bef38e52335af5063a292b210a29 -v1.6.6-otp-20 1ec9d1d7bdd01665deb3607ba6beb8bcd524b85d 2020-03-25T21:14:55Z 25e55384303eaf867722fdfd9ff6ecdd300633a8e35146fa4c90a2f873f1d916 -v1.6.6-otp-21 1ec9d1d7bdd01665deb3607ba6beb8bcd524b85d 2018-11-26T02:57:59Z -v1.7 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:32:27Z 1ecb432fe2fe82a5f4b1287eda09799de1f4544a5cfd451c89544f93b3856b68 -v1.7-otp-19 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:32:19Z 1ecb432fe2fe82a5f4b1287eda09799de1f4544a5cfd451c89544f93b3856b68 -v1.7-otp-20 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:31:26Z feace86783358fe1ccbe5a8b55bfcdaddd64e6a0aef3656ff36c9200b7e8dacb -v1.7-otp-21 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:30:37Z 8535ea645e53e5b1d740fcee364a98e309247a623f28b7b0d281c8cdf518086f -v1.7-otp-22 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:29:45Z 6cdd6a9714a1fc7209e2498936986418c3a145b14e158df5e9e8d762a52fb281 -v1.7.0 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T21:17:57Z 16f6a0c235c8766fcb3a97ced61c9e3f08df579f7234464827824a9097b59123 -v1.7.0-otp-19 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T22:32:30Z 3f0ce20986311d9d21121d7e6314fb25ffebe520fd9f4b974074caf74dca33e0 -v1.7.0-otp-20 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T21:16:57Z c9bbf4d7d9a4088644797bae699f10be011ef0a144faa8c48a14aa40e6d2bd05 -v1.7.0-otp-21 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T22:30:45Z ca180626cc6fcd7a6b4c591410d42e68ad3e0007e07ad645a39fb3c2ed66f6ff -v1.7.0-otp-22 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T21:14:57Z c3fee34257d49ba18fce12dc165bea9f65828969ff2e6acc596c0d8a594237d1 -v1.7.0-rc.0 1164784b8ef25967471c068600301db850de58b3 2020-03-25T21:18:18Z f5d16a2382408acddb1a6d18ee73d0e92ae2eaa0d4adfebf8097723743eea85c -v1.7.0-rc.0-otp-19 1164784b8ef25967471c068600301db850de58b3 2020-03-25T22:32:36Z 08dbb2970f9ce6a9c4b246dbc8dd8dcace40d7ce0027772da09fdc8891b112e2 -v1.7.0-rc.0-otp-20 1164784b8ef25967471c068600301db850de58b3 2020-03-25T22:31:39Z ea293ca82f093a75ef10a377b3fe75ef5244c60388853bfcfcfebd313f21ced1 -v1.7.0-rc.0-otp-21 1164784b8ef25967471c068600301db850de58b3 2020-03-25T22:30:48Z 069a6875b80837e39b879ebc7a614cdc6e3a57d903c1c9c113fbf37a0a001805 -v1.7.0-rc.0-otp-22 1164784b8ef25967471c068600301db850de58b3 2020-03-25T22:29:59Z 236dbcc06de39c4c6afb8d72fe8f45e8a260da96aff214e0dfe442108f5bdaac -v1.7.0-rc.1 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T22:32:49Z 82001fa454804c467dc5d3128273e2f4c51d1529e05ab0dd976c5fbfc810c1c1 -v1.7.0-rc.1-otp-19 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T22:32:42Z 82001fa454804c467dc5d3128273e2f4c51d1529e05ab0dd976c5fbfc810c1c1 -v1.7.0-rc.1-otp-20 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T21:17:38Z e89ede91c4a824e7b930ad02a0b9c231a0b77cf01f74e122dd72ad29e31f9b99 -v1.7.0-rc.1-otp-21 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T22:30:59Z 6aa0013c238185014b300016c88f7211a00c5b1b04d3146d4788a7f0e4f2207f -v1.7.0-rc.1-otp-22 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T22:30:13Z a481cff84a405be9da89721b1ed022f422a45b855d2159266302b3f6f2fa234b -v1.7.1 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2019-05-14T23:45:16Z -v1.7.1-otp-19 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2020-03-25T22:32:44Z b775acc22b7486ee5b0e2a3bb7101206889b4e33d9bb7e5dc734094e949cbfe3 -v1.7.1-otp-20 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2020-03-25T21:17:33Z aa2c20a4e3ac4d2a7767379fa3e185774e7052a969f6595dac4e4d4040e41dd1 -v1.7.1-otp-21 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2020-03-25T21:16:45Z b79f34570ab6ba52b4f0ce6067f6552225f9cc063ffd8d843310d833d7cffeff -v1.7.1-otp-22 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2020-03-25T22:30:09Z 23bb48b55a98a7b47cd58433f6a3c17b6bd18c748ebcb2b32d2f6a90b4057557 -v1.7.2 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T22:33:25Z bd93d69afaa0ffcb456f158bf785f9b211803e472d5624030877771ba47af2f3 -v1.7.2-otp-19 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T22:33:18Z bd93d69afaa0ffcb456f158bf785f9b211803e472d5624030877771ba47af2f3 -v1.7.2-otp-20 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T21:17:42Z 1e36d839e8d075e68219944c34b3c90622e0a5698e954c0a22384d412f958509 -v1.7.2-otp-21 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T22:31:36Z f11f023abdf43cbade64b7f0fef316d361e716bf5274aff3398a1ba97411cb41 -v1.7.2-otp-22 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T21:16:06Z 83d4c728d4526e7a72e423b2cca650d20ef8cf4cd8ceb1da022c900490de964e -v1.7.3 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:33:58Z 358170a282e52728be7402eadd52fdc66419c322548f2c6f0fd717741c86d029 -v1.7.3-otp-19 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:33:51Z 358170a282e52728be7402eadd52fdc66419c322548f2c6f0fd717741c86d029 -v1.7.3-otp-20 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:32:57Z 7df5ddd0b565c6bfe02b743a7338dd095b74228ea44bf71d912d1875a861c442 -v1.7.3-otp-21 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:32:08Z a20a939d8046184ab45b37efba70705cee4c66f73d227578b7e717a4e65bb26a -v1.7.3-otp-22 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:31:22Z c3c8b2cff0bef4c91636cd8335988e808ae2978ed90cc0ea2acd238bf60f22d8 -v1.7.4 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:34:34Z c82b6f34a17fc6f9fba9327e9080d2c44c97e11bf00398db2a5c120ac289671b -v1.7.4-otp-19 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:34:21Z c82b6f34a17fc6f9fba9327e9080d2c44c97e11bf00398db2a5c120ac289671b -v1.7.4-otp-20 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:33:29Z 620b4f6097aaa22421a41bde19c838983b2854aebc429b883342b7f71f8542df -v1.7.4-otp-21 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:32:39Z 2b372cbe7d905f3403bc42b9284ae9b84d2c1f9ee3b847ca6bc416c4d941e44d -v1.7.4-otp-22 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:31:50Z 802ef1addcdfb16408b6b90f9a22c415ae23f5d725e5f5e3101cd196ef3a7b56 -v1.8 6d98af49c929b9e23c7c3b59e93f5f53cedeebd4 2020-03-25T22:33:48Z 90a26e9cc5b1cc7e2279dc633ef52e471f8eaaa4ce3263a6e87506427ad3fedc -v1.8-otp-20 6d98af49c929b9e23c7c3b59e93f5f53cedeebd4 2020-03-25T22:33:41Z 90a26e9cc5b1cc7e2279dc633ef52e471f8eaaa4ce3263a6e87506427ad3fedc -v1.8-otp-21 6d98af49c929b9e23c7c3b59e93f5f53cedeebd4 2020-03-25T22:32:52Z 69def395dc582c762c43267935e07732cddcc7a71a830bb09ce863b49b3d20cc -v1.8-otp-22 6d98af49c929b9e23c7c3b59e93f5f53cedeebd4 2020-03-25T22:32:06Z d7532382e69ba14b947a1405fa88cb05de11713673ab106b589958d456d726e3 -v1.8.0 2eee2fc6a4c3733537dc95083c4247a1fa723ab1 2020-03-25T22:34:52Z c08ff8e7affa636b2b0b0769d63c42289691d70cae832bdf97aeff5c931f8f95 -v1.8.0-otp-20 2eee2fc6a4c3733537dc95083c4247a1fa723ab1 2020-03-25T22:34:38Z c08ff8e7affa636b2b0b0769d63c42289691d70cae832bdf97aeff5c931f8f95 -v1.8.0-otp-21 2eee2fc6a4c3733537dc95083c4247a1fa723ab1 2019-05-15T02:00:31Z -v1.8.0-otp-22 2eee2fc6a4c3733537dc95083c4247a1fa723ab1 2020-03-25T22:33:03Z 40a1ca4092f367b2200612cfa16f0e1bd0c9ae7a1088a51665681acb6031c94a -v1.8.0-rc.0 2b594057567f352bd63f43c6535a901db6d37ed4 2019-05-15T01:22:37Z -v1.8.0-rc.0-otp-20 2b594057567f352bd63f43c6535a901db6d37ed4 2019-05-15T01:22:34Z -v1.8.0-rc.0-otp-21 2b594057567f352bd63f43c6535a901db6d37ed4 2019-05-15T01:16:16Z -v1.8.0-rc.0-otp-22 2b594057567f352bd63f43c6535a901db6d37ed4 2019-05-15T01:08:38Z -v1.8.0-rc.1 32825ebaa0c1f6785dcd30d87f0ade45cd6c20cb 2020-03-25T21:21:56Z 794460fe3531805f0a9d1a3ccbecf07fc13df0702002651d308e1ebb3f1a525c -v1.8.0-rc.1-otp-20 32825ebaa0c1f6785dcd30d87f0ade45cd6c20cb 2020-03-25T22:36:20Z 4743096ed9861d76537c36721c9e198e0efb63536ea05d11cb3c2d50abbacbc6 -v1.8.0-rc.1-otp-21 32825ebaa0c1f6785dcd30d87f0ade45cd6c20cb 2020-03-25T22:35:32Z f5defae82816a9dfef9f77be83e8d3d9f1b82b750b44825a1bbd58b1f4224c91 -v1.8.0-rc.1-otp-22 32825ebaa0c1f6785dcd30d87f0ade45cd6c20cb 2020-03-25T22:34:43Z 225ed2da0b5d0d6f8a6ac908d06f1e5c7000bdd32cc7e896fa44bd0fdf9939c8 -v1.8.1 511a51ba8925daa025d3c2fd410e170c1b651013 2020-03-25T22:36:31Z 36ab446e5db70a7d26bffc065054b4c70f3640c4b8b0387b170543c2cd769cd1 -v1.8.1-otp-20 511a51ba8925daa025d3c2fd410e170c1b651013 2020-03-25T21:22:02Z d9f62778b673791aa2bfeb50821eac0f949243bdc26287b3bbe2227771d78a0a -v1.8.1-otp-21 511a51ba8925daa025d3c2fd410e170c1b651013 2020-03-25T22:35:35Z 1e145564990957496145884aaed03228c7dc4105473f8bf023f567aedd2191cc -v1.8.1-otp-22 511a51ba8925daa025d3c2fd410e170c1b651013 2020-03-25T22:34:51Z 3a4aaa68928a5768441577eb9c90ccfc217ecee9be9da2456dde074d93fb2eda -v1.8.2 98485daab0a9f3ac2d7809d38f5e57cd73cb22ac 2020-03-25T22:36:35Z c77e0ac5ab0ba5cff5f573cdf711ed9106db788317ab16cacdcf41a93a795d48 -v1.8.2-otp-20 98485daab0a9f3ac2d7809d38f5e57cd73cb22ac 2020-03-25T22:36:28Z c77e0ac5ab0ba5cff5f573cdf711ed9106db788317ab16cacdcf41a93a795d48 -v1.8.2-otp-21 98485daab0a9f3ac2d7809d38f5e57cd73cb22ac 2020-03-25T22:35:41Z b406265ae842fe8355244150d06c92e01ab1fdc3e985feb59e9bf13452ac9754 -v1.8.2-otp-22 98485daab0a9f3ac2d7809d38f5e57cd73cb22ac 2020-03-25T22:34:56Z 570c7b1ab710b9a44326d7badc4254f6e66ce3111a3802f0a162210144260234 -v1.9 762989b39f62e8dc8153f5ea6c71c57693ffc3f3 2020-03-25T22:36:56Z 403db3ad4ae9e27272a06c6c95850507fa34dc2b311447f2190e22fa2c901ded -v1.9-otp-20 762989b39f62e8dc8153f5ea6c71c57693ffc3f3 2020-03-25T22:36:45Z 403db3ad4ae9e27272a06c6c95850507fa34dc2b311447f2190e22fa2c901ded -v1.9-otp-21 762989b39f62e8dc8153f5ea6c71c57693ffc3f3 2020-03-25T21:21:43Z 6d538a3e45b4bee6449d085c53f104a0c9680cb006f15857cd689a2e5e3251d5 -v1.9-otp-22 762989b39f62e8dc8153f5ea6c71c57693ffc3f3 2020-03-25T21:20:47Z 80953f1a1cbd8428a3d17042360a0a2c023ea029c2199909df97045f7b962de2 -v1.9.0 71c335ac2694d4457ac8f4fefdfc68ae167c8775 2020-03-25T22:37:01Z 74808a0308d64f36946dce470b51615117c9933a4454e52d3e25538f243fcfa3 -v1.9.0-otp-20 71c335ac2694d4457ac8f4fefdfc68ae167c8775 2020-03-25T22:36:55Z 74808a0308d64f36946dce470b51615117c9933a4454e52d3e25538f243fcfa3 -v1.9.0-otp-21 71c335ac2694d4457ac8f4fefdfc68ae167c8775 2020-03-25T21:21:41Z 59dc26d6691062788ec8e774c941098eaa5f02b4ad3c33502e910e4efaf4ee1e -v1.9.0-otp-22 71c335ac2694d4457ac8f4fefdfc68ae167c8775 2020-03-25T22:35:06Z ddae00c5bca44dd5bacbc4c4200be302c96b63cbad9c4433ea9fa0bba1d0a486 -v1.9.0-rc.0 aad7aa4d2255f1c33f2de6525f67cd7e852324d2 2020-03-25T22:37:19Z b6e6026f22a7e590f3b9122f3363a09572f251a288a4e50b9faad63548e81331 -v1.9.0-rc.0-otp-20 aad7aa4d2255f1c33f2de6525f67cd7e852324d2 2020-03-25T22:37:12Z b6e6026f22a7e590f3b9122f3363a09572f251a288a4e50b9faad63548e81331 -v1.9.0-rc.0-otp-21 aad7aa4d2255f1c33f2de6525f67cd7e852324d2 2020-03-25T22:36:25Z 698b8b34f9fe12ce3fbf1cf06ca455d689ed83fb927ae70f636a058a4ef9e700 -v1.9.0-rc.0-otp-22 aad7aa4d2255f1c33f2de6525f67cd7e852324d2 2019-06-04T11:49:17Z -v1.9.1 79388035f5391f0a283a48fba792ae3b4f4b5f21 2020-03-25T22:37:38Z cf13db14a1fd86d6e8824331eca7a2b41674a4ce04fba838877952194f9d02cd -v1.9.1-otp-20 79388035f5391f0a283a48fba792ae3b4f4b5f21 2020-03-25T22:37:31Z cf13db14a1fd86d6e8824331eca7a2b41674a4ce04fba838877952194f9d02cd -v1.9.1-otp-21 79388035f5391f0a283a48fba792ae3b4f4b5f21 2020-03-25T21:22:51Z 93af7d51379858451b90c1efdd859b7c80e0d9c0fc6531cea06e4edffd85605e -v1.9.1-otp-22 79388035f5391f0a283a48fba792ae3b4f4b5f21 2020-03-25T22:35:55Z 3e9d11d583fe60b4e4d7ae23aa4fa70baf41a4d53df4d1be75d9636637f7f699 -v1.9.2 ffe7a577cc80f37381dc289c820842d346002364 2020-03-25T21:24:21Z ec94b266ec22e3479126cfca69bd84002671c93c9a9dfe13e018efc5cf090f9e -v1.9.2-otp-20 ffe7a577cc80f37381dc289c820842d346002364 2020-03-25T22:37:45Z 0971bbcfb1759fdcb2b9dd13907c1f3cb521fbd0afbd177b8a236ad2018b669f -v1.9.2-otp-21 ffe7a577cc80f37381dc289c820842d346002364 2020-03-25T22:36:59Z e579d4f46fbc847d4609d7ca1be4ce28ea08c6c46b9113a278540ea89adb31f8 -v1.9.2-otp-22 ffe7a577cc80f37381dc289c820842d346002364 2020-03-25T22:36:11Z c2a03b667d9f079558995112ca29adb11bde1eeecd6126ac74bdd4a3c583c547 -v1.9.3 5af52898d344fda201e2437319449cdc0242eb31 2020-03-25T22:38:20Z 3f8e1d964e70bbd935b24ee5d06319440b2214ef66c5e6d3007bb1737c7589b2 -v1.9.3-otp-20 5af52898d344fda201e2437319449cdc0242eb31 2020-03-25T22:38:13Z 3f8e1d964e70bbd935b24ee5d06319440b2214ef66c5e6d3007bb1737c7589b2 -v1.9.3-otp-21 5af52898d344fda201e2437319449cdc0242eb31 2020-03-25T22:37:27Z a67f1826a0ee7a66e8588d72ac50843e68316ab275656dc95e1dcca5515dc612 -v1.9.3-otp-22 5af52898d344fda201e2437319449cdc0242eb31 2020-03-25T22:36:42Z 063e93f5de308925aa198343d5fdd65a8ebdff76bf7e8c5f4c0ef76c16f67e4c -v1.9.4 055526057ac9992cc1df87441357c4e56d45235d 2020-03-25T22:38:42Z 46810a6da6e68c4ac408c6e3120d985d87485f62e4afcd62673831d328d9e588 -v1.9.4-otp-20 055526057ac9992cc1df87441357c4e56d45235d 2020-03-25T22:38:36Z 46810a6da6e68c4ac408c6e3120d985d87485f62e4afcd62673831d328d9e588 -v1.9.4-otp-21 055526057ac9992cc1df87441357c4e56d45235d 2020-03-25T22:37:52Z 1e6c090841c267c4828d68647e020c91067daace9ba05669fd5c3ec315175423 -v1.9.4-otp-22 055526057ac9992cc1df87441357c4e56d45235d 2020-03-25T22:37:07Z b5eba5ab892f431a0d914055ee0ba177304e74da0b2af5a657670aa5ce00f10f diff --git a/dist/__tests__/otp_builds.txt b/dist/__tests__/otp_builds.txt deleted file mode 100644 index b3342f82..00000000 --- a/dist/__tests__/otp_builds.txt +++ /dev/null @@ -1,309 +0,0 @@ -OTP-17.0 07b8f441ca711f9812fad9e9115bab3c3aa92f79 2020-10-29T05:18:45Z -OTP-17.0.1 9e19d1bf9fc7dc322823327e5e78f4ec0c3cee37 2020-10-29T05:18:42Z -OTP-17.0.2 deacab96d83ad6432afbcba54cf2e372395008e5 2020-10-29T05:19:00Z -OTP-17.1 461dc05384eece7b4b7d84370fb0a2cf96ed2f6d 2020-10-29T05:17:11Z -OTP-17.1.1 a7176f9186ffd7eb2b26daca2264d425383cf6a7 2020-10-29T05:16:25Z -OTP-17.1.2 934b6de4d2ab6c31c5217e1ba4779ade9e37cc83 2020-10-29T05:15:14Z -OTP-17.2 c472c3f5aafc81a409d0443c4601de43bafb53cb 2020-10-29T05:13:35Z -OTP-17.2.1 56715334380680c1466d2a9165ea2f7affc93a78 2020-10-29T07:20:19Z -OTP-17.2.2 144f3e9c79a87f6477fdf547ce162a5d885aa201 2020-10-29T05:13:31Z -OTP-17.3 743ed31108ee555db18d9833186865e85e34333e 2020-10-29T05:13:25Z -OTP-17.3.1 ee24a87a779d8d10461cadd47b3eb276e70baef8 2020-10-29T05:13:20Z -OTP-17.3.2 5d49d05c3604f764736b10cfb287818d4b41efda 2020-10-29T05:11:14Z -OTP-17.3.3 461757503e8ecaaeb3ea9b84f5c0dfccd3408694 2020-10-29T05:09:52Z -OTP-17.3.4 9417f044ee3c291c2ea343c203aebdcc40597226 2020-10-29T05:08:51Z -OTP-17.4 af87b1c3d4897840d8247589a88d3611106ecedc 2020-10-29T05:05:59Z -OTP-17.4.1 6c40ea37d6ba97b12c888cc3143fbeacfb5527b0 2020-10-29T05:05:52Z -OTP-17.5 545890576542e4be630df8772654b99bd0306f62 2020-10-29T05:05:47Z -OTP-17.5.1 bbac1019905e6e493a2cd3c8463e53a818d0723d 2020-10-29T07:26:46Z -OTP-17.5.2 ff1e0b2fe44a347670a5d72c45c061fefa6abc7f 2020-10-29T05:05:37Z -OTP-17.5.3 efbfe9602983ff451b864e557bdf3733222b78ba 2020-10-29T05:04:25Z -OTP-17.5.4 10e8677c632df5f9433eb771076d1ff71c7ed75d 2020-10-29T05:02:43Z -OTP-17.5.5 f3fefbae24a2569a13b538d80d0e99129963ebef 2020-10-29T05:01:43Z -OTP-17.5.6 c1df511623b9a2a98d4d3862ae612c1ca9837da7 2020-10-29T04:58:07Z -OTP-17.5.6.1 99d3e9c5b2569169d2f5fefd67898d2533e5a83d 2020-10-29T04:58:02Z -OTP-17.5.6.10 a5d9e9901468d75a2913c83580d5e9e29f37462d 2020-10-29T07:16:25Z -OTP-17.5.6.2 12002949e5435d19c750fe2cd8e897b4059f875a 2020-10-29T04:58:14Z -OTP-17.5.6.3 155c22ff3ce3f667d4a984bd6648f029e0998381 2020-10-29T04:58:00Z -OTP-17.5.6.4 bd1251dfe4d60f09e569731d36a92e94acbe297a 2020-10-29T07:26:17Z -OTP-17.5.6.5 4481c1b152a4442f2e0a648ab2877313dcc97c50 2020-10-29T04:57:29Z -OTP-17.5.6.6 42493ad886f9b1b3e32e6f1bef084275a4480096 2020-10-29T04:56:03Z -OTP-17.5.6.7 d7db1f1612e8a5a8a732a7e055ba5618778f1ac2 2020-10-29T04:54:26Z -OTP-17.5.6.8 05cef5e3a267b3515acb834130675e0cbf69bf78 2020-10-29T04:50:16Z -OTP-17.5.6.9 6d4001de141a00b3bf37b8f7b24c5bde2b4f4015 2020-10-29T04:50:09Z -OTP-18.0 74a95b3d511177a9b35c2b0272b9ca5511b6f750 2020-10-29T04:50:18Z -OTP-18.0-rc1 bf3b377220f2531b9b101f32222067beb3ea750b 2020-10-29T04:50:28Z -OTP-18.0.1 1c14bf099be15790ccbe56f464e81a9557476b3f 2020-10-29T04:49:50Z -OTP-18.0.2 61828f77ca2542109ece006d730a4f8fe3300616 2020-10-29T04:49:21Z -OTP-18.0.3 6b4c2dbd1b4a30f421611987acec6315c62ac9d5 2020-10-29T04:46:54Z -OTP-18.1 1523be48ab4071b158412f4b06fe9c8d6ba3e73c 2020-10-29T04:41:38Z -OTP-18.1.1 a2c538dee3013bb6285027d9ae45b7f055e8e8eb 2020-10-29T07:15:59Z -OTP-18.1.2 3c799a7ee5ee26f643c7ffad79c81d6156f3dac6 2020-10-29T04:41:31Z -OTP-18.1.3 fe1df7fc6bf050cb6c9bbd99eb9393c426b62f67 2020-10-29T04:41:27Z -OTP-18.1.4 9dd0c95d56ec33bde9668bb47668aa27981ea18d 2020-10-29T04:41:34Z -OTP-18.1.5 c24a4bf84029d06cc79f49634684cd6d2eeafb62 2020-10-29T04:41:18Z -OTP-18.2 b855206a1a7788216717ca272f44e9beb1f58e7c 2020-10-29T04:41:13Z -OTP-18.2.1 21d6192389a04024f7a41ced9d0911a9cce6f4e8 2020-10-29T04:39:37Z -OTP-18.2.2 7cf9a621c5280a3e97967c4c63ab6ca1adde69c3 2020-10-29T04:33:33Z -OTP-18.2.3 d96471b3f404f7341279d8598dd74d92fb1a923c 2020-10-29T04:33:26Z -OTP-18.2.4 d646221c59fbf57d5beac913248b46f5dbebfbe7 2020-10-29T04:33:11Z -OTP-18.2.4.0.1 a7f420e08aabe6af376f7b9c6f6bd50f342dfe8b 2020-10-29T04:33:02Z -OTP-18.2.4.1 c0540f1b946d699afbe496ab7c481d88eb9ae78b 2020-10-29T04:33:20Z -OTP-18.3 5e1b5ef47f3f2b898d30e0425823835bd9a574d4 2020-10-29T04:33:15Z -OTP-18.3.1 afe72bfc1448ff426c38eceb7412f69e973aef62 2020-10-29T04:33:06Z -OTP-18.3.2 fea24ae8d37b33e97ef1897d0d3b6cdb2338c051 2020-10-29T04:32:41Z -OTP-18.3.3 1ab69efa960703b86a13ea6ba96f4fd56f1565f9 2020-10-29T04:25:56Z -OTP-18.3.4 53e7743216647d810d529e397bd3ea7278c6047c 2020-10-29T04:25:26Z -OTP-18.3.4.1 5cf780148575f1ea4c460d7c9783831e6fbce9ff 2020-10-29T04:25:06Z -OTP-18.3.4.1.1 7dd7c1aad07b726759dc98bb2a439e32d2e833f1 2020-10-29T07:15:29Z -OTP-18.3.4.10 5fcec3e909f3a2eebef82c974e3cfb351398fd20 2020-10-29T04:16:35Z -OTP-18.3.4.11 1283ca3bc4bba3381f8fd1f59fb62780d3e17472 2020-10-29T04:16:26Z -OTP-18.3.4.2 f5ef4087331c0181fd154dcaa372a05e6f8bd408 2020-10-29T04:24:47Z -OTP-18.3.4.3 e7966ef5cb0c2337a674d8cdca7c89802fa01bf6 2020-10-29T04:24:43Z -OTP-18.3.4.4 7518684155aaabdde97c7b624803523c045bc185 2020-10-29T07:14:16Z -OTP-18.3.4.5 79ea550fdf9ebd02c1932728dac509cd0d520a7c 2020-10-29T04:24:33Z -OTP-18.3.4.6 70213bdf6cfa2e61c7e9013c4c217a1857b9df2e 2020-10-29T04:19:24Z -OTP-18.3.4.7 8c54c2199c503e7eac931b4e1765f5307726dcc8 2020-10-29T04:17:59Z -OTP-18.3.4.8 ba3710484344ed57124574abcd0f19fbe251389c 2020-10-29T07:12:44Z -OTP-18.3.4.9 60abdddf4bc5a25ca31af151642ca59c7dd07e92 2020-10-29T04:16:40Z -OTP-19.0 3b7a6ffddc819bf305353a593904cea9e932e7dc 2020-10-29T04:12:26Z -OTP-19.0-rc1 f68a3780fbcc836c7036b55db5ee1d0447213c8f 2020-10-29T04:16:44Z -OTP-19.0-rc2 2c9dba638a8bda92e3db2d5c07e6ba251330c7ca 2020-10-29T07:12:03Z -OTP-19.0.1 0573efbc18fc20f8646cf3ff64d2affd06e03cb8 2020-10-29T04:11:43Z -OTP-19.0.2 b490fb8664ec6e5ceaadc1c74350dc666f5406d2 2020-10-29T07:11:52Z -OTP-19.0.3 020d38d4c9062f255b52eeb35542152c7cff1598 2020-10-29T04:08:24Z -OTP-19.0.4 19db7510939149206017c925032d390da9a83fe9 2020-10-29T07:09:27Z -OTP-19.0.5 71894a879d6254693791585246ce340dd7414b82 2020-10-29T04:08:21Z -OTP-19.0.6 226a754d1f4babb262b2a15569b174921f97ad86 2020-10-29T04:08:20Z -OTP-19.0.7 33b39b559a31c38465dfc038218f432c9c60a9ad 2020-10-29T04:08:22Z -OTP-19.1 e6059f94571a6c968c15b9de6b7d63ebd64f9acf 2020-10-29T04:04:22Z -OTP-19.1.1 310b00b7fc18b5883f5f2cb1b992deb1dd6c9a65 2020-10-29T04:04:14Z -OTP-19.1.2 7a5356d99d8f01572b67305cc9a86446fad351e3 2020-10-29T07:08:18Z -OTP-19.1.3 a59807ef9a6a8af6eb6f13976eb405ddb9baad6c 2020-10-29T04:00:03Z -OTP-19.1.4 c1c2149818396bdefe9eff995184f8864f18fca3 2020-10-29T03:59:57Z -OTP-19.1.5 926391fbb8761d5833b3a6f5c9e523fcda373c6d 2020-10-29T04:00:00Z -OTP-19.1.6 2b41d8f318b7e5ec139d42fd2f01a132699be839 2020-10-29T07:07:28Z -OTP-19.1.6.1 6ceb840258a6faf74f63b481198ae4bf9399f2d0 2020-10-29T03:59:55Z -OTP-19.2 3473ecd83a7bbe7e0bebb865f25dddb93e3bf10f 2020-10-29T03:56:39Z -OTP-19.2.1 bca5bf5a2d68a0e9ca681363a8943809c4751950 2020-10-29T03:56:07Z -OTP-19.2.2 51faafa9a20c4afa7944b8089b26f22c774bed19 2020-10-29T03:51:17Z -OTP-19.2.3 aa315e1cf1b79ab782e5b4c944595495ebf4e2f4 2020-10-29T03:51:20Z -OTP-19.2.3.1 677cbdffef317aaff00f1ef7eda0e28bd88fbb96 2020-10-29T03:51:13Z -OTP-19.3 a748cafdc7063d9f181ba12088db6458793ced2f 2020-10-29T03:51:15Z -OTP-19.3.1 d25ad84195ca42969fbfb017a52aab8c8effc246 2020-10-29T03:51:14Z -OTP-19.3.2 6acb7d6fb8d23c0b0b78d30a618d2636ad463e6e 2020-10-29T07:16:03Z -OTP-19.3.3 0298a195873c606ac885d37f54a098eca3d7905a 2020-10-29T03:50:34Z -OTP-19.3.4 f954cdea9b67369185094a3aea7cb611dd680b3c 2020-10-29T03:49:01Z -OTP-19.3.5 87bca557898bea79dbd53d59b21f6e7384e3a25d 2020-10-29T03:43:10Z -OTP-19.3.6 da06fd040775fffee17409ebbd6fa797e34d6f99 2020-10-29T03:42:52Z -OTP-19.3.6.1 8d9cde83b628533ae7a5fe85a5dd9c6c00c084e3 2020-10-29T03:42:31Z -OTP-19.3.6.10 5e64ffd74845a2b3b0a31968d31b2b409de41ca1 2020-10-29T03:34:14Z -OTP-19.3.6.11 58966e6d0b8ebdb96db02e42dd422f15be829df1 2020-10-29T07:06:17Z -OTP-19.3.6.12 ffc6c26914813a95fe0652c51b57c3c00a9f4ad7 2020-10-29T03:34:05Z -OTP-19.3.6.13 777e8a89dc5cabe4acd4910ce5e8f9e7e5d8d6b5 2020-10-29T07:03:33Z -OTP-19.3.6.2 0c0d7899f869eae275a9dd2677791f34bbd25bfe 2020-10-29T03:42:37Z -OTP-19.3.6.3 2cc46961352aded5c84ecb9bcb32581461dbc047 2020-10-29T03:42:33Z -OTP-19.3.6.4 e64a1f429ec5f7534e0201fed42967aeb1aae8d8 2020-10-29T03:42:30Z -OTP-19.3.6.5 2e7160f3c28d495a8b798c5f8b484b1b977cee8e 2020-10-29T03:42:39Z -OTP-19.3.6.6 33521da61673b890bcd05eda02f38fea1fe58a30 2020-10-29T03:42:09Z -OTP-19.3.6.7 bf70d8de7a6c52cb3ba51ae3e5506d8fc31bbc69 2020-10-29T07:07:13Z -OTP-19.3.6.8 90edf69ba7acbfaa55a709fa115ce8bb782b9dc9 2020-10-29T03:37:39Z -OTP-19.3.6.9 3d0c4930775cf2ab304d5e4701b41ffc2936ce53 2020-10-29T03:35:32Z -OTP-20.0 040bdce67f88d833bfb59adae130a4ffb4c180f0 2020-10-29T03:30:08Z -OTP-20.0-rc1 4f03eba5294f1c1bc922b07f1267e6b0099fd4b5 2020-10-29T03:34:07Z -OTP-20.0-rc2 d106c5fffb3832fffbdf99cca905390fe15d489f 2020-10-29T03:33:57Z -OTP-20.0.1 a01de6873844ba510084090abec734c4166d71fa 2020-10-29T03:29:36Z -OTP-20.0.2 6ede2da826335960037299d9f3b0e66d072ea5a0 2020-10-29T03:27:26Z -OTP-20.0.3 41878bba817fc2ec9e08529afe19c2655742dbd1 2020-10-29T03:25:53Z -OTP-20.0.4 a230f26086b3db9097f06d4bb91fb3b2e9379c77 2020-10-29T03:25:48Z -OTP-20.0.5 a3c983b4ba8755e39083bdaa785e400e8b5d745c 2020-10-29T03:17:54Z -OTP-20.1 02fd746c40e829adbe77cc526c7df904698e2534 2020-10-29T03:17:52Z -OTP-20.1.1 69292a11cd4b31fd3ff73b44f28d527f2d16f555 2020-10-29T03:17:05Z -OTP-20.1.2 919ef5de2858e606d4a9be3e0e995b0802c76e33 2020-10-29T03:14:09Z -OTP-20.1.3 a98379d0519c28f9bc9b673ed2c09fb1ad52456e 2020-10-29T03:14:16Z -OTP-20.1.4 3e8c1ff94c0a73df71daadd4eb782c21c49f22d9 2020-10-29T03:10:21Z -OTP-20.1.5 84f29ab803e8f36ef058a47f4c2b224f4dd58220 2020-10-29T03:10:18Z -OTP-20.1.6 f021a71ad8ffd2d1f5548927944d2b08935511d1 2020-10-29T03:10:13Z -OTP-20.1.7 2302ea8ca97b8a9075e9234d15430c47d3a115c8 2020-10-29T03:11:17Z -OTP-20.1.7.1 715c34cbea60ee6527b1963f8802f053e705a03e 2020-10-29T03:10:09Z -OTP-20.2 44b09e036b31b29dddc3b178e8f6b9fc96a9a874 2020-10-29T03:22:58Z -OTP-20.2.0.1 3f45d2f012d18a44e28be5c944b92996d8f4f517 2020-10-29T03:10:00Z -OTP-20.2.1 3a14bb468b1f3f1f5bef3c18291fe0498429a417 2020-10-29T03:07:00Z -OTP-20.2.2 194513197e19cd592f3f5c2231510542f5193fe4 2020-10-29T03:06:38Z -OTP-20.2.3 309ef748ddc5bde4bcba280ce2739385f27a76e6 2020-10-29T03:02:34Z -OTP-20.2.4 13c6a4bf01d39a5002e09ef1f82619cde9f2c90c 2020-10-29T03:02:16Z -OTP-20.3 a113f6117fd696ea6f84ed754055b4ec97a7ccb2 2020-10-29T03:02:29Z -OTP-20.3.1 0f2ead7bedeedc852db2deeeaa0e9e096bba8c0f 2020-10-29T03:02:09Z -OTP-20.3.2 c5ee502e6031986983d3596745cad7fd547fd9c2 2020-10-29T03:02:03Z -OTP-20.3.2.1 3c2908f8a6d4b55407c553db09cef8e22848c152 2020-10-29T03:02:06Z -OTP-20.3.3 6fad272f6b0a6b751386497191eb26e62e800ae2 2020-10-29T03:01:13Z -OTP-20.3.4 f2c1d537dc28ffbde5d42aedec70bf4c6574c3ea 2020-10-29T02:58:59Z -OTP-20.3.5 b5b627ded69445c06e8fbe34cda3421854c5582e 2020-10-29T02:47:15Z -OTP-20.3.6 40ab3958644be3fc14682c54233514fdf880386a 2020-10-29T02:46:52Z -OTP-20.3.7 cfaede58328ace4bb4fb7c5e1b055e420c0ded9a 2020-10-29T02:46:18Z -OTP-20.3.8 db6059a9217767a6e42e93cec05089c0ec977d20 2020-10-29T02:46:31Z -OTP-20.3.8.1 aa490b13a7f98e54c48fea3537f02614f1145ffc 2020-10-29T02:55:52Z -OTP-20.3.8.10 2e6b0b105b48e072d13672e0ca73107fc75cbcdc 2020-10-29T02:38:01Z -OTP-20.3.8.11 1da4135c98d9160d2d890724eb423db1fd1e39a2 2020-10-29T02:34:52Z -OTP-20.3.8.12 cb86d6daabc6dc2af7d05fd1c5b44b1697bad926 2020-10-29T02:34:06Z -OTP-20.3.8.13 39676016001f61affa62f040f42c704a62fa542c 2020-10-29T02:33:58Z -OTP-20.3.8.14 166aa12d68c71814ad3a06345bec57fa78a4b7de 2020-10-29T02:17:49Z -OTP-20.3.8.15 e6bf92e6e1a691bba97ea3d339fdab1872b823b3 2020-10-29T02:33:07Z -OTP-20.3.8.16 13f956c27a25b726b0cc297740d1f14bf854567f 2020-10-29T02:31:49Z -OTP-20.3.8.17 0d6eeb82210b5ad848af972c3b2f687a52edd156 2020-10-29T02:30:37Z -OTP-20.3.8.18 354da9029c62668d1ef5284aa60426d3b5349ecb 2020-10-29T02:30:27Z -OTP-20.3.8.19 487729f0a064d32a3fea6ad092f59a60ee53ca5f 2020-10-29T02:30:04Z -OTP-20.3.8.2 857156bcadae45fe112911bd7ca735ac6f3ca9d2 2020-10-29T02:46:07Z -OTP-20.3.8.20 8ab1bc2af5933b36c1583b1168e9b7875334cd50 2020-10-29T02:28:08Z -OTP-20.3.8.21 22a55c40254cfee683e070167794fab632bef865 2020-10-29T02:25:50Z -OTP-20.3.8.22 b228a78ccf59d79da8ba5bcbe7a354206b138595 2020-10-29T02:25:37Z -OTP-20.3.8.23 1d1ee8f87ae2b651dbb2502fc19577a6a3a6f34b 2020-10-29T02:11:20Z -OTP-20.3.8.24 edc678d5add2c741bc6d63f9f434e43e9bb12dae 2020-10-29T02:09:42Z -OTP-20.3.8.25 6a99831ae3c5c7962929108480323792af6cbc61 2020-10-29T02:07:53Z -OTP-20.3.8.26 8b1efc6cc3fa3b64bae51db4943f77f8ddd1399c 2020-10-29T02:07:43Z -OTP-20.3.8.3 107c492a5e3ebe315d68f9438191f2b0c2d37e5b 2020-10-29T02:42:23Z -OTP-20.3.8.4 757057b32f60fc1626af9593b49975f40fcceefd 2020-10-29T02:41:35Z -OTP-20.3.8.5 fe34bce692c8f83f46771f1f85a62137de10edd7 2020-10-29T02:40:52Z -OTP-20.3.8.6 2c7fbaf3b358a01c2d7541220d455759bea413b5 2020-10-29T02:38:52Z -OTP-20.3.8.7 8bb0d5d4049b6b2ec41f6cc3e154e9f688029bef 2020-10-29T02:38:36Z -OTP-20.3.8.8 9dc3d174810d468e718731953de3e9cc4bc95f43 2020-10-29T02:45:52Z -OTP-20.3.8.9 0eab3e63a93235cfa0bda36d25df15fd9421e642 2020-10-29T02:38:08Z -OTP-21.0 a0ae44f324576104760a63fe6cf63e0ca31756fc 2020-10-29T02:07:04Z -OTP-21.0-rc1 24bfa1943a85f9f9db34a799d44e072306694db9 2020-10-29T02:07:18Z -OTP-21.0-rc2 d3b4568f6d910eb4ce26b7a899c8c414ae252386 2020-10-29T02:07:10Z -OTP-21.0.1 a09907d56e29b24ded9a34de82bceac7f39021d1 2020-10-29T02:07:07Z -OTP-21.0.2 1f55b15c5e3f6ff79c855963876c501e9f782406 2020-10-29T02:06:36Z -OTP-21.0.3 a3a900e382ccba96ef15369c5771070e538b8367 2020-10-29T02:02:38Z -OTP-21.0.4 4664de710ded469916fcc8f85d4e9791adc319e9 2020-10-29T02:01:27Z -OTP-21.0.5 e37eec271ad08a6689e358071eeb800674cde938 2020-10-29T02:01:15Z -OTP-21.0.6 53b1e77ea7be8d90d652521a2326046b5d95c3e2 2020-10-29T02:00:18Z -OTP-21.0.7 f7012b7a731924193cf05fc77b103e89bd0fcbfb 2020-10-29T01:59:14Z -OTP-21.0.8 30e5321740b96b3a8984611b6f821692716d0555 2020-10-29T01:59:06Z -OTP-21.0.9 333e4c5a1406cdeb9d1d5cf9bf4a4fadb232fca8 2020-10-29T01:58:48Z -OTP-21.1 377f19f25aeec6939a6728bd0c4910086c22ccdc 2020-10-29T02:25:14Z -OTP-21.1.1 d9682b02b81fa6e23e554b6e017650eb89ecebed 2020-10-29T01:57:51Z -OTP-21.1.2 db35a04a38f9501b921beac2c46576c5fa13e75a 2020-10-29T01:54:45Z -OTP-21.1.3 9103097e3480b5fa8737205793df56c6288f5733 2020-10-29T01:53:53Z -OTP-21.1.4 51b11a0e7ad7794810be28b7239639784a85caf7 2020-10-29T01:53:44Z -OTP-21.2 3825199794da28d79b21052a2e69e2335921d55e 2020-10-29T01:53:14Z -OTP-21.2.1 5da29dab1d0de935b37cbfc9018d0d01955f1f48 2020-10-29T01:52:10Z -OTP-21.2.2 f0ea49125815ec9197ffb6c74e20ebb5f10732d4 2020-10-29T01:51:35Z -OTP-21.2.3 3f4b17036bb6dbd302da3c38830512439b146e34 2020-10-29T01:50:43Z -OTP-21.2.4 35f51c7f057943c25ccb7997526c9d47aed0cd0b 2020-10-29T02:25:18Z -OTP-21.2.5 934f9974eb6bec43cd9445ec0f5019a4d1389428 2020-10-29T01:50:10Z -OTP-21.2.6 f30b1052c7097a95faaba272feccc6190682a7f8 2020-10-29T01:47:08Z -OTP-21.2.7 0ec68a93247ca0ea1d44a2465767dffa4450411a 2020-10-29T01:45:44Z -OTP-21.3 620ac3e68c5bc8b36143965fcf2892a07dc005c4 2020-10-29T01:45:24Z -OTP-21.3.1 a4f71b669ad9ece1a4afa671601c7c72dc89f042 2020-10-29T12:55:36Z -OTP-21.3.2 7e6fff1e849998a3dd747b4d3cf35f39cb896aa0 2020-10-29T01:45:27Z -OTP-21.3.3 1feae54b6a313f7a35ca1671e3c50f8b434a1bb0 2020-10-29T01:45:05Z -OTP-21.3.4 7ad05d6dd4230061e8120ae8c0dec2535f47e294 2020-10-29T01:44:38Z -OTP-21.3.5 5d05cf5417b9f447a2de1cfaf705371c9ba64d50 2020-10-29T01:43:08Z -OTP-21.3.6 98669a56d4cacf5bf6c7413d264dc50289f84bb9 2020-10-29T02:24:43Z -OTP-21.3.7 68a90eb777b5c1e48c0760337fbf2b0b8a9aa6aa 2020-10-29T01:42:38Z -OTP-21.3.7.1 bfc4332e536d0ac9fdba62762607416c24e52ee9 2020-10-29T01:40:11Z -OTP-21.3.8 7fe7fa3dde556b5b92522f8279d465bb52baf1f6 2020-10-29T01:38:00Z -OTP-21.3.8.1 3b2c1dd3fdf1fec362cff3a88e188ef989ee79e5 2020-10-29T01:37:14Z -OTP-21.3.8.10 d0389a71bf302e2fd9487c1328ec0a5f33169639 2020-10-29T01:30:38Z -OTP-21.3.8.11 2896f4f12a9d9c3adeea41537348ded1a0f7ed32 2020-10-29T01:28:39Z -OTP-21.3.8.12 4b1a7d77593cab824bb5ea65bb58043adb5e2556 2020-10-29T02:23:39Z -OTP-21.3.8.13 d9523afc8bb54fa9772462170018f982359c0e0d 2020-10-29T01:28:21Z -OTP-21.3.8.14 8c27af949727bc5569b52d28dc4bf4a434d4f67d 2020-10-29T01:28:09Z -OTP-21.3.8.15 2cff1df7d6ba2ac8280fc1dfcde273bcd53b5727 2020-10-29T01:27:21Z -OTP-21.3.8.16 30c9094138934afbc88ab5827a409466464f37fd 2020-10-29T01:26:59Z -OTP-21.3.8.17 460a07fd6ea0213b245cec82caf2d325d1e55592 2020-10-29T01:26:55Z -OTP-21.3.8.18 526ba5933944a309d5225b801d936d0b41c622f3 2020-10-29T02:23:06Z -OTP-21.3.8.19 23719563b2a8255dd29c9bb102648b7e5188d633 2021-01-20T08:58:40Z -OTP-21.3.8.2 2bcc317861b118461376766692968775ab405cef 2020-10-29T01:37:11Z -OTP-21.3.8.20 775806a5363ad496ca573f4baa797628d15d7e2f 2021-01-25T10:49:10Z -OTP-21.3.8.21 67d0dd0997c3ac162b180cf86a084b34cabb9e0b 2021-02-19T12:32:10Z -OTP-21.3.8.3 9127de8d0204755a7a95b674e77c6aa0583efce0 2020-10-29T01:37:13Z -OTP-21.3.8.4 348e328375fb774b3fa919ffd1c4811367406516 2020-10-29T01:36:58Z -OTP-21.3.8.5 1be06fca56f5a13894b5317292fb3077d99e27d5 2020-10-29T01:35:53Z -OTP-21.3.8.6 4e0ab84c9f5f57bf73f72294789a447f458291f5 2020-10-29T01:35:26Z -OTP-21.3.8.7 9cf26085b35d8b305369f495001295e2dea90a84 2020-10-29T01:35:24Z -OTP-21.3.8.8 d233c924fe2de37c60b8d35898e57a8dcf6924d8 2020-10-29T01:35:07Z -OTP-21.3.8.9 76b004486063ac78586c8de69b2a7c9bd5ecc1f5 2020-10-29T01:32:36Z -OTP-22.0 6618ce7b6a621e92db72ea4f01f7d38553c8818c 2020-10-29T01:19:35Z -OTP-22.0-rc1 91637325d535b0881f6cc279927785d8ae0350e2 2020-10-29T01:24:37Z -OTP-22.0-rc2 d1b431a72f65ace425d6d85e57cb6e374f8d896d 2020-10-29T01:23:12Z -OTP-22.0-rc3 5b56ecbe12493a1ff6a0e975a65cefd09005cecd 2020-10-29T01:20:46Z -OTP-22.0.1 d32991afaf3fc5f9f73e3e2448672bb9a1b80101 2020-10-29T02:22:10Z -OTP-22.0.2 abbe8d424676a473bcebdf3b97996ac7a5a70f16 2020-10-29T01:19:15Z -OTP-22.0.3 b4fb2e5669acb02697d9a9ab168eb0fbff6f370c 2020-10-29T01:18:31Z -OTP-22.0.4 4319a7f8bc93388ec540e954eb9bb73ea1eec4ef 2020-10-29T01:17:57Z -OTP-22.0.5 7999631c63998cffc07bbcc91dd86cbe709dde5f 2020-10-29T01:17:55Z -OTP-22.0.6 fa5e2cae48323a391ff65512a972d6c9f4ba4119 2020-10-29T01:17:04Z -OTP-22.0.7 3967d28c05dae77db30b15e56eb4ececf4f1afef 2020-10-29T02:21:11Z -OTP-22.1 e62a389ce5dd27e7b26802243a5565ffd1feaef0 2020-10-29T01:14:36Z -OTP-22.1.1 2d381f491bb62cd80209dcddfe9ad79eaad6f71d 2020-10-29T01:12:43Z -OTP-22.1.2 b309db9f63bc6c07ecf1a273203791121d255e90 2020-10-29T01:10:50Z -OTP-22.1.3 a54dabce8c298a630f868a02ba7ef208df61080d 2020-10-29T01:09:58Z -OTP-22.1.4 6611181ae71422a1c66798718b37474641a090a9 2020-10-29T01:09:53Z -OTP-22.1.5 aa04ba3832f90baf4d7a5db46c7e30f159dd1853 2020-10-29T01:08:39Z -OTP-22.1.6 1ebb35ecf7de8e2763e665339e4e8f54500f5274 2020-10-29T01:07:53Z -OTP-22.1.7 0739760ac6ad4c9b2a92bca04a6e68a0e90528ad 2020-10-29T01:07:38Z -OTP-22.1.8 e6bb29f2aa9241b1966085c2264eb7f92d018b7e 2020-10-29T01:07:48Z -OTP-22.1.8.1 3affe7fb59341494cec157615a81a036956d7612 2020-10-29T01:06:53Z -OTP-22.2 926f03ce5ba4f2156a36940d267a1a1e683484ff 2020-10-29T01:06:41Z -OTP-22.2.1 4583b137e585e59a3fc7020b781911a6927187a2 2020-10-29T01:05:22Z -OTP-22.2.2 11b70e35e2322819d3b1bbe6a9af17800671394c 2020-10-29T01:03:21Z -OTP-22.2.3 33feb560af990dffdc138172741b16d7cac9bcb5 2020-10-29T01:01:50Z -OTP-22.2.4 692c0a4f98a85b81de8121ee2a452aa7350c819f 2020-10-29T01:01:37Z -OTP-22.2.5 19f272489dcac18147747c6a8b011e0d264cdfe8 2020-10-29T01:00:43Z -OTP-22.2.6 fb2d77b683aa21e2af801bcba4647cd6f826dd40 2020-10-29T00:59:15Z -OTP-22.2.7 60d3c955652cbd44e9d1e300b4834e16db565ce1 2020-10-29T00:59:07Z -OTP-22.2.8 1af6e2d6313aab7a736008f17fc6577e3ceb9195 2020-10-29T00:59:25Z -OTP-22.3 5b526169ea616e87a7145d2a996b94a91879f200 2020-10-29T00:58:38Z -OTP-22.3.1 f30844e4c506405c5219ecdfe1ed2989a2a6f1e2 2020-10-29T00:44:54Z -OTP-22.3.2 b55ccdf1539e9c80033c0f9d10aecaee3ab434d1 2020-10-29T00:44:45Z -OTP-22.3.3 e17bf2e452a421743f028960b4e1c559f3f8f450 2020-10-29T00:42:54Z -OTP-22.3.4 6d5a5f31c36bbdaad21585d25974177bd1b75e66 2020-10-29T00:58:23Z -OTP-22.3.4.1 7367d5d70409cd3696eb84f2e59ebab58ca14be7 2020-10-29T00:42:08Z -OTP-22.3.4.10 17c8d420e951b6723bac56478c5267a6c0503db0 2020-10-29T00:33:35Z -OTP-22.3.4.11 579c0a40867e3d0f6f5ad0a23c38fcea679bf4e9 2020-10-29T00:33:28Z -OTP-22.3.4.12 038a4e93f3779101dbfb48548c1dc575a1e94f1e 2020-10-29T00:33:14Z -OTP-22.3.4.13 59828a7d10c6202715099ae0ae4640801feb33ac 2020-12-07T10:21:46Z -OTP-22.3.4.14 982bf944b0a7e00dfcbf39703b9e47092b21e0ec 2021-01-13T13:06:23Z -OTP-22.3.4.15 70a94146d27e57524b34d79ab915adf54347ba0a 2021-01-20T09:12:23Z -OTP-22.3.4.16 304a086f18cbe9eb1b88d06afcaa6efdbb57dacc 2021-02-19T12:15:33Z -OTP-22.3.4.2 5664ccc8f9bbe6d22e4d088e85386cd7ffcee120 2020-10-29T00:41:59Z -OTP-22.3.4.3 2474135c753cfca3dde9141173b262a6e1da2f81 2020-10-29T00:41:50Z -OTP-22.3.4.4 351350b77159a50ec557bee3d423d7f6755cbc2e 2020-10-29T00:41:11Z -OTP-22.3.4.5 df83e85b18448379170c523e901e83357ba985fd 2020-10-29T00:39:40Z -OTP-22.3.4.6 7339e8f745c9ae4cc71e8dc09be37e3116249392 2020-10-29T00:36:58Z -OTP-22.3.4.7 4fe38e31ba9110fac6dcfecea198fa4fecf9d120 2020-10-29T00:36:45Z -OTP-22.3.4.8 dcedff2a67861fb546626c3e6e9fc41cbc17de6d 2020-10-29T00:36:49Z -OTP-22.3.4.9 9fc11d032af0d72b462d2b64c925213718c2ce56 2020-10-29T00:35:19Z -OTP-23.0 7a8d04dbcb388a5d837a213ad249c1b96e19e998 2020-11-22T21:02:22Z -OTP-23.0-rc1 2b823b90b7dbd56aae3a3fbdcb182f9fd5127a59 2020-11-22T21:18:29Z -OTP-23.0-rc2 a24425668beed38e04039c292361e09c4826683f 2020-11-22T21:14:04Z -OTP-23.0-rc3 9f17d424ada5353db1e5b31296484d95679f8ca8 2020-11-22T21:10:57Z -OTP-23.0.1 dfe280693df2990e1ee31ece3431e85a3c3dc07d 2020-11-22T21:01:04Z -OTP-23.0.2 d687a6f130d6554728cc250b932bad50bb729502 2020-11-22T20:56:32Z -OTP-23.0.3 44b6531bc575bac4eccab7eea2b27167f0d324aa 2020-11-22T20:49:01Z -OTP-23.0.4 c210ba41b305763f51a1f9663b616f606b10d42e 2020-11-22T20:44:28Z -OTP-23.1 1b5dce9313e29c320593b3bba5ca020a23019706 2020-11-22T20:36:51Z -OTP-23.1.1 3f21ce1e6a5d6c548867fa4bc9a8c666c626ade1 2020-11-22T18:47:22Z -OTP-23.1.2 fea47f1127b7190898b84852a90a4426fa022b39 2020-11-22T20:35:45Z -OTP-23.1.3 8e87411a2552104111a2f4592a972e5c7c6f8723 2020-11-22T20:19:57Z -OTP-23.1.4 f48399440e07199f89e589ac91bc866651264298 2020-11-22T20:19:17Z -OTP-23.1.5 600506690a10215a6c7e21eefbf855216cda4c33 2020-12-07T08:58:18Z -OTP-23.2 5a3d03ee2c12f4c93cf7375abdb3c04f7423f76d 2020-12-16T07:44:11Z -OTP-23.2.1 2c89431fa867d5b1cc56f26a9282bcfb6fcdec58 2020-12-21T10:08:46Z -OTP-23.2.2 1a7dc7ad22b089a01b253432484983fd6e141103 2021-01-15T11:06:16Z -OTP-23.2.3 050a78f8a67ed76a632f0e73b76ceb83e7054e5f 2021-01-20T12:37:28Z -OTP-23.2.4 74d045d62e283948247e03a93d22171802997804 2021-02-04T14:31:11Z -OTP-23.2.5 93caf7975a293bfd842f2c77ccab3bb8a4660363 2021-02-16T09:19:03Z -OTP-23.2.6 e8f9f260722457c48a801ba91f087cd986376fcd 2021-02-25T09:27:11Z -OTP-23.2.7 122ab644d8bf71c8afd099409e0032beb61aa464 2021-03-03T09:21:08Z -OTP-24.0-rc1 655bd1a27673720bcee187e9fd9f07d739860ad3 2021-02-24T09:21:45Z -maint 795417e9c98358bb82bb7f80a99f2f892c56fc49 2021-03-13T03:08:29Z -maint-17 a5d9e9901468d75a2913c83580d5e9e29f37462d 2020-10-31T03:10:41Z -maint-18 1283ca3bc4bba3381f8fd1f59fb62780d3e17472 2020-10-30T03:21:15Z -maint-19 777e8a89dc5cabe4acd4910ce5e8f9e7e5d8d6b5 2020-10-30T03:22:21Z -maint-20 8b1efc6cc3fa3b64bae51db4943f77f8ddd1399c 2020-10-30T03:22:14Z -maint-21 67d0dd0997c3ac162b180cf86a084b34cabb9e0b 2021-02-20T03:13:23Z -maint-22 304a086f18cbe9eb1b88d06afcaa6efdbb57dacc 2021-02-20T03:11:10Z -maint-23 122ab644d8bf71c8afd099409e0032beb61aa464 2021-03-04T03:11:26Z -master 13f941d2ed90b3dcb0f8fc97bbad79bcdc474f64 2021-03-13T03:08:08Z diff --git a/dist/__tests__/setup-elixir.test.js b/dist/__tests__/setup-elixir.test.js deleted file mode 100644 index 30a49642..00000000 --- a/dist/__tests__/setup-elixir.test.js +++ /dev/null @@ -1,4325 +0,0 @@ -module.exports = -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ 340: -/***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { - -const setupElixir = __nccwpck_require__(8203) -const {deepStrictEqual} = __nccwpck_require__(2357) - -async function test() { - let vsn - vsn = await setupElixir.getOTPVersion('19.3.x', 'ubuntu-16.04') - deepStrictEqual(vsn, 'OTP-19.3.6') - - vsn = await setupElixir.getOTPVersion('^19.3.6', 'ubuntu-16.04') - deepStrictEqual(vsn, 'OTP-19.3.6') - - vsn = await setupElixir.getOTPVersion('^19.3', 'ubuntu-18.04') - deepStrictEqual(vsn, 'OTP-19.3.6') - - vsn = await setupElixir.getElixirVersion('v1.10.x', 'OTP-23') - deepStrictEqual(vsn, ['v1.10.4', '23']) - - vsn = await setupElixir.getElixirVersion('^v1.10', 'OTP-23') - deepStrictEqual(vsn, ['v1.10.4', '23']) - - vsn = await setupElixir.getElixirVersion('v1.11.0-rc.0', 'OTP-23') - deepStrictEqual(vsn, ['v1.11.0-rc.0', '23']) - - vsn = await setupElixir.getRebar3Version('3.x') - deepStrictEqual(vsn, '3.14.4') - - vsn = await setupElixir.getRebar3Version('^3.14.4') - deepStrictEqual(vsn, '3.14.4') - - vsn = await setupElixir.getRebar3Version('^3.14') - deepStrictEqual(vsn, '3.14.4') -} - -test() - .then(() => process.exit(0)) - .catch((err) => { - console.error(err) - process.exit(1) - }) - - -/***/ }), - -/***/ 7351: -/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -const os = __nccwpck_require__(2087); -/** - * Commands - * - * Command Format: - * ##[name key=value;key=value]message - * - * Examples: - * ##[warning]This is the user warning message - * ##[set-secret name=mypassword]definitelyNotAPassword! - */ -function issueCommand(command, properties, message) { - const cmd = new Command(command, properties, message); - process.stdout.write(cmd.toString() + os.EOL); -} -exports.issueCommand = issueCommand; -function issue(name, message = '') { - issueCommand(name, {}, message); -} -exports.issue = issue; -const CMD_PREFIX = '##['; -class Command { - constructor(command, properties, message) { - if (!command) { - command = 'missing.command'; - } - this.command = command; - this.properties = properties; - this.message = message; - } - toString() { - let cmdStr = CMD_PREFIX + this.command; - if (this.properties && Object.keys(this.properties).length > 0) { - cmdStr += ' '; - for (const key in this.properties) { - if (this.properties.hasOwnProperty(key)) { - const val = this.properties[key]; - if (val) { - // safely append the val - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - cmdStr += `${key}=${escape(`${val || ''}`)};`; - } - } - } - } - cmdStr += ']'; - // safely append the message - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - const message = `${this.message || ''}`; - cmdStr += escapeData(message); - return cmdStr; - } -} -function escapeData(s) { - return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A'); -} -function escape(s) { - return s - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A') - .replace(/]/g, '%5D') - .replace(/;/g, '%3B'); -} -//# sourceMappingURL=command.js.map - -/***/ }), - -/***/ 2186: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -const command_1 = __nccwpck_require__(7351); -const path = __nccwpck_require__(5622); -/** - * The code to exit an action - */ -var ExitCode; -(function (ExitCode) { - /** - * A code indicating that the action was successful - */ - ExitCode[ExitCode["Success"] = 0] = "Success"; - /** - * A code indicating that the action was a failure - */ - ExitCode[ExitCode["Failure"] = 1] = "Failure"; -})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); -//----------------------------------------------------------------------- -// Variables -//----------------------------------------------------------------------- -/** - * sets env variable for this action and future actions in the job - * @param name the name of the variable to set - * @param val the value of the variable - */ -function exportVariable(name, val) { - process.env[name] = val; - command_1.issueCommand('set-env', { name }, val); -} -exports.exportVariable = exportVariable; -/** - * exports the variable and registers a secret which will get masked from logs - * @param name the name of the variable to set - * @param val value of the secret - */ -function exportSecret(name, val) { - exportVariable(name, val); - // the runner will error with not implemented - // leaving the function but raising the error earlier - command_1.issueCommand('set-secret', {}, val); - throw new Error('Not implemented.'); -} -exports.exportSecret = exportSecret; -/** - * Prepends inputPath to the PATH (for this action and future actions) - * @param inputPath - */ -function addPath(inputPath) { - command_1.issueCommand('add-path', {}, inputPath); - process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; -} -exports.addPath = addPath; -/** - * Gets the value of an input. The value is also trimmed. - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns string - */ -function getInput(name, options) { - const val = process.env[`INPUT_${name.replace(' ', '_').toUpperCase()}`] || ''; - if (options && options.required && !val) { - throw new Error(`Input required and not supplied: ${name}`); - } - return val.trim(); -} -exports.getInput = getInput; -/** - * Sets the value of an output. - * - * @param name name of the output to set - * @param value value to store - */ -function setOutput(name, value) { - command_1.issueCommand('set-output', { name }, value); -} -exports.setOutput = setOutput; -//----------------------------------------------------------------------- -// Results -//----------------------------------------------------------------------- -/** - * Sets the action status to failed. - * When the action exits it will be with an exit code of 1 - * @param message add error issue message - */ -function setFailed(message) { - process.exitCode = ExitCode.Failure; - error(message); -} -exports.setFailed = setFailed; -//----------------------------------------------------------------------- -// Logging Commands -//----------------------------------------------------------------------- -/** - * Writes debug message to user log - * @param message debug message - */ -function debug(message) { - command_1.issueCommand('debug', {}, message); -} -exports.debug = debug; -/** - * Adds an error issue - * @param message error issue message - */ -function error(message) { - command_1.issue('error', message); -} -exports.error = error; -/** - * Adds an warning issue - * @param message warning issue message - */ -function warning(message) { - command_1.issue('warning', message); -} -exports.warning = warning; -/** - * Begin an output group. - * - * Output until the next `groupEnd` will be foldable in this group - * - * @param name The name of the output group - */ -function startGroup(name) { - command_1.issue('group', name); -} -exports.startGroup = startGroup; -/** - * End an output group. - */ -function endGroup() { - command_1.issue('endgroup'); -} -exports.endGroup = endGroup; -/** - * Wrap an asynchronous function call in a group. - * - * Returns the same type as the function itself. - * - * @param name The name of the group - * @param fn The function to wrap in the group - */ -function group(name, fn) { - return __awaiter(this, void 0, void 0, function* () { - startGroup(name); - let result; - try { - result = yield fn(); - } - finally { - endGroup(); - } - return result; - }); -} -exports.group = group; -//# sourceMappingURL=core.js.map - -/***/ }), - -/***/ 1514: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -const tr = __nccwpck_require__(8159); -/** - * Exec a command. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param commandLine command to execute (can include additional args). Must be correctly escaped. - * @param args optional arguments for tool. Escaping is handled by the lib. - * @param options optional exec options. See ExecOptions - * @returns Promise exit code - */ -function exec(commandLine, args, options) { - return __awaiter(this, void 0, void 0, function* () { - const commandArgs = tr.argStringToArray(commandLine); - if (commandArgs.length === 0) { - throw new Error(`Parameter 'commandLine' cannot be null or empty.`); - } - // Path to tool to execute should be first arg - const toolPath = commandArgs[0]; - args = commandArgs.slice(1).concat(args || []); - const runner = new tr.ToolRunner(toolPath, args, options); - return runner.exec(); - }); -} -exports.exec = exec; -//# sourceMappingURL=exec.js.map - -/***/ }), - -/***/ 8159: -/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -const os = __nccwpck_require__(2087); -const events = __nccwpck_require__(8614); -const child = __nccwpck_require__(3129); -/* eslint-disable @typescript-eslint/unbound-method */ -const IS_WINDOWS = process.platform === 'win32'; -/* - * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way. - */ -class ToolRunner extends events.EventEmitter { - constructor(toolPath, args, options) { - super(); - if (!toolPath) { - throw new Error("Parameter 'toolPath' cannot be null or empty."); - } - this.toolPath = toolPath; - this.args = args || []; - this.options = options || {}; - } - _debug(message) { - if (this.options.listeners && this.options.listeners.debug) { - this.options.listeners.debug(message); - } - } - _getCommandString(options, noPrefix) { - const toolPath = this._getSpawnFileName(); - const args = this._getSpawnArgs(options); - let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool - if (IS_WINDOWS) { - // Windows + cmd file - if (this._isCmdFile()) { - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } - // Windows + verbatim - else if (options.windowsVerbatimArguments) { - cmd += `"${toolPath}"`; - for (const a of args) { - cmd += ` ${a}`; - } - } - // Windows (regular) - else { - cmd += this._windowsQuoteCmdArg(toolPath); - for (const a of args) { - cmd += ` ${this._windowsQuoteCmdArg(a)}`; - } - } - } - else { - // OSX/Linux - this can likely be improved with some form of quoting. - // creating processes on Unix is fundamentally different than Windows. - // on Unix, execvp() takes an arg array. - cmd += toolPath; - for (const a of args) { - cmd += ` ${a}`; - } - } - return cmd; - } - _processLineBuffer(data, strBuffer, onLine) { - try { - let s = strBuffer + data.toString(); - let n = s.indexOf(os.EOL); - while (n > -1) { - const line = s.substring(0, n); - onLine(line); - // the rest of the string ... - s = s.substring(n + os.EOL.length); - n = s.indexOf(os.EOL); - } - strBuffer = s; - } - catch (err) { - // streaming lines to console is best effort. Don't fail a build. - this._debug(`error processing line. Failed with error ${err}`); - } - } - _getSpawnFileName() { - if (IS_WINDOWS) { - if (this._isCmdFile()) { - return process.env['COMSPEC'] || 'cmd.exe'; - } - } - return this.toolPath; - } - _getSpawnArgs(options) { - if (IS_WINDOWS) { - if (this._isCmdFile()) { - let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; - for (const a of this.args) { - argline += ' '; - argline += options.windowsVerbatimArguments - ? a - : this._windowsQuoteCmdArg(a); - } - argline += '"'; - return [argline]; - } - } - return this.args; - } - _endsWith(str, end) { - return str.endsWith(end); - } - _isCmdFile() { - const upperToolPath = this.toolPath.toUpperCase(); - return (this._endsWith(upperToolPath, '.CMD') || - this._endsWith(upperToolPath, '.BAT')); - } - _windowsQuoteCmdArg(arg) { - // for .exe, apply the normal quoting rules that libuv applies - if (!this._isCmdFile()) { - return this._uvQuoteCmdArg(arg); - } - // otherwise apply quoting rules specific to the cmd.exe command line parser. - // the libuv rules are generic and are not designed specifically for cmd.exe - // command line parser. - // - // for a detailed description of the cmd.exe command line parser, refer to - // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 - // need quotes for empty arg - if (!arg) { - return '""'; - } - // determine whether the arg needs to be quoted - const cmdSpecialChars = [ - ' ', - '\t', - '&', - '(', - ')', - '[', - ']', - '{', - '}', - '^', - '=', - ';', - '!', - "'", - '+', - ',', - '`', - '~', - '|', - '<', - '>', - '"' - ]; - let needsQuotes = false; - for (const char of arg) { - if (cmdSpecialChars.some(x => x === char)) { - needsQuotes = true; - break; - } - } - // short-circuit if quotes not needed - if (!needsQuotes) { - return arg; - } - // the following quoting rules are very similar to the rules that by libuv applies. - // - // 1) wrap the string in quotes - // - // 2) double-up quotes - i.e. " => "" - // - // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately - // doesn't work well with a cmd.exe command line. - // - // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. - // for example, the command line: - // foo.exe "myarg:""my val""" - // is parsed by a .NET console app into an arg array: - // [ "myarg:\"my val\"" ] - // which is the same end result when applying libuv quoting rules. although the actual - // command line from libuv quoting rules would look like: - // foo.exe "myarg:\"my val\"" - // - // 3) double-up slashes that precede a quote, - // e.g. hello \world => "hello \world" - // hello\"world => "hello\\""world" - // hello\\"world => "hello\\\\""world" - // hello world\ => "hello world\\" - // - // technically this is not required for a cmd.exe command line, or the batch argument parser. - // the reasons for including this as a .cmd quoting rule are: - // - // a) this is optimized for the scenario where the argument is passed from the .cmd file to an - // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. - // - // b) it's what we've been doing previously (by deferring to node default behavior) and we - // haven't heard any complaints about that aspect. - // - // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be - // escaped when used on the command line directly - even though within a .cmd file % can be escaped - // by using %%. - // - // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts - // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. - // - // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would - // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the - // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args - // to an external program. - // - // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. - // % can be escaped within a .cmd file. - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - // walk the string in reverse - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === '\\') { - reverse += '\\'; // double the slash - } - else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += '"'; // double the quote - } - else { - quoteHit = false; - } - } - reverse += '"'; - return reverse - .split('') - .reverse() - .join(''); - } - _uvQuoteCmdArg(arg) { - // Tool runner wraps child_process.spawn() and needs to apply the same quoting as - // Node in certain cases where the undocumented spawn option windowsVerbatimArguments - // is used. - // - // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, - // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), - // pasting copyright notice from Node within this function: - // - // Copyright Joyent, Inc. and other Node contributors. All rights reserved. - // - // Permission is hereby granted, free of charge, to any person obtaining a copy - // of this software and associated documentation files (the "Software"), to - // deal in the Software without restriction, including without limitation the - // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - // sell copies of the Software, and to permit persons to whom the Software is - // furnished to do so, subject to the following conditions: - // - // The above copyright notice and this permission notice shall be included in - // all copies or substantial portions of the Software. - // - // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - // IN THE SOFTWARE. - if (!arg) { - // Need double quotation for empty argument - return '""'; - } - if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) { - // No quotation needed - return arg; - } - if (!arg.includes('"') && !arg.includes('\\')) { - // No embedded double quotes or backslashes, so I can just wrap - // quote marks around the whole thing. - return `"${arg}"`; - } - // Expected input/output: - // input : hello"world - // output: "hello\"world" - // input : hello""world - // output: "hello\"\"world" - // input : hello\world - // output: hello\world - // input : hello\\world - // output: hello\\world - // input : hello\"world - // output: "hello\\\"world" - // input : hello\\"world - // output: "hello\\\\\"world" - // input : hello world\ - // output: "hello world\\" - note the comment in libuv actually reads "hello world\" - // but it appears the comment is wrong, it should be "hello world\\" - let reverse = '"'; - let quoteHit = true; - for (let i = arg.length; i > 0; i--) { - // walk the string in reverse - reverse += arg[i - 1]; - if (quoteHit && arg[i - 1] === '\\') { - reverse += '\\'; - } - else if (arg[i - 1] === '"') { - quoteHit = true; - reverse += '\\'; - } - else { - quoteHit = false; - } - } - reverse += '"'; - return reverse - .split('') - .reverse() - .join(''); - } - _cloneExecOptions(options) { - options = options || {}; - const result = { - cwd: options.cwd || process.cwd(), - env: options.env || process.env, - silent: options.silent || false, - windowsVerbatimArguments: options.windowsVerbatimArguments || false, - failOnStdErr: options.failOnStdErr || false, - ignoreReturnCode: options.ignoreReturnCode || false, - delay: options.delay || 10000 - }; - result.outStream = options.outStream || process.stdout; - result.errStream = options.errStream || process.stderr; - return result; - } - _getSpawnOptions(options, toolPath) { - options = options || {}; - const result = {}; - result.cwd = options.cwd; - result.env = options.env; - result['windowsVerbatimArguments'] = - options.windowsVerbatimArguments || this._isCmdFile(); - if (options.windowsVerbatimArguments) { - result.argv0 = `"${toolPath}"`; - } - return result; - } - /** - * Exec a tool. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param options optional exec options. See ExecOptions - * @returns number - */ - exec() { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => { - this._debug(`exec tool: ${this.toolPath}`); - this._debug('arguments:'); - for (const arg of this.args) { - this._debug(` ${arg}`); - } - const optionsNonNull = this._cloneExecOptions(this.options); - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); - } - const state = new ExecState(optionsNonNull, this.toolPath); - state.on('debug', (message) => { - this._debug(message); - }); - const fileName = this._getSpawnFileName(); - const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); - const stdbuffer = ''; - if (cp.stdout) { - cp.stdout.on('data', (data) => { - if (this.options.listeners && this.options.listeners.stdout) { - this.options.listeners.stdout(data); - } - if (!optionsNonNull.silent && optionsNonNull.outStream) { - optionsNonNull.outStream.write(data); - } - this._processLineBuffer(data, stdbuffer, (line) => { - if (this.options.listeners && this.options.listeners.stdline) { - this.options.listeners.stdline(line); - } - }); - }); - } - const errbuffer = ''; - if (cp.stderr) { - cp.stderr.on('data', (data) => { - state.processStderr = true; - if (this.options.listeners && this.options.listeners.stderr) { - this.options.listeners.stderr(data); - } - if (!optionsNonNull.silent && - optionsNonNull.errStream && - optionsNonNull.outStream) { - const s = optionsNonNull.failOnStdErr - ? optionsNonNull.errStream - : optionsNonNull.outStream; - s.write(data); - } - this._processLineBuffer(data, errbuffer, (line) => { - if (this.options.listeners && this.options.listeners.errline) { - this.options.listeners.errline(line); - } - }); - }); - } - cp.on('error', (err) => { - state.processError = err.message; - state.processExited = true; - state.processClosed = true; - state.CheckComplete(); - }); - cp.on('exit', (code) => { - state.processExitCode = code; - state.processExited = true; - this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); - state.CheckComplete(); - }); - cp.on('close', (code) => { - state.processExitCode = code; - state.processExited = true; - state.processClosed = true; - this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); - state.CheckComplete(); - }); - state.on('done', (error, exitCode) => { - if (stdbuffer.length > 0) { - this.emit('stdline', stdbuffer); - } - if (errbuffer.length > 0) { - this.emit('errline', errbuffer); - } - cp.removeAllListeners(); - if (error) { - reject(error); - } - else { - resolve(exitCode); - } - }); - }); - }); - } -} -exports.ToolRunner = ToolRunner; -/** - * Convert an arg string to an array of args. Handles escaping - * - * @param argString string of arguments - * @returns string[] array of arguments - */ -function argStringToArray(argString) { - const args = []; - let inQuotes = false; - let escaped = false; - let arg = ''; - function append(c) { - // we only escape double quotes. - if (escaped && c !== '"') { - arg += '\\'; - } - arg += c; - escaped = false; - } - for (let i = 0; i < argString.length; i++) { - const c = argString.charAt(i); - if (c === '"') { - if (!escaped) { - inQuotes = !inQuotes; - } - else { - append(c); - } - continue; - } - if (c === '\\' && escaped) { - append(c); - continue; - } - if (c === '\\' && inQuotes) { - escaped = true; - continue; - } - if (c === ' ' && !inQuotes) { - if (arg.length > 0) { - args.push(arg); - arg = ''; - } - continue; - } - append(c); - } - if (arg.length > 0) { - args.push(arg.trim()); - } - return args; -} -exports.argStringToArray = argStringToArray; -class ExecState extends events.EventEmitter { - constructor(options, toolPath) { - super(); - this.processClosed = false; // tracks whether the process has exited and stdio is closed - this.processError = ''; - this.processExitCode = 0; - this.processExited = false; // tracks whether the process has exited - this.processStderr = false; // tracks whether stderr was written to - this.delay = 10000; // 10 seconds - this.done = false; - this.timeout = null; - if (!toolPath) { - throw new Error('toolPath must not be empty'); - } - this.options = options; - this.toolPath = toolPath; - if (options.delay) { - this.delay = options.delay; - } - } - CheckComplete() { - if (this.done) { - return; - } - if (this.processClosed) { - this._setResult(); - } - else if (this.processExited) { - this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this); - } - } - _debug(message) { - this.emit('debug', message); - } - _setResult() { - // determine whether there is an error - let error; - if (this.processExited) { - if (this.processError) { - error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); - } - else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { - error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); - } - else if (this.processStderr && this.options.failOnStdErr) { - error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); - } - } - // clear the timeout - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.done = true; - this.emit('done', error, this.processExitCode); - } - static HandleTimeout(state) { - if (state.done) { - return; - } - if (!state.processClosed && state.processExited) { - const message = `The STDIO streams did not close within ${state.delay / - 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; - state._debug(message); - } - state._setResult(); - } -} -//# sourceMappingURL=toolrunner.js.map - -/***/ }), - -/***/ 7129: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - - -// A linked list to keep track of recently-used-ness -const Yallist = __nccwpck_require__(665) - -const MAX = Symbol('max') -const LENGTH = Symbol('length') -const LENGTH_CALCULATOR = Symbol('lengthCalculator') -const ALLOW_STALE = Symbol('allowStale') -const MAX_AGE = Symbol('maxAge') -const DISPOSE = Symbol('dispose') -const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') -const LRU_LIST = Symbol('lruList') -const CACHE = Symbol('cache') -const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') - -const naiveLength = () => 1 - -// lruList is a yallist where the head is the youngest -// item, and the tail is the oldest. the list contains the Hit -// objects as the entries. -// Each Hit object has a reference to its Yallist.Node. This -// never changes. -// -// cache is a Map (or PseudoMap) that matches the keys to -// the Yallist.Node object. -class LRUCache { - constructor (options) { - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - if (options.max && (typeof options.max !== 'number' || options.max < 0)) - throw new TypeError('max must be a non-negative number') - // Kind of weird to have a default max of Infinity, but oh well. - const max = this[MAX] = options.max || Infinity - - const lc = options.length || naiveLength - this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc - this[ALLOW_STALE] = options.stale || false - if (options.maxAge && typeof options.maxAge !== 'number') - throw new TypeError('maxAge must be a number') - this[MAX_AGE] = options.maxAge || 0 - this[DISPOSE] = options.dispose - this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false - this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false - this.reset() - } - - // resize the cache when the max changes. - set max (mL) { - if (typeof mL !== 'number' || mL < 0) - throw new TypeError('max must be a non-negative number') - - this[MAX] = mL || Infinity - trim(this) - } - get max () { - return this[MAX] - } - - set allowStale (allowStale) { - this[ALLOW_STALE] = !!allowStale - } - get allowStale () { - return this[ALLOW_STALE] - } - - set maxAge (mA) { - if (typeof mA !== 'number') - throw new TypeError('maxAge must be a non-negative number') - - this[MAX_AGE] = mA - trim(this) - } - get maxAge () { - return this[MAX_AGE] - } - - // resize the cache when the lengthCalculator changes. - set lengthCalculator (lC) { - if (typeof lC !== 'function') - lC = naiveLength - - if (lC !== this[LENGTH_CALCULATOR]) { - this[LENGTH_CALCULATOR] = lC - this[LENGTH] = 0 - this[LRU_LIST].forEach(hit => { - hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) - this[LENGTH] += hit.length - }) - } - trim(this) - } - get lengthCalculator () { return this[LENGTH_CALCULATOR] } - - get length () { return this[LENGTH] } - get itemCount () { return this[LRU_LIST].length } - - rforEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].tail; walker !== null;) { - const prev = walker.prev - forEachStep(this, fn, walker, thisp) - walker = prev - } - } - - forEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].head; walker !== null;) { - const next = walker.next - forEachStep(this, fn, walker, thisp) - walker = next - } - } - - keys () { - return this[LRU_LIST].toArray().map(k => k.key) - } - - values () { - return this[LRU_LIST].toArray().map(k => k.value) - } - - reset () { - if (this[DISPOSE] && - this[LRU_LIST] && - this[LRU_LIST].length) { - this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) - } - - this[CACHE] = new Map() // hash of items by key - this[LRU_LIST] = new Yallist() // list of items in order of use recency - this[LENGTH] = 0 // length of items in the list - } - - dump () { - return this[LRU_LIST].map(hit => - isStale(this, hit) ? false : { - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }).toArray().filter(h => h) - } - - dumpLru () { - return this[LRU_LIST] - } - - set (key, value, maxAge) { - maxAge = maxAge || this[MAX_AGE] - - if (maxAge && typeof maxAge !== 'number') - throw new TypeError('maxAge must be a number') - - const now = maxAge ? Date.now() : 0 - const len = this[LENGTH_CALCULATOR](value, key) - - if (this[CACHE].has(key)) { - if (len > this[MAX]) { - del(this, this[CACHE].get(key)) - return false - } - - const node = this[CACHE].get(key) - const item = node.value - - // dispose of the old one before overwriting - // split out into 2 ifs for better coverage tracking - if (this[DISPOSE]) { - if (!this[NO_DISPOSE_ON_SET]) - this[DISPOSE](key, item.value) - } - - item.now = now - item.maxAge = maxAge - item.value = value - this[LENGTH] += len - item.length - item.length = len - this.get(key) - trim(this) - return true - } - - const hit = new Entry(key, value, len, now, maxAge) - - // oversized objects fall out of cache automatically. - if (hit.length > this[MAX]) { - if (this[DISPOSE]) - this[DISPOSE](key, value) - - return false - } - - this[LENGTH] += hit.length - this[LRU_LIST].unshift(hit) - this[CACHE].set(key, this[LRU_LIST].head) - trim(this) - return true - } - - has (key) { - if (!this[CACHE].has(key)) return false - const hit = this[CACHE].get(key).value - return !isStale(this, hit) - } - - get (key) { - return get(this, key, true) - } - - peek (key) { - return get(this, key, false) - } - - pop () { - const node = this[LRU_LIST].tail - if (!node) - return null - - del(this, node) - return node.value - } - - del (key) { - del(this, this[CACHE].get(key)) - } - - load (arr) { - // reset the cache - this.reset() - - const now = Date.now() - // A previous serialized cache has the most recent items first - for (let l = arr.length - 1; l >= 0; l--) { - const hit = arr[l] - const expiresAt = hit.e || 0 - if (expiresAt === 0) - // the item was created without expiration in a non aged cache - this.set(hit.k, hit.v) - else { - const maxAge = expiresAt - now - // dont add already expired items - if (maxAge > 0) { - this.set(hit.k, hit.v, maxAge) - } - } - } - } - - prune () { - this[CACHE].forEach((value, key) => get(this, key, false)) - } -} - -const get = (self, key, doUse) => { - const node = self[CACHE].get(key) - if (node) { - const hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - return undefined - } else { - if (doUse) { - if (self[UPDATE_AGE_ON_GET]) - node.value.now = Date.now() - self[LRU_LIST].unshiftNode(node) - } - } - return hit.value - } -} - -const isStale = (self, hit) => { - if (!hit || (!hit.maxAge && !self[MAX_AGE])) - return false - - const diff = Date.now() - hit.now - return hit.maxAge ? diff > hit.maxAge - : self[MAX_AGE] && (diff > self[MAX_AGE]) -} - -const trim = self => { - if (self[LENGTH] > self[MAX]) { - for (let walker = self[LRU_LIST].tail; - self[LENGTH] > self[MAX] && walker !== null;) { - // We know that we're about to delete this one, and also - // what the next least recently used key will be, so just - // go ahead and set it now. - const prev = walker.prev - del(self, walker) - walker = prev - } - } -} - -const del = (self, node) => { - if (node) { - const hit = node.value - if (self[DISPOSE]) - self[DISPOSE](hit.key, hit.value) - - self[LENGTH] -= hit.length - self[CACHE].delete(hit.key) - self[LRU_LIST].removeNode(node) - } -} - -class Entry { - constructor (key, value, length, now, maxAge) { - this.key = key - this.value = value - this.length = length - this.now = now - this.maxAge = maxAge || 0 - } -} - -const forEachStep = (self, fn, node, thisp) => { - let hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - hit = undefined - } - if (hit) - fn.call(thisp, hit.value, hit.key, self) -} - -module.exports = LRUCache - - -/***/ }), - -/***/ 1532: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const ANY = Symbol('SemVer ANY') -// hoisted class for cyclic dependency -class Comparator { - static get ANY () { - return ANY - } - constructor (comp, options) { - options = parseOptions(options) - - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp - } else { - comp = comp.value - } - } - - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) - - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } - - debug('comp', this) - } - - parse (comp) { - const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const m = comp.match(r) - - if (!m) { - throw new TypeError(`Invalid comparator: ${comp}`) - } - - this.operator = m[1] !== undefined ? m[1] : '' - if (this.operator === '=') { - this.operator = '' - } - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } - } - - toString () { - return this.value - } - - test (version) { - debug('Comparator.test', version, this.options.loose) - - if (this.semver === ANY || version === ANY) { - return true - } - - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } - - return cmp(version, this.operator, this.semver, this.options) - } - - intersects (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') - } - - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (this.operator === '') { - if (this.value === '') { - return true - } - return new Range(comp.value, options).test(this.value) - } else if (comp.operator === '') { - if (comp.value === '') { - return true - } - return new Range(this.value, options).test(comp.semver) - } - - const sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - const sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - const sameSemVer = this.semver.version === comp.semver.version - const differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - const oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<') - const oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>') - - return ( - sameDirectionIncreasing || - sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || - oppositeDirectionsGreaterThan - ) - } -} - -module.exports = Comparator - -const parseOptions = __nccwpck_require__(785) -const {re, t} = __nccwpck_require__(9523) -const cmp = __nccwpck_require__(5098) -const debug = __nccwpck_require__(427) -const SemVer = __nccwpck_require__(8088) -const Range = __nccwpck_require__(9828) - - -/***/ }), - -/***/ 9828: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -// hoisted class for cyclic dependency -class Range { - constructor (range, options) { - options = parseOptions(options) - - if (range instanceof Range) { - if ( - range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease - ) { - return range - } else { - return new Range(range.raw, options) - } - } - - if (range instanceof Comparator) { - // just put it in the set and return - this.raw = range.value - this.set = [[range]] - this.format() - return this - } - - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease - - // First, split based on boolean or || - this.raw = range - this.set = range - .split(/\s*\|\|\s*/) - // map the range to a 2d array of comparators - .map(range => this.parseRange(range.trim())) - // throw out any comparator lists that are empty - // this generally means that it was not a valid range, which is allowed - // in loose mode, but will still throw if the WHOLE range is invalid. - .filter(c => c.length) - - if (!this.set.length) { - throw new TypeError(`Invalid SemVer Range: ${range}`) - } - - // if we have any that are not the null set, throw out null sets. - if (this.set.length > 1) { - // keep the first one, in case they're all null sets - const first = this.set[0] - this.set = this.set.filter(c => !isNullSet(c[0])) - if (this.set.length === 0) - this.set = [first] - else if (this.set.length > 1) { - // if we have any that are *, then the range is just * - for (const c of this.set) { - if (c.length === 1 && isAny(c[0])) { - this.set = [c] - break - } - } - } - } - - this.format() - } - - format () { - this.range = this.set - .map((comps) => { - return comps.join(' ').trim() - }) - .join('||') - .trim() - return this.range - } - - toString () { - return this.range - } - - parseRange (range) { - range = range.trim() - - // memoize range parsing for performance. - // this is a very hot path, and fully deterministic. - const memoOpts = Object.keys(this.options).join(',') - const memoKey = `parseRange:${memoOpts}:${range}` - const cached = cache.get(memoKey) - if (cached) - return cached - - const loose = this.options.loose - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] - range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[t.COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[t.TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[t.CARETTRIM], caretTrimReplace) - - // normalize spaces - range = range.split(/\s+/).join(' ') - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const rangeList = range - .split(' ') - .map(comp => parseComparator(comp, this.options)) - .join(' ') - .split(/\s+/) - // >=0.0.0 is equivalent to * - .map(comp => replaceGTE0(comp, this.options)) - // in loose mode, throw out any that are not valid comparators - .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) - .map(comp => new Comparator(comp, this.options)) - - // if any comparators are the null set, then replace with JUST null set - // if more than one comparator, remove any * comparators - // also, don't include the same comparator more than once - const l = rangeList.length - const rangeMap = new Map() - for (const comp of rangeList) { - if (isNullSet(comp)) - return [comp] - rangeMap.set(comp.value, comp) - } - if (rangeMap.size > 1 && rangeMap.has('')) - rangeMap.delete('') - - const result = [...rangeMap.values()] - cache.set(memoKey, result) - return result - } - - intersects (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') - } - - return this.set.some((thisComparators) => { - return ( - isSatisfiable(thisComparators, options) && - range.set.some((rangeComparators) => { - return ( - isSatisfiable(rangeComparators, options) && - thisComparators.every((thisComparator) => { - return rangeComparators.every((rangeComparator) => { - return thisComparator.intersects(rangeComparator, options) - }) - }) - ) - }) - ) - }) - } - - // if ANY of the sets match ALL of its comparators, then pass - test (version) { - if (!version) { - return false - } - - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } - - for (let i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true - } - } - return false - } -} -module.exports = Range - -const LRU = __nccwpck_require__(7129) -const cache = new LRU({ max: 1000 }) - -const parseOptions = __nccwpck_require__(785) -const Comparator = __nccwpck_require__(1532) -const debug = __nccwpck_require__(427) -const SemVer = __nccwpck_require__(8088) -const { - re, - t, - comparatorTrimReplace, - tildeTrimReplace, - caretTrimReplace -} = __nccwpck_require__(9523) - -const isNullSet = c => c.value === '<0.0.0-0' -const isAny = c => c.value === '' - -// take a set of comparators and determine whether there -// exists a version which can satisfy it -const isSatisfiable = (comparators, options) => { - let result = true - const remainingComparators = comparators.slice() - let testComparator = remainingComparators.pop() - - while (result && remainingComparators.length) { - result = remainingComparators.every((otherComparator) => { - return testComparator.intersects(otherComparator, options) - }) - - testComparator = remainingComparators.pop() - } - - return result -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -const parseComparator = (comp, options) => { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp -} - -const isX = id => !id || id.toLowerCase() === 'x' || id === '*' - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 -const replaceTildes = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceTilde(comp, options) - }).join(' ') - -const replaceTilde = (comp, options) => { - const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] - return comp.replace(r, (_, M, m, p, pr) => { - debug('tilde', comp, _, M, m, p, pr) - let ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0` - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0-0 - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` - } else if (pr) { - debug('replaceTilde pr', pr) - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0-0` - } else { - // ~1.2.3 == >=1.2.3 <1.3.0-0 - ret = `>=${M}.${m}.${p - } <${M}.${+m + 1}.0-0` - } - - debug('tilde return', ret) - return ret - }) -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 -// ^1.2.3 --> >=1.2.3 <2.0.0-0 -// ^1.2.0 --> >=1.2.0 <2.0.0-0 -const replaceCarets = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceCaret(comp, options) - }).join(' ') - -const replaceCaret = (comp, options) => { - debug('caret', comp, options) - const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] - const z = options.includePrerelease ? '-0' : '' - return comp.replace(r, (_, M, m, p, pr) => { - debug('caret', comp, _, M, m, p, pr) - let ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` - } else if (isX(p)) { - if (M === '0') { - ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` - } else { - ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${m}.${+p + 1}-0` - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0-0` - } - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${+M + 1}.0.0-0` - } - } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p - }${z} <${M}.${m}.${+p + 1}-0` - } else { - ret = `>=${M}.${m}.${p - }${z} <${M}.${+m + 1}.0-0` - } - } else { - ret = `>=${M}.${m}.${p - } <${+M + 1}.0.0-0` - } - } - - debug('caret return', ret) - return ret - }) -} - -const replaceXRanges = (comp, options) => { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map((comp) => { - return replaceXRange(comp, options) - }).join(' ') -} - -const replaceXRange = (comp, options) => { - comp = comp.trim() - const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - const xM = isX(M) - const xm = xM || isX(m) - const xp = xm || isX(p) - const anyX = xp - - if (gtlt === '=' && anyX) { - gtlt = '' - } - - // if we're including prereleases in the match, then we need - // to fix this to -0, the lowest possible prerelease value - pr = options.includePrerelease ? '-0' : '' - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0-0' - } else { - // nothing is forbidden - ret = '*' - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 - } - p = 0 - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 - } else { - m = +m + 1 - } - } - - if (gtlt === '<') - pr = '-0' - - ret = `${gtlt + M}.${m}.${p}${pr}` - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` - } else if (xp) { - ret = `>=${M}.${m}.0${pr - } <${M}.${+m + 1}.0-0` - } - - debug('xRange return', ret) - - return ret - }) -} - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -const replaceStars = (comp, options) => { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[t.STAR], '') -} - -const replaceGTE0 = (comp, options) => { - debug('replaceGTE0', comp, options) - return comp.trim() - .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') -} - -// This function is passed to string.replace(re[t.HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 -const hyphenReplace = incPr => ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) => { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = `>=${fM}.0.0${incPr ? '-0' : ''}` - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` - } else if (fpr) { - from = `>=${from}` - } else { - from = `>=${from}${incPr ? '-0' : ''}` - } - - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0-0` - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0-0` - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}` - } else if (incPr) { - to = `<${tM}.${tm}.${+tp + 1}-0` - } else { - to = `<=${to}` - } - - return (`${from} ${to}`).trim() -} - -const testSet = (set, version, options) => { - for (let i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false - } - } - - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (let i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === Comparator.ANY) { - continue - } - - if (set[i].semver.prerelease.length > 0) { - const allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true - } - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false - } - - return true -} - - -/***/ }), - -/***/ 8088: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const debug = __nccwpck_require__(427) -const { MAX_LENGTH, MAX_SAFE_INTEGER } = __nccwpck_require__(2293) -const { re, t } = __nccwpck_require__(9523) - -const parseOptions = __nccwpck_require__(785) -const { compareIdentifiers } = __nccwpck_require__(2463) -class SemVer { - constructor (version, options) { - options = parseOptions(options) - - if (version instanceof SemVer) { - if (version.loose === !!options.loose && - version.includePrerelease === !!options.includePrerelease) { - return version - } else { - version = version.version - } - } else if (typeof version !== 'string') { - throw new TypeError(`Invalid Version: ${version}`) - } - - if (version.length > MAX_LENGTH) { - throw new TypeError( - `version is longer than ${MAX_LENGTH} characters` - ) - } - - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose - // this isn't actually relevant for versions, but keep it so that we - // don't run into trouble passing this.options around. - this.includePrerelease = !!options.includePrerelease - - const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) - - if (!m) { - throw new TypeError(`Invalid Version: ${version}`) - } - - this.raw = version - - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] - - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') - } - - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') - } - - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') - } - - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map((id) => { - if (/^[0-9]+$/.test(id)) { - const num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num - } - } - return id - }) - } - - this.build = m[5] ? m[5].split('.') : [] - this.format() - } - - format () { - this.version = `${this.major}.${this.minor}.${this.patch}` - if (this.prerelease.length) { - this.version += `-${this.prerelease.join('.')}` - } - return this.version - } - - toString () { - return this.version - } - - compare (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - if (typeof other === 'string' && other === this.version) { - return 0 - } - other = new SemVer(other, this.options) - } - - if (other.version === this.version) { - return 0 - } - - return this.compareMain(other) || this.comparePre(other) - } - - compareMain (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - return ( - compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) - ) - } - - comparePre (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } - - let i = 0 - do { - const a = this.prerelease[i] - const b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } - - compareBuild (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - let i = 0 - do { - const a = this.build[i] - const b = other.build[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } - - // preminor will bump the version up to the next minor release, and immediately - // down to pre-release. premajor and prepatch work the same way. - inc (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if ( - this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0 - ) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ - } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] - } else { - let i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] - } - } else { - this.prerelease = [identifier, 0] - } - } - break - - default: - throw new Error(`invalid increment argument: ${release}`) - } - this.format() - this.raw = this.version - return this - } -} - -module.exports = SemVer - - -/***/ }), - -/***/ 8848: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const parse = __nccwpck_require__(5925) -const clean = (version, options) => { - const s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null -} -module.exports = clean - - -/***/ }), - -/***/ 5098: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const eq = __nccwpck_require__(1898) -const neq = __nccwpck_require__(6017) -const gt = __nccwpck_require__(4123) -const gte = __nccwpck_require__(5522) -const lt = __nccwpck_require__(194) -const lte = __nccwpck_require__(7520) - -const cmp = (a, op, b, loose) => { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b - - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b - - case '': - case '=': - case '==': - return eq(a, b, loose) - - case '!=': - return neq(a, b, loose) - - case '>': - return gt(a, b, loose) - - case '>=': - return gte(a, b, loose) - - case '<': - return lt(a, b, loose) - - case '<=': - return lte(a, b, loose) - - default: - throw new TypeError(`Invalid operator: ${op}`) - } -} -module.exports = cmp - - -/***/ }), - -/***/ 3466: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const parse = __nccwpck_require__(5925) -const {re, t} = __nccwpck_require__(9523) - -const coerce = (version, options) => { - if (version instanceof SemVer) { - return version - } - - if (typeof version === 'number') { - version = String(version) - } - - if (typeof version !== 'string') { - return null - } - - options = options || {} - - let match = null - if (!options.rtl) { - match = version.match(re[t.COERCE]) - } else { - // Find the right-most coercible string that does not share - // a terminus with a more left-ward coercible string. - // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' - // - // Walk through the string checking with a /g regexp - // Manually set the index so as to pick up overlapping matches. - // Stop when we get a match that ends at the string end, since no - // coercible string can be more right-ward without the same terminus. - let next - while ((next = re[t.COERCERTL].exec(version)) && - (!match || match.index + match[0].length !== version.length) - ) { - if (!match || - next.index + next[0].length !== match.index + match[0].length) { - match = next - } - re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length - } - // leave it in a clean state - re[t.COERCERTL].lastIndex = -1 - } - - if (match === null) - return null - - return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) -} -module.exports = coerce - - -/***/ }), - -/***/ 2156: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const compareBuild = (a, b, loose) => { - const versionA = new SemVer(a, loose) - const versionB = new SemVer(b, loose) - return versionA.compare(versionB) || versionA.compareBuild(versionB) -} -module.exports = compareBuild - - -/***/ }), - -/***/ 2804: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compare = __nccwpck_require__(4309) -const compareLoose = (a, b) => compare(a, b, true) -module.exports = compareLoose - - -/***/ }), - -/***/ 4309: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const compare = (a, b, loose) => - new SemVer(a, loose).compare(new SemVer(b, loose)) - -module.exports = compare - - -/***/ }), - -/***/ 4297: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const parse = __nccwpck_require__(5925) -const eq = __nccwpck_require__(1898) - -const diff = (version1, version2) => { - if (eq(version1, version2)) { - return null - } else { - const v1 = parse(version1) - const v2 = parse(version2) - const hasPre = v1.prerelease.length || v2.prerelease.length - const prefix = hasPre ? 'pre' : '' - const defaultResult = hasPre ? 'prerelease' : '' - for (const key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key - } - } - } - return defaultResult // may be undefined - } -} -module.exports = diff - - -/***/ }), - -/***/ 1898: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compare = __nccwpck_require__(4309) -const eq = (a, b, loose) => compare(a, b, loose) === 0 -module.exports = eq - - -/***/ }), - -/***/ 4123: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compare = __nccwpck_require__(4309) -const gt = (a, b, loose) => compare(a, b, loose) > 0 -module.exports = gt - - -/***/ }), - -/***/ 5522: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compare = __nccwpck_require__(4309) -const gte = (a, b, loose) => compare(a, b, loose) >= 0 -module.exports = gte - - -/***/ }), - -/***/ 900: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) - -const inc = (version, release, options, identifier) => { - if (typeof (options) === 'string') { - identifier = options - options = undefined - } - - try { - return new SemVer(version, options).inc(release, identifier).version - } catch (er) { - return null - } -} -module.exports = inc - - -/***/ }), - -/***/ 194: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compare = __nccwpck_require__(4309) -const lt = (a, b, loose) => compare(a, b, loose) < 0 -module.exports = lt - - -/***/ }), - -/***/ 7520: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compare = __nccwpck_require__(4309) -const lte = (a, b, loose) => compare(a, b, loose) <= 0 -module.exports = lte - - -/***/ }), - -/***/ 6688: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const major = (a, loose) => new SemVer(a, loose).major -module.exports = major - - -/***/ }), - -/***/ 8447: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const minor = (a, loose) => new SemVer(a, loose).minor -module.exports = minor - - -/***/ }), - -/***/ 6017: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compare = __nccwpck_require__(4309) -const neq = (a, b, loose) => compare(a, b, loose) !== 0 -module.exports = neq - - -/***/ }), - -/***/ 5925: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const {MAX_LENGTH} = __nccwpck_require__(2293) -const { re, t } = __nccwpck_require__(9523) -const SemVer = __nccwpck_require__(8088) - -const parseOptions = __nccwpck_require__(785) -const parse = (version, options) => { - options = parseOptions(options) - - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - if (version.length > MAX_LENGTH) { - return null - } - - const r = options.loose ? re[t.LOOSE] : re[t.FULL] - if (!r.test(version)) { - return null - } - - try { - return new SemVer(version, options) - } catch (er) { - return null - } -} - -module.exports = parse - - -/***/ }), - -/***/ 2866: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const patch = (a, loose) => new SemVer(a, loose).patch -module.exports = patch - - -/***/ }), - -/***/ 4016: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const parse = __nccwpck_require__(5925) -const prerelease = (version, options) => { - const parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null -} -module.exports = prerelease - - -/***/ }), - -/***/ 6417: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compare = __nccwpck_require__(4309) -const rcompare = (a, b, loose) => compare(b, a, loose) -module.exports = rcompare - - -/***/ }), - -/***/ 8701: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compareBuild = __nccwpck_require__(2156) -const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) -module.exports = rsort - - -/***/ }), - -/***/ 6055: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const Range = __nccwpck_require__(9828) -const satisfies = (version, range, options) => { - try { - range = new Range(range, options) - } catch (er) { - return false - } - return range.test(version) -} -module.exports = satisfies - - -/***/ }), - -/***/ 1426: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const compareBuild = __nccwpck_require__(2156) -const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) -module.exports = sort - - -/***/ }), - -/***/ 9601: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const parse = __nccwpck_require__(5925) -const valid = (version, options) => { - const v = parse(version, options) - return v ? v.version : null -} -module.exports = valid - - -/***/ }), - -/***/ 1383: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -// just pre-load all the stuff that index.js lazily exports -const internalRe = __nccwpck_require__(9523) -module.exports = { - re: internalRe.re, - src: internalRe.src, - tokens: internalRe.t, - SEMVER_SPEC_VERSION: __nccwpck_require__(2293).SEMVER_SPEC_VERSION, - SemVer: __nccwpck_require__(8088), - compareIdentifiers: __nccwpck_require__(2463).compareIdentifiers, - rcompareIdentifiers: __nccwpck_require__(2463).rcompareIdentifiers, - parse: __nccwpck_require__(5925), - valid: __nccwpck_require__(9601), - clean: __nccwpck_require__(8848), - inc: __nccwpck_require__(900), - diff: __nccwpck_require__(4297), - major: __nccwpck_require__(6688), - minor: __nccwpck_require__(8447), - patch: __nccwpck_require__(2866), - prerelease: __nccwpck_require__(4016), - compare: __nccwpck_require__(4309), - rcompare: __nccwpck_require__(6417), - compareLoose: __nccwpck_require__(2804), - compareBuild: __nccwpck_require__(2156), - sort: __nccwpck_require__(1426), - rsort: __nccwpck_require__(8701), - gt: __nccwpck_require__(4123), - lt: __nccwpck_require__(194), - eq: __nccwpck_require__(1898), - neq: __nccwpck_require__(6017), - gte: __nccwpck_require__(5522), - lte: __nccwpck_require__(7520), - cmp: __nccwpck_require__(5098), - coerce: __nccwpck_require__(3466), - Comparator: __nccwpck_require__(1532), - Range: __nccwpck_require__(9828), - satisfies: __nccwpck_require__(6055), - toComparators: __nccwpck_require__(2706), - maxSatisfying: __nccwpck_require__(579), - minSatisfying: __nccwpck_require__(832), - minVersion: __nccwpck_require__(4179), - validRange: __nccwpck_require__(2098), - outside: __nccwpck_require__(420), - gtr: __nccwpck_require__(9380), - ltr: __nccwpck_require__(3323), - intersects: __nccwpck_require__(7008), - simplifyRange: __nccwpck_require__(5297), - subset: __nccwpck_require__(7863), -} - - -/***/ }), - -/***/ 2293: -/***/ ((module) => { - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -const SEMVER_SPEC_VERSION = '2.0.0' - -const MAX_LENGTH = 256 -const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 - -// Max safe segment length for coercion. -const MAX_SAFE_COMPONENT_LENGTH = 16 - -module.exports = { - SEMVER_SPEC_VERSION, - MAX_LENGTH, - MAX_SAFE_INTEGER, - MAX_SAFE_COMPONENT_LENGTH -} - - -/***/ }), - -/***/ 427: -/***/ ((module) => { - -const debug = ( - typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG) -) ? (...args) => console.error('SEMVER', ...args) - : () => {} - -module.exports = debug - - -/***/ }), - -/***/ 2463: -/***/ ((module) => { - -const numeric = /^[0-9]+$/ -const compareIdentifiers = (a, b) => { - const anum = numeric.test(a) - const bnum = numeric.test(b) - - if (anum && bnum) { - a = +a - b = +b - } - - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 -} - -const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) - -module.exports = { - compareIdentifiers, - rcompareIdentifiers -} - - -/***/ }), - -/***/ 785: -/***/ ((module) => { - -// parse out just the options we care about so we always get a consistent -// obj with keys in a consistent order. -const opts = ['includePrerelease', 'loose', 'rtl'] -const parseOptions = options => - !options ? {} - : typeof options !== 'object' ? { loose: true } - : opts.filter(k => options[k]).reduce((options, k) => { - options[k] = true - return options - }, {}) -module.exports = parseOptions - - -/***/ }), - -/***/ 9523: -/***/ ((module, exports, __nccwpck_require__) => { - -const { MAX_SAFE_COMPONENT_LENGTH } = __nccwpck_require__(2293) -const debug = __nccwpck_require__(427) -exports = module.exports = {} - -// The actual regexps go on exports.re -const re = exports.re = [] -const src = exports.src = [] -const t = exports.t = {} -let R = 0 - -const createToken = (name, value, isGlobal) => { - const index = R++ - debug(index, value) - t[name] = index - src[index] = value - re[index] = new RegExp(value, isGlobal ? 'g' : undefined) -} - -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. - -createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') -createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') - -// ## Main Version -// Three dot-separated numeric identifiers. - -createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})`) - -createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})`) - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] -}|${src[t.NONNUMERICIDENTIFIER]})`) - -createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] -}|${src[t.NONNUMERICIDENTIFIER]})`) - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] -}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) - -createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] -}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] -}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) - -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. - -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. - -createToken('FULLPLAIN', `v?${src[t.MAINVERSION] -}${src[t.PRERELEASE]}?${ - src[t.BUILD]}?`) - -createToken('FULL', `^${src[t.FULLPLAIN]}$`) - -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] -}${src[t.PRERELEASELOOSE]}?${ - src[t.BUILD]}?`) - -createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) - -createToken('GTLT', '((?:<|>)?=?)') - -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) -createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) - -createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:${src[t.PRERELEASE]})?${ - src[t.BUILD]}?` + - `)?)?`) - -createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:${src[t.PRERELEASELOOSE]})?${ - src[t.BUILD]}?` + - `)?)?`) - -createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) -createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) - -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -createToken('COERCE', `${'(^|[^\\d])' + - '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:$|[^\\d])`) -createToken('COERCERTL', src[t.COERCE], true) - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -createToken('LONETILDE', '(?:~>?)') - -createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) -exports.tildeTrimReplace = '$1~' - -createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) -createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -createToken('LONECARET', '(?:\\^)') - -createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) -exports.caretTrimReplace = '$1^' - -createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) -createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) -createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] -}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) -exports.comparatorTrimReplace = '$1$2$3' - -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAIN]})` + - `\\s*$`) - -createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAINLOOSE]})` + - `\\s*$`) - -// Star ranges basically just allow anything at all. -createToken('STAR', '(<|>)?=?\\s*\\*') -// >=0.0.0 is like a star -createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') -createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') - - -/***/ }), - -/***/ 9380: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -// Determine if version is greater than all the versions possible in the range. -const outside = __nccwpck_require__(420) -const gtr = (version, range, options) => outside(version, range, '>', options) -module.exports = gtr - - -/***/ }), - -/***/ 7008: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const Range = __nccwpck_require__(9828) -const intersects = (r1, r2, options) => { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) -} -module.exports = intersects - - -/***/ }), - -/***/ 3323: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const outside = __nccwpck_require__(420) -// Determine if version is less than all the versions possible in the range -const ltr = (version, range, options) => outside(version, range, '<', options) -module.exports = ltr - - -/***/ }), - -/***/ 579: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const Range = __nccwpck_require__(9828) - -const maxSatisfying = (versions, range, options) => { - let max = null - let maxSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } - } - }) - return max -} -module.exports = maxSatisfying - - -/***/ }), - -/***/ 832: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const Range = __nccwpck_require__(9828) -const minSatisfying = (versions, range, options) => { - let min = null - let minSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) - } - } - }) - return min -} -module.exports = minSatisfying - - -/***/ }), - -/***/ 4179: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const Range = __nccwpck_require__(9828) -const gt = __nccwpck_require__(4123) - -const minVersion = (range, loose) => { - range = new Range(range, loose) - - let minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver - } - - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver - } - - minver = null - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] - - let setMin = null - comparators.forEach((comparator) => { - // Clone to avoid manipulating the comparator's semver object. - const compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!setMin || gt(compver, setMin)) { - setMin = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error(`Unexpected operation: ${comparator.operator}`) - } - }) - if (setMin && (!minver || gt(minver, setMin))) - minver = setMin - } - - if (minver && range.test(minver)) { - return minver - } - - return null -} -module.exports = minVersion - - -/***/ }), - -/***/ 420: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const SemVer = __nccwpck_require__(8088) -const Comparator = __nccwpck_require__(1532) -const {ANY} = Comparator -const Range = __nccwpck_require__(9828) -const satisfies = __nccwpck_require__(6055) -const gt = __nccwpck_require__(4123) -const lt = __nccwpck_require__(194) -const lte = __nccwpck_require__(7520) -const gte = __nccwpck_require__(5522) - -const outside = (version, range, hilo, options) => { - version = new SemVer(version, options) - range = new Range(range, options) - - let gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } - - // If it satisfies the range it is not outside - if (satisfies(version, range, options)) { - return false - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] - - let high = null - let low = null - - comparators.forEach((comparator) => { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false - } - } - return true -} - -module.exports = outside - - -/***/ }), - -/***/ 5297: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -// given a set of versions and a range, create a "simplified" range -// that includes the same versions that the original range does -// If the original range is shorter than the simplified one, return that. -const satisfies = __nccwpck_require__(6055) -const compare = __nccwpck_require__(4309) -module.exports = (versions, range, options) => { - const set = [] - let min = null - let prev = null - const v = versions.sort((a, b) => compare(a, b, options)) - for (const version of v) { - const included = satisfies(version, range, options) - if (included) { - prev = version - if (!min) - min = version - } else { - if (prev) { - set.push([min, prev]) - } - prev = null - min = null - } - } - if (min) - set.push([min, null]) - - const ranges = [] - for (const [min, max] of set) { - if (min === max) - ranges.push(min) - else if (!max && min === v[0]) - ranges.push('*') - else if (!max) - ranges.push(`>=${min}`) - else if (min === v[0]) - ranges.push(`<=${max}`) - else - ranges.push(`${min} - ${max}`) - } - const simplified = ranges.join(' || ') - const original = typeof range.raw === 'string' ? range.raw : String(range) - return simplified.length < original.length ? simplified : range -} - - -/***/ }), - -/***/ 7863: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const Range = __nccwpck_require__(9828) -const { ANY } = __nccwpck_require__(1532) -const satisfies = __nccwpck_require__(6055) -const compare = __nccwpck_require__(4309) - -// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: -// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...` -// -// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: -// - If c is only the ANY comparator -// - If C is only the ANY comparator, return true -// - Else return false -// - Let EQ be the set of = comparators in c -// - If EQ is more than one, return true (null set) -// - Let GT be the highest > or >= comparator in c -// - Let LT be the lowest < or <= comparator in c -// - If GT and LT, and GT.semver > LT.semver, return true (null set) -// - If EQ -// - If GT, and EQ does not satisfy GT, return true (null set) -// - If LT, and EQ does not satisfy LT, return true (null set) -// - If EQ satisfies every C, return true -// - Else return false -// - If GT -// - If GT.semver is lower than any > or >= comp in C, return false -// - If GT is >=, and GT.semver does not satisfy every C, return false -// - If LT -// - If LT.semver is greater than any < or <= comp in C, return false -// - If LT is <=, and LT.semver does not satisfy every C, return false -// - If any C is a = range, and GT or LT are set, return false -// - Else return true - -const subset = (sub, dom, options) => { - if (sub === dom) - return true - - sub = new Range(sub, options) - dom = new Range(dom, options) - let sawNonNull = false - - OUTER: for (const simpleSub of sub.set) { - for (const simpleDom of dom.set) { - const isSub = simpleSubset(simpleSub, simpleDom, options) - sawNonNull = sawNonNull || isSub !== null - if (isSub) - continue OUTER - } - // the null set is a subset of everything, but null simple ranges in - // a complex range should be ignored. so if we saw a non-null range, - // then we know this isn't a subset, but if EVERY simple range was null, - // then it is a subset. - if (sawNonNull) - return false - } - return true -} - -const simpleSubset = (sub, dom, options) => { - if (sub === dom) - return true - - if (sub.length === 1 && sub[0].semver === ANY) - return dom.length === 1 && dom[0].semver === ANY - - const eqSet = new Set() - let gt, lt - for (const c of sub) { - if (c.operator === '>' || c.operator === '>=') - gt = higherGT(gt, c, options) - else if (c.operator === '<' || c.operator === '<=') - lt = lowerLT(lt, c, options) - else - eqSet.add(c.semver) - } - - if (eqSet.size > 1) - return null - - let gtltComp - if (gt && lt) { - gtltComp = compare(gt.semver, lt.semver, options) - if (gtltComp > 0) - return null - else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) - return null - } - - // will iterate one or zero times - for (const eq of eqSet) { - if (gt && !satisfies(eq, String(gt), options)) - return null - - if (lt && !satisfies(eq, String(lt), options)) - return null - - for (const c of dom) { - if (!satisfies(eq, String(c), options)) - return false - } - - return true - } - - let higher, lower - let hasDomLT, hasDomGT - for (const c of dom) { - hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' - hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' - if (gt) { - if (c.operator === '>' || c.operator === '>=') { - higher = higherGT(gt, c, options) - if (higher === c && higher !== gt) - return false - } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) - return false - } - if (lt) { - if (c.operator === '<' || c.operator === '<=') { - lower = lowerLT(lt, c, options) - if (lower === c && lower !== lt) - return false - } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) - return false - } - if (!c.operator && (lt || gt) && gtltComp !== 0) - return false - } - - // if there was a < or >, and nothing in the dom, then must be false - // UNLESS it was limited by another range in the other direction. - // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 - if (gt && hasDomLT && !lt && gtltComp !== 0) - return false - - if (lt && hasDomGT && !gt && gtltComp !== 0) - return false - - return true -} - -// >=1.2.3 is lower than >1.2.3 -const higherGT = (a, b, options) => { - if (!a) - return b - const comp = compare(a.semver, b.semver, options) - return comp > 0 ? a - : comp < 0 ? b - : b.operator === '>' && a.operator === '>=' ? b - : a -} - -// <=1.2.3 is higher than <1.2.3 -const lowerLT = (a, b, options) => { - if (!a) - return b - const comp = compare(a.semver, b.semver, options) - return comp < 0 ? a - : comp > 0 ? b - : b.operator === '<' && a.operator === '<=' ? b - : a -} - -module.exports = subset - - -/***/ }), - -/***/ 2706: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const Range = __nccwpck_require__(9828) - -// Mostly just for testing and legacy API reasons -const toComparators = (range, options) => - new Range(range, options).set - .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) - -module.exports = toComparators - - -/***/ }), - -/***/ 2098: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const Range = __nccwpck_require__(9828) -const validRange = (range, options) => { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null - } -} -module.exports = validRange - - -/***/ }), - -/***/ 4091: -/***/ ((module) => { - -"use strict"; - -module.exports = function (Yallist) { - Yallist.prototype[Symbol.iterator] = function* () { - for (let walker = this.head; walker; walker = walker.next) { - yield walker.value - } - } -} - - -/***/ }), - -/***/ 665: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -"use strict"; - -module.exports = Yallist - -Yallist.Node = Node -Yallist.create = Yallist - -function Yallist (list) { - var self = this - if (!(self instanceof Yallist)) { - self = new Yallist() - } - - self.tail = null - self.head = null - self.length = 0 - - if (list && typeof list.forEach === 'function') { - list.forEach(function (item) { - self.push(item) - }) - } else if (arguments.length > 0) { - for (var i = 0, l = arguments.length; i < l; i++) { - self.push(arguments[i]) - } - } - - return self -} - -Yallist.prototype.removeNode = function (node) { - if (node.list !== this) { - throw new Error('removing node which does not belong to this list') - } - - var next = node.next - var prev = node.prev - - if (next) { - next.prev = prev - } - - if (prev) { - prev.next = next - } - - if (node === this.head) { - this.head = next - } - if (node === this.tail) { - this.tail = prev - } - - node.list.length-- - node.next = null - node.prev = null - node.list = null - - return next -} - -Yallist.prototype.unshiftNode = function (node) { - if (node === this.head) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - - var head = this.head - node.list = this - node.next = head - if (head) { - head.prev = node - } - - this.head = node - if (!this.tail) { - this.tail = node - } - this.length++ -} - -Yallist.prototype.pushNode = function (node) { - if (node === this.tail) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - - var tail = this.tail - node.list = this - node.prev = tail - if (tail) { - tail.next = node - } - - this.tail = node - if (!this.head) { - this.head = node - } - this.length++ -} - -Yallist.prototype.push = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - push(this, arguments[i]) - } - return this.length -} - -Yallist.prototype.unshift = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - unshift(this, arguments[i]) - } - return this.length -} - -Yallist.prototype.pop = function () { - if (!this.tail) { - return undefined - } - - var res = this.tail.value - this.tail = this.tail.prev - if (this.tail) { - this.tail.next = null - } else { - this.head = null - } - this.length-- - return res -} - -Yallist.prototype.shift = function () { - if (!this.head) { - return undefined - } - - var res = this.head.value - this.head = this.head.next - if (this.head) { - this.head.prev = null - } else { - this.tail = null - } - this.length-- - return res -} - -Yallist.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.head, i = 0; walker !== null; i++) { - fn.call(thisp, walker.value, i, this) - walker = walker.next - } -} - -Yallist.prototype.forEachReverse = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { - fn.call(thisp, walker.value, i, this) - walker = walker.prev - } -} - -Yallist.prototype.get = function (n) { - for (var i = 0, walker = this.head; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.next - } - if (i === n && walker !== null) { - return walker.value - } -} - -Yallist.prototype.getReverse = function (n) { - for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.prev - } - if (i === n && walker !== null) { - return walker.value - } -} - -Yallist.prototype.map = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.head; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.next - } - return res -} - -Yallist.prototype.mapReverse = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.tail; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.prev - } - return res -} - -Yallist.prototype.reduce = function (fn, initial) { - var acc - var walker = this.head - if (arguments.length > 1) { - acc = initial - } else if (this.head) { - walker = this.head.next - acc = this.head.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } - - for (var i = 0; walker !== null; i++) { - acc = fn(acc, walker.value, i) - walker = walker.next - } - - return acc -} - -Yallist.prototype.reduceReverse = function (fn, initial) { - var acc - var walker = this.tail - if (arguments.length > 1) { - acc = initial - } else if (this.tail) { - walker = this.tail.prev - acc = this.tail.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } - - for (var i = this.length - 1; walker !== null; i--) { - acc = fn(acc, walker.value, i) - walker = walker.prev - } - - return acc -} - -Yallist.prototype.toArray = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.head; walker !== null; i++) { - arr[i] = walker.value - walker = walker.next - } - return arr -} - -Yallist.prototype.toArrayReverse = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.tail; walker !== null; i++) { - arr[i] = walker.value - walker = walker.prev - } - return arr -} - -Yallist.prototype.slice = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = 0, walker = this.head; walker !== null && i < from; i++) { - walker = walker.next - } - for (; walker !== null && i < to; i++, walker = walker.next) { - ret.push(walker.value) - } - return ret -} - -Yallist.prototype.sliceReverse = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { - walker = walker.prev - } - for (; walker !== null && i > from; i--, walker = walker.prev) { - ret.push(walker.value) - } - return ret -} - -Yallist.prototype.splice = function (start, deleteCount, ...nodes) { - if (start > this.length) { - start = this.length - 1 - } - if (start < 0) { - start = this.length + start; - } - - for (var i = 0, walker = this.head; walker !== null && i < start; i++) { - walker = walker.next - } - - var ret = [] - for (var i = 0; walker && i < deleteCount; i++) { - ret.push(walker.value) - walker = this.removeNode(walker) - } - if (walker === null) { - walker = this.tail - } - - if (walker !== this.head && walker !== this.tail) { - walker = walker.prev - } - - for (var i = 0; i < nodes.length; i++) { - walker = insert(this, walker, nodes[i]) - } - return ret; -} - -Yallist.prototype.reverse = function () { - var head = this.head - var tail = this.tail - for (var walker = head; walker !== null; walker = walker.prev) { - var p = walker.prev - walker.prev = walker.next - walker.next = p - } - this.head = tail - this.tail = head - return this -} - -function insert (self, node, value) { - var inserted = node === self.head ? - new Node(value, null, node, self) : - new Node(value, node, node.next, self) - - if (inserted.next === null) { - self.tail = inserted - } - if (inserted.prev === null) { - self.head = inserted - } - - self.length++ - - return inserted -} - -function push (self, item) { - self.tail = new Node(item, self.tail, null, self) - if (!self.head) { - self.head = self.tail - } - self.length++ -} - -function unshift (self, item) { - self.head = new Node(item, null, self.head, self) - if (!self.tail) { - self.tail = self.head - } - self.length++ -} - -function Node (value, prev, next, list) { - if (!(this instanceof Node)) { - return new Node(value, prev, next, list) - } - - this.list = list - this.value = value - - if (prev) { - prev.next = this - this.prev = prev - } else { - this.prev = null - } - - if (next) { - next.prev = this - this.next = next - } else { - this.next = null - } -} - -try { - // add if support for Symbol.iterator is present - __nccwpck_require__(4091)(Yallist) -} catch (er) {} - - -/***/ }), - -/***/ 2127: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const {exec} = __nccwpck_require__(1514) -const path = __nccwpck_require__(5622) - -/** - * Install Erlang/OTP. - * - * @param {string} osVersion - * @param {string} version - */ -async function installOTP(osVersion, version) { - checkPlatform() - await exec(__nccwpck_require__.ab + "install-otp1", [osVersion, version]) -} - -/** - * Install Elixir. - * - * @param {string} version - * @param {string} otpMajor - */ -async function installElixir(version, otpMajor) { - checkPlatform() - const otpString = otpMajor ? `-otp-${otpMajor}` : '' - await exec(__nccwpck_require__.ab + "install-elixir1", [version, otpString]) -} - -/** - * Install rebar3. - * - * @param {string} version - */ -async function installRebar3(version) { - checkPlatform() - await exec(__nccwpck_require__.ab + "install-rebar31", [version]) -} - -function checkPlatform() { - if (process.platform !== 'linux' && - (process.env.CI_TEST_ENV !== 'test' && process.platform !== 'darwin')) { - throw new Error('@erlef/setup-elixir only supports Ubuntu Linux at this time') - } -} - -module.exports = { - installOTP: installOTP, - installElixir: installElixir, - installRebar3: installRebar3, - checkPlatform: checkPlatform, -} - - -/***/ }), - -/***/ 8203: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - -const core = __nccwpck_require__(2186) -const {exec} = __nccwpck_require__(1514) -const installer = __nccwpck_require__(2127) -const path = __nccwpck_require__(5622) -const semver = __nccwpck_require__(1383) -const https = __nccwpck_require__(7211) -const { - _fstat, - promises: {readFile}, -} = __nccwpck_require__(5747) - -main().catch((err) => { - core.setFailed(err.message) -}) - -async function main() { - installer.checkPlatform() - - installOTP() - .then((otpVersion) => { - const elixirSpec = getElixirSpecFromInput() - if (elixirSpec) { - installElixir(elixirSpec, otpVersion) - .then(() => { - mixRebarAndHex() - }) - } - - const rebar3Spec = getRebar3SpecFromInput() - if (rebar3Spec) { - installRebar3(rebar3Spec) - } - }) -} - -async function installOTP() { - const osVersion = getRunnerOSVersion() - const otpSpec = getOTPSpecFromInput() - const otpVersion = await getOTPVersion(otpSpec, osVersion) - console.log(`##[group]Installing Erlang/OTP ${otpVersion} over ${osVersion}`) - await installer.installOTP(osVersion, otpVersion) - console.log(`##[endgroup]`) - core.setOutput('otp-version', otpVersion) - return otpVersion -} - -async function installElixir(elixirSpec, otpVersion) { - const [elixirVersion, otpMajor] = await getElixirVersion( - elixirSpec, - otpVersion, - ) - console.log(`##[group]Installing Elixir ${elixirVersion}`) - await installer.installElixir(elixirVersion, otpMajor) - console.log(`##[endgroup]`) - core.setOutput('elixir-version', elixirVersion) - const matchersPath = __nccwpck_require__.ab + ".github1" - console.log(`##[add-matcher]${path.join(matchersPath, 'elixir.json')}`) -} - -async function mixRebarAndHex() { - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/otp/bin` - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/elixir/bin` - - let installRebar = core.getInput('install-rebar') - installRebar = installRebar == null ? 'true' : installRebar - installRebar && await exec('mix local.rebar --force') - - let installHex = core.getInput('install-hex') - installHex = installHex == null ? 'true' : installHex - installHex && await exec('mix local.hex --force') -} - -async function installRebar3(rebar3Spec) { - const rebar3Version = await getRebar3Version(rebar3Spec) - console.log(`##[group]Installing rebar3 ${rebar3Version}`) - await installer.installRebar3(rebar3Version) - console.log(`##[endgroup]`) - core.setOutput('rebar3-version', rebar3Version) - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/rebar3/bin` -} - -function getOTPSpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_OTP_VSN; - } else { - return core.getInput('otp-version', {required: true}) - } -} - -function getElixirSpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_ELIXIR_VSN; - } else { - return core.getInput('elixir-version', {required: false}); - } -} - -function getRebar3SpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_REBAR3_VSN; - } else { - return core.getInput('rebar3-version', {required: false}); - } -} - -async function getOTPVersion(spec, osVersion) { - const version = getVersionFromSpec(spec, await getOTPVersions(osVersion)) - return version ? `OTP-${version}` : spec -} - -function getRunnerOSVersion() { - const mapToUbuntuVersion = { - ubuntu16: 'ubuntu-16.04', - ubuntu18: 'ubuntu-18.04', - ubuntu20: 'ubuntu-20.04', - } - - return mapToUbuntuVersion[process.env.ImageOS] || 'ubuntu-18.04' -} - -async function getElixirVersion(spec, otpVersion) { - const versions = await getElixirVersions() - const semverRegex = /^v(\d+\.\d+\.\d+(?:-.+)?)/ - - const semverVersions = Array.from(versions.keys()) - .filter((str) => str.match(semverRegex)) - .map((str) => str.match(semverRegex)[1]) - - const version = getVersionFromSpec(spec, semverVersions) - const gitRef = version ? `v${version}` : spec - const otpMatch = otpVersion.match(/^OTP-([\.\d]+)/) - - if (otpMatch && versions.get(gitRef).includes(otpMatch[1])) { - return [gitRef, otpMatch[1]] - } else { - return [gitRef, null] - } -} - -function getVersionFromSpec(spec, versions) { - if (versions.includes(spec)) { - return spec - } else { - const range = semver.validRange(spec) - return semver.maxSatisfying(versions, range) - } -} - -async function getOTPVersions(osVersion) { - const result = await get(`https://repo.hex.pm/builds/otp/${osVersion}/builds.txt`, - 'otp_builds.txt') - - return result - .trim() - .split('\n') - .map((line) => { - const match = line.match(/^OTP-([\.\d]+)/) - - if (match) { - const [_, version] = match - return version - } else { - return line - } - }) -} - -async function getRebar3Versions() { - const resultJSON = await get('https://api.github.com/repos/erlang/rebar3/tags') - const result = JSON.parse(resultJSON).map((x) => x.name).sort() - - return result - .map((line) => { - const match = line.match(/^([\.\d]+)/) - - if (match) { - const [_, version] = match - return version - } else { - return line - } - }) -} - -async function getElixirVersions() { - const result = await get('https://repo.hex.pm/builds/elixir/builds.txt', - 'elixir_builds.txt') - const map = new Map() - - result - .trim() - .split('\n') - .forEach((line) => { - const match = - line.match(/^(v\d+\.\d+\.\d+(?:-.+)?)-otp-(\d+)/) || - line.match(/^([^-]+)-otp-(\d+)/) - - if (match) { - const [_, version, otp] = match - const array = map.get(version) || [] - array.push(otp) - map.set(version, array) - } - }) - - return map -} - -async function getRebar3Version(spec) { - return getVersionFromSpec(spec, await getRebar3Versions()) -} - -function get(url, testFile) { - if (process.env.CI_TEST_ENV === 'test' && testFile) { - return readFile(__nccwpck_require__.ab + "__tests__1/" + testFile) - .then((buf) => buf.toString()) - } - - return new Promise((resolve, reject) => { - const req = https.get(url, {headers: {'user-agent': 'setup-elixir'}}) - - req.on('response', (res) => { - let data = '' - res.on('data', (chunk) => { - data += chunk - }) - res.on('end', () => { - resolve(data) - }) - }) - - req.on('error', (err) => { - reject(err) - }) - }) -} - -module.exports = { - getOTPVersion: getOTPVersion, - getElixirVersion: getElixirVersion, - getRebar3Version: getRebar3Version, -} - - -/***/ }), - -/***/ 2357: -/***/ ((module) => { - -"use strict"; -module.exports = require("assert");; - -/***/ }), - -/***/ 3129: -/***/ ((module) => { - -"use strict"; -module.exports = require("child_process");; - -/***/ }), - -/***/ 8614: -/***/ ((module) => { - -"use strict"; -module.exports = require("events");; - -/***/ }), - -/***/ 5747: -/***/ ((module) => { - -"use strict"; -module.exports = require("fs");; - -/***/ }), - -/***/ 7211: -/***/ ((module) => { - -"use strict"; -module.exports = require("https");; - -/***/ }), - -/***/ 2087: -/***/ ((module) => { - -"use strict"; -module.exports = require("os");; - -/***/ }), - -/***/ 5622: -/***/ ((module) => { - -"use strict"; -module.exports = require("path");; - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __nccwpck_require__(moduleId) { -/******/ // Check if module is in cache -/******/ if(__webpack_module_cache__[moduleId]) { -/******/ return __webpack_module_cache__[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ var threw = true; -/******/ try { -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__); -/******/ threw = false; -/******/ } finally { -/******/ if(threw) delete __webpack_module_cache__[moduleId]; -/******/ } -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/compat */ -/******/ -/******/ __nccwpck_require__.ab = __dirname + "/";/************************************************************************/ -/******/ // module exports must be returned from runtime so entry inlining is disabled -/******/ // startup -/******/ // Load entry module and return exports -/******/ return __nccwpck_require__(340); -/******/ })() -; \ No newline at end of file diff --git a/dist/__tests__1/elixir_builds.txt b/dist/__tests__1/elixir_builds.txt deleted file mode 100644 index 3c118d0d..00000000 --- a/dist/__tests__1/elixir_builds.txt +++ /dev/null @@ -1,313 +0,0 @@ -master d25b61db13d94ee83374748581c7bcb8e2dfc0e6 2020-09-16T06:12:57Z a8ca8155a9b4b6ec1d60454f9032a29d4b95afa782984e3ed783c5f242541090 -master-otp-21 d25b61db13d94ee83374748581c7bcb8e2dfc0e6 2020-09-16T06:12:48Z a8ca8155a9b4b6ec1d60454f9032a29d4b95afa782984e3ed783c5f242541090 -master-otp-22 d25b61db13d94ee83374748581c7bcb8e2dfc0e6 2020-09-16T06:11:25Z 917d5856e50670c8670e60fcbaddd74aa207e7cb60a91fe5f7d62959db1161de -master-otp-23 d25b61db13d94ee83374748581c7bcb8e2dfc0e6 2020-09-16T06:09:48Z 80af5358209cdc3c8321c3852e962957fd3e63a22b1da13f56a3f1571ecb1e7e -v0.12.4 543dfdeac80cfaf3483927c189cf9974f1e361eb 2016-06-02T12:43:53Z -v0.12.5 b07fbcf8b73e9353cc336107050a8aac5fdabd11 2016-06-02T12:42:56Z -v0.13.0 ada53524caa6ea27ffaa1a373f5c86bd6cadb0d5 2016-06-02T12:42:00Z -v0.13.1 c03d42b0ccf38b31dcaef0cb7e9ea8851cb39907 2016-06-02T12:41:00Z -v0.13.2 7a24767137c596a84014a0ed1a8dde64e45f9666 2016-06-02T12:40:00Z -v0.13.3 3c48099718cd718d25527875a407cc842cf72565 2016-06-02T12:39:01Z -v0.14.0 9cff61493e9e3626e8d243dfe8aec07230a7fe73 2016-06-02T12:38:04Z -v0.14.1 22f3a50ebabfefd36be1a8472c8b78257df6affa 2016-03-07T22:22:53Z -v0.14.2 44b04120425c83984c867ee6b06974b7c139ba52 2016-03-07T22:22:53Z -v0.14.3 82535feb90ba1a27ad12b9389d86b11b8311a618 2016-06-02T12:36:35Z -v0.15.0 2f2a52a64874a0a5b6d5c1fab812a80e94d982bc 2016-06-02T12:35:36Z -v0.15.1 a54d9212b89da61ec0dd4227ed24e59f37738fe5 2016-06-02T12:34:37Z -v1.0 9033b217d9721c86d1e73ccd91ceb7c6716124d9 2020-03-25T22:13:41Z 0fccc644156e18ff02c8fe0fa6d3b5ee085b05ecc956ae93151ea938d2d0297b -v1.0-otp-17 9033b217d9721c86d1e73ccd91ceb7c6716124d9 2020-03-25T22:13:35Z 0fccc644156e18ff02c8fe0fa6d3b5ee085b05ecc956ae93151ea938d2d0297b -v1.0-otp-18 9033b217d9721c86d1e73ccd91ceb7c6716124d9 2020-03-25T22:12:48Z a3d53f5001261eca9c976b911f3ece7b0d32ec45029975781c1b67f0511eb216 -v1.0.0 52ff7e96867c027745d29f5d3feb77f546f22c4f 2017-06-26T04:08:29Z -v1.0.0-otp-17 52ff7e96867c027745d29f5d3feb77f546f22c4f 2017-06-26T04:08:31Z -v1.0.0-rc1 5b4497fa6b2da7831418cf1307248dc73b4ee34b 2017-06-26T04:12:30Z -v1.0.0-rc1-otp-17 5b4497fa6b2da7831418cf1307248dc73b4ee34b 2017-06-26T04:12:32Z -v1.0.0-rc2 8931f345826b71056ab3df0fba7dbb1b9c3bce25 2017-06-26T04:10:30Z -v1.0.0-rc2-otp-17 8931f345826b71056ab3df0fba7dbb1b9c3bce25 2017-06-26T04:10:32Z -v1.0.1 89460154bb1ab3faa9a7aad4a1edc621cc35d1de 2017-06-26T04:06:28Z -v1.0.1-otp-17 89460154bb1ab3faa9a7aad4a1edc621cc35d1de 2017-06-26T04:06:30Z -v1.0.2 34df8176385200d483ab483a973c498ffa62e580 2017-06-26T04:04:26Z -v1.0.2-otp-17 34df8176385200d483ab483a973c498ffa62e580 2017-06-26T04:04:28Z -v1.0.3 307675284cfde2e2e3ff4b868ff5c2253dac3936 2017-06-26T04:02:25Z -v1.0.3-otp-17 307675284cfde2e2e3ff4b868ff5c2253dac3936 2017-06-26T04:02:27Z -v1.0.4 e02d7bf913f3e5ea8c9e49648e69324ec5c65919 2020-03-25T22:13:16Z 64aa83a5f82a36f451e692f2abb080756056b141e45a088546610182916aab1e -v1.0.4-otp-17 e02d7bf913f3e5ea8c9e49648e69324ec5c65919 2020-03-25T22:13:10Z 64aa83a5f82a36f451e692f2abb080756056b141e45a088546610182916aab1e -v1.0.5 3eb938a0ba7db5c6cc13d390e6242f66fdc9ef00 2020-03-25T22:13:18Z 7fab3ebec908087824c94e9a9d2606aa83793d98737a5389e737aad71d1b6d5b -v1.0.5-otp-17 3eb938a0ba7db5c6cc13d390e6242f66fdc9ef00 2020-03-25T21:25:52Z fb980bd05a63a3d419fc56235c52dbef96bcd91b559da523a12f92e352d49719 -v1.0.5-otp-18 3eb938a0ba7db5c6cc13d390e6242f66fdc9ef00 2018-11-25T23:13:38Z -v1.1 5591ab2dffeb8df448728dd2e712c416ac1a07ca 2020-03-25T22:14:09Z 085c6bfbce870870741cbdbf4917e3785b54bd804749955052d8875857847652 -v1.1-otp-17 5591ab2dffeb8df448728dd2e712c416ac1a07ca 2020-03-25T22:14:03Z 085c6bfbce870870741cbdbf4917e3785b54bd804749955052d8875857847652 -v1.1-otp-18 5591ab2dffeb8df448728dd2e712c416ac1a07ca 2020-03-25T21:25:40Z 3989ccea818ce8da9d355f9b3080780cd1c0fc03b51a2d0bb47673250bae4504 -v1.1.0 f2a9c7016633ca63541a8160c63a53eb7edbccdb 2020-03-25T21:27:07Z de44f8b3b3969d2fd280a50f4f96a8f2b7249037a696d6c2214d50b4e3b9adb9 -v1.1.0-otp-17 f2a9c7016633ca63541a8160c63a53eb7edbccdb 2020-03-25T22:14:20Z a0b5ff7c507881f6557c86686574c046b5bd67cddf2fedfc82cd5d9c8176ed0b -v1.1.0-otp-18 f2a9c7016633ca63541a8160c63a53eb7edbccdb 2020-03-25T22:13:27Z e767678a166e0799792321073f53ac9655d120e8fa0a5a789af6832356c53755 -v1.1.0-rc.0 0e3c06b03149022b980e69872003d401c4788fea 2020-03-25T21:27:09Z 205c018fd2b0a4ebd4fa00a43b68cf2222aba43ab06fc07eeda98c0058a3d6d6 -v1.1.0-rc.0-otp-17 0e3c06b03149022b980e69872003d401c4788fea 2020-03-25T22:14:30Z 9a5674bfc64bc7236436c097d99aafce02c83ec926d58854a1f175284f271648 -v1.1.0-rc.0-otp-18 0e3c06b03149022b980e69872003d401c4788fea 2020-03-25T22:13:38Z 81a3be6e2711a66c90676ad0029ee305430e7c9384901857a1ec9047aea30235 -v1.1.1 139d2eac5998259379862ff6ed2a5287f7de4ea6 2020-03-25T22:14:44Z 61c3ebc971aecfe8624ff819ab7b2e7a7802a867f2ec5407c9827d879521b866 -v1.1.1-otp-17 139d2eac5998259379862ff6ed2a5287f7de4ea6 2020-03-25T22:14:38Z 61c3ebc971aecfe8624ff819ab7b2e7a7802a867f2ec5407c9827d879521b866 -v1.1.1-otp-18 139d2eac5998259379862ff6ed2a5287f7de4ea6 2020-03-25T22:13:44Z bdfa8f86fc0ca296c045b67d6c7d9a7b25f3dddcb2388c066dddfe03e231a0aa -v1.10 8731ef03d97a8febcaa272a85efe1656a797892b 2020-07-14T10:41:39Z 4de78cc0d7ae93146912a6866070a19caddb18ed5766babf50432de05f1f670c -v1.10-otp-21 8731ef03d97a8febcaa272a85efe1656a797892b 2020-07-14T10:41:34Z 4de78cc0d7ae93146912a6866070a19caddb18ed5766babf50432de05f1f670c -v1.10-otp-22 8731ef03d97a8febcaa272a85efe1656a797892b 2020-07-14T10:40:30Z 53bae3f6816383278ec2b85324f5c55df0d3e9c9ac260e9d8f7fc18e184e6e23 -v1.10-otp-23 8731ef03d97a8febcaa272a85efe1656a797892b 2020-07-14T10:39:13Z 17785f8d823baca46daec4a1c61dc846eee86fc89497b50777d819dd54ff5ac5 -v1.10.0 5bd7a90864417e7be9483002cfa0e543d265b71d 2020-03-25T22:15:30Z 15e0f608cde3757a7a2e44f3683dd3ec5f184cd76cfa43366467f9d3556870ce -v1.10.0-otp-21 5bd7a90864417e7be9483002cfa0e543d265b71d 2020-03-25T22:15:23Z 15e0f608cde3757a7a2e44f3683dd3ec5f184cd76cfa43366467f9d3556870ce -v1.10.0-otp-22 5bd7a90864417e7be9483002cfa0e543d265b71d 2020-03-25T22:14:28Z b0c1f9bcddba50dc39e63b16e2df38a0fef74995d29bc47084ffb6ad5bd7b533 -v1.10.0-rc.0 105770cfa0ac0591c1fecca17f2221e0ac6af051 2020-03-25T22:16:49Z 8e6aec5f0c2bcf8c08451af20cfc0e61e0e484561e68a0e5f42eb8d6c99727d1 -v1.10.0-rc.0-otp-21 105770cfa0ac0591c1fecca17f2221e0ac6af051 2020-03-25T22:16:31Z 8e6aec5f0c2bcf8c08451af20cfc0e61e0e484561e68a0e5f42eb8d6c99727d1 -v1.10.0-rc.0-otp-22 105770cfa0ac0591c1fecca17f2221e0ac6af051 2020-03-25T22:15:26Z 3e6d407075290902b220c18726da4a785623e57dee620f414a8cefead34e1c01 -v1.10.1 51c95b60004d3d9d297fff23f576bdd97c931afd 2020-03-25T22:16:45Z 70adaff3b66377251aa8687087fa589981336371dd80d134e57abc39b6788a7c -v1.10.1-otp-21 51c95b60004d3d9d297fff23f576bdd97c931afd 2020-03-25T21:29:16Z ee33314dad3ab8be426bcc2c77eaff7713fe03306b2d92b53dc0618d29a82ee7 -v1.10.1-otp-22 51c95b60004d3d9d297fff23f576bdd97c931afd 2020-03-25T22:15:35Z 8aba1324a382eded4dc614fad5d21f9af63d46a0f60b0834369868fa10b3402f -v1.10.2 07450832e7fbc902bfdee124adda1b5a0f6b689d 2020-03-25T22:17:19Z dd23b5b2f78860de341b7fbeae0f4e8b681dca971036e1546ba86d04852b9097 -v1.10.2-otp-21 07450832e7fbc902bfdee124adda1b5a0f6b689d 2020-03-25T22:17:06Z dd23b5b2f78860de341b7fbeae0f4e8b681dca971036e1546ba86d04852b9097 -v1.10.2-otp-22 07450832e7fbc902bfdee124adda1b5a0f6b689d 2020-03-25T22:16:15Z 58616d0a492f9375d6e892200bf3d7618e5021a7a639620595b570a52973eac1 -v1.10.3 c88ecdec1655b04f88e3caef22f050bb85740e4c 2020-05-13T18:09:54Z c9b6ebc81bed67be4eeac420b3d4c8d727f69caf23103ce65d9d0795eab50aec -v1.10.3-otp-21 c88ecdec1655b04f88e3caef22f050bb85740e4c 2020-05-13T18:09:48Z c9b6ebc81bed67be4eeac420b3d4c8d727f69caf23103ce65d9d0795eab50aec -v1.10.3-otp-22 c88ecdec1655b04f88e3caef22f050bb85740e4c 2020-05-13T18:09:03Z db294219b295b1b24e7f7b5f8a133851f84f3eb175f73a7f43dbfa55e05af3fb -v1.10.3-otp-23 c88ecdec1655b04f88e3caef22f050bb85740e4c 2020-05-13T18:08:09Z ef567be0c939211a21843a39dfdec3f870328e3ef9fb2695c0aa8a2d37b50d96 -v1.10.4 1145dc01680aab7094f8a6dbd38b65185e14adb4 2020-07-05T12:01:41Z e780a224631e029b3eee675ef251d01fc0f29bf550027cd0e93c2dbeeb8f4da8 -v1.10.4-otp-21 1145dc01680aab7094f8a6dbd38b65185e14adb4 2020-07-05T12:01:36Z e780a224631e029b3eee675ef251d01fc0f29bf550027cd0e93c2dbeeb8f4da8 -v1.10.4-otp-22 1145dc01680aab7094f8a6dbd38b65185e14adb4 2020-07-05T12:00:35Z ab49b0e07cac98cf8e73168be359b6ec3e6e7f6357be1407e31d7d823ca9e97c -v1.10.4-otp-23 1145dc01680aab7094f8a6dbd38b65185e14adb4 2020-07-05T11:59:26Z ebe895088bdfdf6d156f090f3ec4c939265ce2ebe3868886832ddeb7f8f3aba1 -v1.11 57abca4c1687c77781785afef488d24cd945fa37 2020-09-14T22:27:05Z 20bc4ecf1fb7256f16081abc8c05a25b7fdebc89e7c6769e9fb80bee2f39a621 -v1.11-otp-21 57abca4c1687c77781785afef488d24cd945fa37 2020-09-14T22:26:58Z 20bc4ecf1fb7256f16081abc8c05a25b7fdebc89e7c6769e9fb80bee2f39a621 -v1.11-otp-22 57abca4c1687c77781785afef488d24cd945fa37 2020-09-14T22:25:35Z 4b5d7096f3a83ce9ee267c8f68f9d706da903958a5bf75a2c23f640caa05fe31 -v1.11-otp-23 57abca4c1687c77781785afef488d24cd945fa37 2020-09-14T22:24:03Z 7e2480c562ea3d7a15b82985b114668cdd8dbb8e00e819070a41c45ac79cd4a7 -v1.11.0-rc.0 48cee5aaa54fad593c5aca940ab3dd330652eab8 2020-09-14T10:57:02Z ff64bb368e07ba6b6c4434c36b8de89a4fbfac70e01a1e087c48a4e8eddf8b3a -v1.11.0-rc.0-otp-21 48cee5aaa54fad593c5aca940ab3dd330652eab8 2020-09-14T10:56:53Z ff64bb368e07ba6b6c4434c36b8de89a4fbfac70e01a1e087c48a4e8eddf8b3a -v1.11.0-rc.0-otp-22 48cee5aaa54fad593c5aca940ab3dd330652eab8 2020-09-14T10:55:50Z 6874ed67a30ec4e4ba8d9332d3833a0f0d68ebcd4fe3cd6e5992741384c888a4 -v1.11.0-rc.0-otp-23 48cee5aaa54fad593c5aca940ab3dd330652eab8 2020-09-14T10:54:36Z 171229bade46586771d05a18e489002d57cbe7b9a41640c3802ca07f5bff87d6 -v1.2 9c91d2cc91fa2ee2ceb88075e69e5eb18bbb1af8 2020-03-25T22:16:42Z 9bc461faad6f92f10f09e5d3b61b216dc4b28122cdae3a28b3bbfac8a693160f -v1.2-otp-18 9c91d2cc91fa2ee2ceb88075e69e5eb18bbb1af8 2020-03-25T22:16:36Z 9bc461faad6f92f10f09e5d3b61b216dc4b28122cdae3a28b3bbfac8a693160f -v1.2-otp-19 9c91d2cc91fa2ee2ceb88075e69e5eb18bbb1af8 2020-03-25T21:28:02Z b2d2fb4fa365d848ee6c8fabe11b72376a57bfeb9d2fc3c0067ce3e7c0a94c88 -v1.2.0 b1344724b695a9a474d73d4633c5a151f1a7d61d 2020-03-25T22:16:11Z 44f2a639ed3ffbae7489c4e229370b205014c9495a674d2bda23463a802de49d -v1.2.0-otp-18 b1344724b695a9a474d73d4633c5a151f1a7d61d 2020-03-25T22:16:04Z 44f2a639ed3ffbae7489c4e229370b205014c9495a674d2bda23463a802de49d -v1.2.0-rc.0 a2860b32a3cc8f543406b582fc583185c8c31e5c 2017-06-26T03:35:19Z -v1.2.0-rc.0-otp-18 a2860b32a3cc8f543406b582fc583185c8c31e5c 2017-06-26T03:36:45Z -v1.2.0-rc.1 211a1299cc033debf9a00fc5ac5f4d4e1eb4d6a7 2017-06-26T03:32:52Z -v1.2.0-rc.1-otp-18 211a1299cc033debf9a00fc5ac5f4d4e1eb4d6a7 2017-06-26T03:34:19Z -v1.2.1 a3d88dc406ca9642bcabf375db7f74f2cc6a751d 2020-03-25T22:16:38Z fc9d9c833d5cbcb49dba0a5d567c40c27bd9c39478f3712c0a5e738b96e4b53a -v1.2.1-otp-18 a3d88dc406ca9642bcabf375db7f74f2cc6a751d 2018-11-25T23:39:21Z -v1.2.2 9decf4c78a911bc1375891bb65fbf2e50fcedeb8 2020-03-25T22:17:12Z 8f0010f5924d5e8d1e42e907c85e662a7d0c41d33d92cf2c0c7c40b5d5190e44 -v1.2.2-otp-18 9decf4c78a911bc1375891bb65fbf2e50fcedeb8 2020-03-25T21:29:41Z 6699e120159a17c7e06e2ad4b5ce3fb6741d68cf43c9153c51e3ef00b3b1cb58 -v1.2.3 737ac62926db7a692e2fe67c27b696cfd0866674 2020-03-25T22:17:23Z 7513357020d13813ac09f1b4abaf825df62936f95e8ea33224a9719b88423bb7 -v1.2.3-otp-18 737ac62926db7a692e2fe67c27b696cfd0866674 2020-03-25T22:17:17Z 7513357020d13813ac09f1b4abaf825df62936f95e8ea33224a9719b88423bb7 -v1.2.4 17e8dbbf16c08dff0ded22c37ae80a37f99ff99a 2020-03-25T22:17:34Z 485cf049c609a33dd3f7f49842ea1d23b6ee41170e7e148a65feded33e4ec3c6 -v1.2.4-otp-18 17e8dbbf16c08dff0ded22c37ae80a37f99ff99a 2020-03-25T22:17:27Z 485cf049c609a33dd3f7f49842ea1d23b6ee41170e7e148a65feded33e4ec3c6 -v1.2.5 e5374cf5d3beb510a0fdeddd0f8b89e8e26445ef 2020-03-25T22:17:43Z 1e583f13c332082e58b1b9c4d183c161c95623924606d1673dd260d9d52ecef0 -v1.2.5-otp-18 e5374cf5d3beb510a0fdeddd0f8b89e8e26445ef 2020-03-25T22:17:37Z 1e583f13c332082e58b1b9c4d183c161c95623924606d1673dd260d9d52ecef0 -v1.2.6 3dbfb92860fb24f83c92e1f1b67f48554fb211d6 2020-03-25T22:18:06Z a9a29ba0b872be92aee79f221bd5cfcccbe242edf298df04940004b211b75332 -v1.2.6-otp-18 3dbfb92860fb24f83c92e1f1b67f48554fb211d6 2020-03-25T22:17:59Z a9a29ba0b872be92aee79f221bd5cfcccbe242edf298df04940004b211b75332 -v1.3 bbf5e2bc7bc3179588bab5e87ad740ff5790d72e 2020-03-25T22:19:45Z 971b9b3ec0fe6aba8811f675bfb44f13b1be97439e2b959dba3941dbf6b04ba4 -v1.3-otp-18 bbf5e2bc7bc3179588bab5e87ad740ff5790d72e 2020-03-25T22:19:38Z 971b9b3ec0fe6aba8811f675bfb44f13b1be97439e2b959dba3941dbf6b04ba4 -v1.3-otp-19 bbf5e2bc7bc3179588bab5e87ad740ff5790d72e 2020-03-25T22:18:42Z 3b1eb45ad96b573db97759931e120f78e1ac35983da14bc1ace8e9e4821e6a7b -v1.3.0 416bf41a032280b988d537bd4635beecc3aeed29 2020-03-25T22:20:09Z 10f3755e1575b85e364db5120d53ac72d1e7af66cc86d46874a035d142ff14b5 -v1.3.0-otp-18 416bf41a032280b988d537bd4635beecc3aeed29 2020-03-25T22:20:02Z 10f3755e1575b85e364db5120d53ac72d1e7af66cc86d46874a035d142ff14b5 -v1.3.0-otp-19 416bf41a032280b988d537bd4635beecc3aeed29 2020-03-25T21:41:57Z 0dde36e034c35af1b3d51db86616800619f6e455d3c5410dd7daa36ec23f0972 -v1.3.0-rc.0 7881123953300152650e83e4ba6e56e4d6895d72 2020-03-25T22:20:16Z 4f8a004a6e6f97d8a27044ff45f0a149728fbb6d6c839e6af4122bb3b2bf866e -v1.3.0-rc.0-otp-18 7881123953300152650e83e4ba6e56e4d6895d72 2020-03-25T21:32:26Z beacc2e95f1d4a5af290bbeef031f328fb0df4dabd95215fe1df9aebcd16a47b -v1.3.0-rc.0-otp-19 7881123953300152650e83e4ba6e56e4d6895d72 2020-03-25T22:18:50Z b5b32c2c920038f50a8037d51722f83364026cdfb4a14e6c6c0f7add18e55878 -v1.3.0-rc.1 9eb47818abb00f207e442ffe06eef5a28155d371 2020-03-25T22:19:57Z 583b9f1bbfc650784fcd9f9a2930a5ea077a05262112aad2c983ef25d390c428 -v1.3.0-rc.1-otp-18 9eb47818abb00f207e442ffe06eef5a28155d371 2020-03-25T22:19:50Z 583b9f1bbfc650784fcd9f9a2930a5ea077a05262112aad2c983ef25d390c428 -v1.3.0-rc.1-otp-19 9eb47818abb00f207e442ffe06eef5a28155d371 2020-03-25T22:18:52Z 3d9a9441319c1cbe749833fce2ff5d057676ecebb98d371c1c4a1bf9cad4ad46 -v1.3.1 01a1acd27b2b742a480dbc2210177f45982cc77e 2020-03-25T22:20:24Z 75b8c766c25873ab49e217bfa74b680c0f1630b28ad59b6cddca29fe549b87da -v1.3.1-otp-18 01a1acd27b2b742a480dbc2210177f45982cc77e 2020-03-25T22:20:18Z 75b8c766c25873ab49e217bfa74b680c0f1630b28ad59b6cddca29fe549b87da -v1.3.1-otp-19 01a1acd27b2b742a480dbc2210177f45982cc77e 2020-03-25T22:19:17Z e40938de58f10ad2b436eaae5725239ae06bd0d8416aa05d58b3970603488fd3 -v1.3.2 56f1037973d50721206324db48cf86509779c862 2020-03-25T22:20:27Z 32b7542ab3fffd51422bc44721f878e82a23ec6d11ae798805e1c52717f8566a -v1.3.2-otp-18 56f1037973d50721206324db48cf86509779c862 2020-03-25T22:20:20Z 32b7542ab3fffd51422bc44721f878e82a23ec6d11ae798805e1c52717f8566a -v1.3.2-otp-19 56f1037973d50721206324db48cf86509779c862 2020-03-25T22:19:21Z 3a0095634b1ba86156c0cec4d07eacebad9185eb57507a6ecf3e4a94769cf685 -v1.3.3 0caa75760b14e7392a9f2d7aa08218ba53c8c76a 2020-03-25T22:20:43Z a68a1fdec897290d816cb265fe66588e8345f23f53254d954be266edad4e0c59 -v1.3.3-otp-18 0caa75760b14e7392a9f2d7aa08218ba53c8c76a 2020-03-25T21:33:07Z 535fc67015404e21326f9aa55f8866a416ae6a5cfe65dc9ddd2885d8abdde3d2 -v1.3.3-otp-19 0caa75760b14e7392a9f2d7aa08218ba53c8c76a 2020-03-25T22:19:29Z 3ae582c46d95c22c724df9a4f617684c277737d8ac82f154ce718baed20726bd -v1.3.4 87710cd49521fc396f3f04fa8615f05e7f57ecc0 2020-03-25T22:20:46Z 1c3048f9de5f645c4f393201a15c403924886dc18690c36abbeb48aa342cc952 -v1.3.4-otp-18 87710cd49521fc396f3f04fa8615f05e7f57ecc0 2020-03-25T22:20:37Z 1c3048f9de5f645c4f393201a15c403924886dc18690c36abbeb48aa342cc952 -v1.3.4-otp-19 87710cd49521fc396f3f04fa8615f05e7f57ecc0 2020-03-25T22:19:40Z fc55e25dae9eb99db14bcf73952274db99467cbde17d7084232e4cc444e9e57d -v1.4 5131c6be9d1799eb32567afa95290313833afab4 2020-03-25T22:22:08Z 73b9d87a2d83a447ee13f78469fa0cb477691b5a7c580b6b1e8543ded0d74740 -v1.4-otp-18 5131c6be9d1799eb32567afa95290313833afab4 2020-03-25T22:22:02Z 73b9d87a2d83a447ee13f78469fa0cb477691b5a7c580b6b1e8543ded0d74740 -v1.4-otp-19 5131c6be9d1799eb32567afa95290313833afab4 2020-03-25T22:21:01Z 30da8426d030698c54ce18ab7388224eee9873ea05d84314ca07b8e9a20ce98c -v1.4-otp-20 5131c6be9d1799eb32567afa95290313833afab4 2020-03-25T22:19:59Z 3aa8e74da72590a059a106dbbc0ecfa8cdcaae0de947296a2758d29d6898334c -v1.4.0 f045705ac559290866abda5f9daeac4b701b6e7f 2020-03-25T22:21:20Z 3b215e4caa0346086e05bd687b8e6d24429cee2f33738be5acbce34eb42ee961 -v1.4.0-otp-18 f045705ac559290866abda5f9daeac4b701b6e7f 2020-03-25T22:21:14Z 3b215e4caa0346086e05bd687b8e6d24429cee2f33738be5acbce34eb42ee961 -v1.4.0-otp-19 f045705ac559290866abda5f9daeac4b701b6e7f 2020-03-25T21:33:02Z c6a69b98a6a337a778888a2ca525cbc68e1323e2eee9a66126d3703df7a3cb69 -v1.4.0-rc.0 fbfb41dfeedf14ccc4bd80c3c366382c8a2fcb9e 2020-03-25T21:35:09Z 73e665879a38ebe9ac2f9e01151d824fabb346c972153c55c6a51a15d77dfd0a -v1.4.0-rc.0-otp-18 fbfb41dfeedf14ccc4bd80c3c366382c8a2fcb9e 2018-11-26T00:18:02Z -v1.4.0-rc.0-otp-19 fbfb41dfeedf14ccc4bd80c3c366382c8a2fcb9e 2020-03-25T22:22:35Z 6465652089273611d4b30956cf805368dc7f98251ff97f2f4260aa92f5559040 -v1.4.0-rc.0-otp-20 fbfb41dfeedf14ccc4bd80c3c366382c8a2fcb9e 2020-03-25T22:21:44Z d19b14c98892750c03274862e4ae9bacc4e5541762acecb069e1e2b3998bec61 -v1.4.0-rc.1 16a14c1f6d25e4b51e78fdcacf4f824966a17eb5 2020-03-25T22:24:04Z c7f8f78eb2e61fc664b3827c112b0019a26415147bf46942b048647b37f164e1 -v1.4.0-rc.1-otp-18 16a14c1f6d25e4b51e78fdcacf4f824966a17eb5 2020-03-25T22:23:57Z c7f8f78eb2e61fc664b3827c112b0019a26415147bf46942b048647b37f164e1 -v1.4.0-rc.1-otp-19 16a14c1f6d25e4b51e78fdcacf4f824966a17eb5 2020-03-25T22:22:58Z 709696973ae7f81a3cdc4fd6438981f67988ef26fe1481dc63fda29985d6a66f -v1.4.0-rc.1-otp-20 16a14c1f6d25e4b51e78fdcacf4f824966a17eb5 2020-03-25T22:21:58Z d847e27bdbbd6ecff6f6e94d9087b31a57eaf2822a38b6af87e81beea3e9b1de -v1.4.1 0397a46bb762923a91353e1c957ae2443d50dc05 2020-03-25T22:23:21Z 9398a8fbd4c64bbde76cbc179f2837ba6815a9d60fdca49fe43cd86c70ed0fcb -v1.4.1-otp-18 0397a46bb762923a91353e1c957ae2443d50dc05 2020-03-25T22:23:14Z 9398a8fbd4c64bbde76cbc179f2837ba6815a9d60fdca49fe43cd86c70ed0fcb -v1.4.1-otp-19 0397a46bb762923a91353e1c957ae2443d50dc05 2020-03-25T22:22:15Z fc54fa404028f712a135db14d9cf8d6bcec505cae020dc1c60db92f22b43a93f -v1.4.2 27fdc68ff41a75b16778f2ed8d4d6605764e31b6 2020-03-25T22:24:08Z bb6b153387177a6e440b385420ce20e6017d05170fff681f0d23c7fba82fca1b -v1.4.2-otp-18 27fdc68ff41a75b16778f2ed8d4d6605764e31b6 2020-03-25T22:24:02Z bb6b153387177a6e440b385420ce20e6017d05170fff681f0d23c7fba82fca1b -v1.4.2-otp-19 27fdc68ff41a75b16778f2ed8d4d6605764e31b6 2020-03-25T22:22:42Z 88a6afd1d9c7d0a2c60e2c24be439942568f6ab2a4bc507fd3831865188efe8d -v1.4.3 b2b974dc71e2d98c3179c08a9356835f68442a80 2020-03-25T22:23:39Z b2313b3e4efb2841d2c3c7cd34fc03cae85366ca9e7a2f56e4eca836811f2177 -v1.4.3-otp-18 b2b974dc71e2d98c3179c08a9356835f68442a80 2020-03-25T22:23:33Z b2313b3e4efb2841d2c3c7cd34fc03cae85366ca9e7a2f56e4eca836811f2177 -v1.4.3-otp-19 b2b974dc71e2d98c3179c08a9356835f68442a80 2020-03-25T22:22:31Z da40d1f7aaa389b6366ad3fbd0fc622caa70081f30b0dcbc5820eb57fd3e13ea -v1.4.4 867da6f876c48279823a41a33030c95ef37379b2 2020-03-25T22:23:43Z c1f13c7b6f46bb82928a1545a2980c93f4f32c5065d172b18d978913e39aec57 -v1.4.4-otp-18 867da6f876c48279823a41a33030c95ef37379b2 2020-03-25T22:23:36Z c1f13c7b6f46bb82928a1545a2980c93f4f32c5065d172b18d978913e39aec57 -v1.4.4-otp-19 867da6f876c48279823a41a33030c95ef37379b2 2019-01-11T13:10:55Z -v1.4.5 e25c37108a5294b205ad0abe558cb82f19d342c5 2020-03-25T22:24:53Z a52e8962a2856887e8401ea3868c35f9811d2584bebe0e1e2243242f5bf208ee -v1.4.5-otp-18 e25c37108a5294b205ad0abe558cb82f19d342c5 2020-03-25T22:24:46Z a52e8962a2856887e8401ea3868c35f9811d2584bebe0e1e2243242f5bf208ee -v1.4.5-otp-19 e25c37108a5294b205ad0abe558cb82f19d342c5 2020-03-25T22:23:46Z 16351a7334cfb840b5be0be854c95c3092425463da7bd97509dfc0d964d3ece8 -v1.4.5-otp-20 e25c37108a5294b205ad0abe558cb82f19d342c5 2020-03-25T22:22:45Z 8b3c151e66b2ba79786aad6dd83a2b6f846cf6451e361847f0604bbb31a11db3 -v1.5 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T22:24:25Z 6a1e40830b90883395c84abc7f98a41da33d70e89da841256fdf568c3afcaf42 -v1.5-otp-18 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T21:36:44Z f706fbb55eb5d2dde87d71a69f82176f8d6876e0a3b7471f2c28839169b98cf9 -v1.5-otp-19 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T22:23:30Z 12c498b581f6cec636d8994195548ac9730aefde3ef9b1d7febc06ffe24a2430 -v1.5-otp-20 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T21:35:04Z f7347176a029cae438d87c87117af3862ce9175514eb69a468ade4bbe37c6e92 -v1.5.0 117b2bf614d4b74281ff6dfe0e0e95caf50ff100 2020-03-25T22:25:26Z 9e1b22e464e70f7d614b91d002d37dbabec2bd1a0ff7ced0578435d69f5b695f -v1.5.0-otp-18 117b2bf614d4b74281ff6dfe0e0e95caf50ff100 2020-03-25T21:38:02Z ad69e965bef4d98282a17551cd33350ca0d189c0c35b7ea3f78c9dd36fb221aa -v1.5.0-otp-19 117b2bf614d4b74281ff6dfe0e0e95caf50ff100 2020-03-25T22:24:16Z 5829820f88b2af596c2ed810dbe12cbe02fd5445052ac8338cf2855085eeaa15 -v1.5.0-otp-20 117b2bf614d4b74281ff6dfe0e0e95caf50ff100 2020-03-25T22:23:18Z ca38567d4468fc5463105c87e79886a458404596fad06cf60d9b41ab63b8ae10 -v1.5.0-rc.0 fa0de77862f10496f8285079c7cdc367ead7c8c8 2020-03-25T22:26:37Z 3cc7f60e1e1514de2a39b91af1605fc15017a170a1f56649a77cba08792e0693 -v1.5.0-rc.0-otp-18 fa0de77862f10496f8285079c7cdc367ead7c8c8 2020-03-25T21:38:42Z 8fded176eed47bd6787280f68fe66c57ab34f441cf9d05b1015f605026af133e -v1.5.0-rc.0-otp-19 fa0de77862f10496f8285079c7cdc367ead7c8c8 2020-03-25T22:25:25Z ca09faf48cf590bc128fd2a3cb1ea40a53cad9d8f242be7f3ba684b536de86ef -v1.5.0-rc.0-otp-20 fa0de77862f10496f8285079c7cdc367ead7c8c8 2020-03-25T22:24:19Z 94dc670c3989970976c951b554d78b235c8d16d434faf398147788c661c3481d -v1.5.0-rc.1 704fb9599b522bb530efdc5bb527d005e0c8ed68 2020-03-25T21:13:57Z a93294558d96225d89adad8140195e2d037671bbba268f7232cbf9a0c262a75a -v1.5.0-rc.1-otp-18 704fb9599b522bb530efdc5bb527d005e0c8ed68 2020-03-25T21:13:51Z a93294558d96225d89adad8140195e2d037671bbba268f7232cbf9a0c262a75a -v1.5.0-rc.1-otp-19 704fb9599b522bb530efdc5bb527d005e0c8ed68 2020-03-25T22:26:30Z 3a77c443c52bad797b527a5042a11800f95204efe6f84ec3d580ea15836db06d -v1.5.0-rc.1-otp-20 704fb9599b522bb530efdc5bb527d005e0c8ed68 2020-03-25T22:25:17Z 634c5939d546639e1e7535555b40eea9181fed035bc3276f6eb8b7978e7776bb -v1.5.0-rc.2 e5208421b32f197379b26c55bfde22651bea5e1c 2018-11-26T02:09:46Z -v1.5.0-rc.2-otp-18 e5208421b32f197379b26c55bfde22651bea5e1c 2020-03-25T22:27:49Z 4a8f1ac1160d9b0b7d664e23d5beeb1a8fc763ec23b4c50b8ae26bea7ecf053f -v1.5.0-rc.2-otp-19 e5208421b32f197379b26c55bfde22651bea5e1c 2020-03-25T21:12:20Z e813dd6ec6cb5fdd8047e4c663903e32cc36eda50d6f7259596477f41390df41 -v1.5.0-rc.2-otp-20 e5208421b32f197379b26c55bfde22651bea5e1c 2020-03-25T22:25:44Z 5cbab05adcf1953bbd6b56f56c1ba0ca81a4697bcc93d488c8e6b2d6e638cdf9 -v1.5.1 1406d853e0e6515007696f871d0a9e2c023da6da 2020-03-25T22:27:58Z cae0fcae269ac84e5e67e522dc0bdd857a660fa3e46733a198d9ded465e4fba8 -v1.5.1-otp-18 1406d853e0e6515007696f871d0a9e2c023da6da 2020-03-25T22:27:51Z cae0fcae269ac84e5e67e522dc0bdd857a660fa3e46733a198d9ded465e4fba8 -v1.5.1-otp-19 1406d853e0e6515007696f871d0a9e2c023da6da 2020-03-25T22:26:47Z 8109aae79aa6fc175ecf45283309b54697b3d050c38d14250f939b4dcae08696 -v1.5.1-otp-20 1406d853e0e6515007696f871d0a9e2c023da6da 2020-03-25T21:10:55Z b2af6a669a7d62d9e29ca5057393de5531597286812335684c6a826b9b628563 -v1.5.2 05418eaa4bf4fa8473900741252d93d76ed3307b 2020-03-25T22:27:19Z 6376a037205f9de43a520335be42c2475d3576f3da944b998a24082eea359054 -v1.5.2-otp-18 05418eaa4bf4fa8473900741252d93d76ed3307b 2020-03-25T22:27:12Z 6376a037205f9de43a520335be42c2475d3576f3da944b998a24082eea359054 -v1.5.2-otp-19 05418eaa4bf4fa8473900741252d93d76ed3307b 2020-03-25T22:26:22Z 1f72b8efad0e23ed3da34313cc87724b09bd8eb312d544827c07acf5cd9c6a63 -v1.5.2-otp-20 05418eaa4bf4fa8473900741252d93d76ed3307b 2020-03-25T22:25:33Z 972f37c2372d0237eab5efc295f4c79bef958a79ead0c08784bf42e821fc53ba -v1.5.3 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T22:27:45Z 34e7571a455e5983ca34c846edb323954d89e16ca037bbb68fd8a51d580338b5 -v1.5.3-otp-18 7340ca2d925297e98dd71528a09bf0fb8634b47f 2020-03-25T22:27:37Z 34e7571a455e5983ca34c846edb323954d89e16ca037bbb68fd8a51d580338b5 -v1.5.3-otp-19 7340ca2d925297e98dd71528a09bf0fb8634b47f 2018-11-26T02:26:23Z -v1.5.3-otp-20 7340ca2d925297e98dd71528a09bf0fb8634b47f 2018-11-26T02:24:29Z -v1.6 ddc554a7efef67f16e462709e7f46662f21f7ab5 2020-03-25T22:27:39Z 81cae25bef08452ceaf734c382c56f710c55ad5c45e1357a39b1dabf47b65d4b -v1.6-otp-19 ddc554a7efef67f16e462709e7f46662f21f7ab5 2020-03-25T22:27:31Z 81cae25bef08452ceaf734c382c56f710c55ad5c45e1357a39b1dabf47b65d4b -v1.6-otp-20 ddc554a7efef67f16e462709e7f46662f21f7ab5 2020-03-25T22:26:41Z 1b6fe7864287f959d4e1b401679389e44ea8ba97fb91cbc2fda5232630f2cde7 -v1.6-otp-21 ddc554a7efef67f16e462709e7f46662f21f7ab5 2020-03-25T22:25:53Z ee2763087170a639d9f5c3b044de81bafdbd717aba11e69db9fe7d94007a8c8e -v1.6.0 63b8d0ba34f38baa6f3a11020215b2f66213d27e 2020-03-25T22:27:06Z 610e548f35d0a90e0a8d291449d17bbba9d5d1e80509792f5e44aea7bb76ac4c -v1.6.0-otp-19 63b8d0ba34f38baa6f3a11020215b2f66213d27e 2020-03-25T22:26:58Z 610e548f35d0a90e0a8d291449d17bbba9d5d1e80509792f5e44aea7bb76ac4c -v1.6.0-otp-20 63b8d0ba34f38baa6f3a11020215b2f66213d27e 2020-03-25T22:26:09Z c09a0a90143abf9a37fce19a1959308fc52d52c461f1a703eae3ee18b616c683 -v1.6.0-rc.0 182c730bdb431fd1ff6789057e4903c33e377f43 2017-12-24T12:37:44Z -v1.6.0-rc.0-otp-19 182c730bdb431fd1ff6789057e4903c33e377f43 2017-12-24T12:38:46Z -v1.6.0-rc.0-otp-20 182c730bdb431fd1ff6789057e4903c33e377f43 2017-12-24T12:39:45Z -v1.6.0-rc.1 67e575eca7b97d4fe063626671d1fd1da0ba7fed 2018-01-11T10:39:01Z -v1.6.0-rc.1-otp-19 67e575eca7b97d4fe063626671d1fd1da0ba7fed 2018-01-11T10:40:00Z -v1.6.0-rc.1-otp-20 67e575eca7b97d4fe063626671d1fd1da0ba7fed 2018-01-11T10:40:58Z -v1.6.1 2b588dfb3ebb2f3221bec3509cb1dbb8e08ef1af 2020-03-25T22:28:09Z f9102f0a90aec8ad2a372a782aedc9ed4c3bd0d6ae391a7cc84cb3fc6c5f133c -v1.6.1-otp-19 2b588dfb3ebb2f3221bec3509cb1dbb8e08ef1af 2020-03-25T22:28:03Z f9102f0a90aec8ad2a372a782aedc9ed4c3bd0d6ae391a7cc84cb3fc6c5f133c -v1.6.1-otp-20 2b588dfb3ebb2f3221bec3509cb1dbb8e08ef1af 2020-03-25T22:27:15Z 679c6d51e6955225b6fd553282f09d003ecdc1b2bcebf3fd3d855034a60419f3 -v1.6.2 c2a9c93f023c0c00e5f387a1476f4cca01752bb8 2020-03-25T22:28:44Z c9e1e85acfd362fd1dfe6abb89019b57bf44fc032c982a37fca60ec2ccf0cefa -v1.6.2-otp-19 c2a9c93f023c0c00e5f387a1476f4cca01752bb8 2020-03-25T22:28:38Z c9e1e85acfd362fd1dfe6abb89019b57bf44fc032c982a37fca60ec2ccf0cefa -v1.6.2-otp-20 c2a9c93f023c0c00e5f387a1476f4cca01752bb8 2020-03-25T21:11:05Z e555433aa78c4c50dc4adcd14f7713f03c8d17ad3bc0db4e8ebbd6cfeca50e85 -v1.6.3 45c7f828ef7cb29647d4ac999761ed4e2ff0dc08 2020-03-25T22:29:23Z c33d6c4440838fe1c09e514ff0a907937a5bae5336b424129d8a4375e308bb01 -v1.6.3-otp-19 45c7f828ef7cb29647d4ac999761ed4e2ff0dc08 2020-03-25T22:29:16Z c33d6c4440838fe1c09e514ff0a907937a5bae5336b424129d8a4375e308bb01 -v1.6.3-otp-20 45c7f828ef7cb29647d4ac999761ed4e2ff0dc08 2020-03-25T22:28:23Z e9b49410f9c2b49464c23e813d1f43303f9199926323d047631c82019423517f -v1.6.4 c107a2fe2623d11d132cdfeefbb7370abd44f85c 2020-03-25T21:15:15Z f4945bf238bb96675c8462c781f520a23025a58311608b4760f0ca71a98dd0e9 -v1.6.4-otp-19 c107a2fe2623d11d132cdfeefbb7370abd44f85c 2020-03-25T22:29:37Z 57f5902d73f55e502fa9f785c7fa76505e649a494bd507fe55ee98356a5d89b7 -v1.6.4-otp-20 c107a2fe2623d11d132cdfeefbb7370abd44f85c 2020-03-25T22:28:47Z 7b09df2473d0b4073fd7612ba3317b578e1a9646955e18cd15807107a0a11dac -v1.6.5 a9f1be07ca1a939739bd013f100686c8cf81432a 2020-03-25T22:29:56Z d6bf2716030666d4939211d867fad73eabb9fbacd330861a6e325eded452f84d -v1.6.5-otp-19 a9f1be07ca1a939739bd013f100686c8cf81432a 2020-03-25T22:29:49Z d6bf2716030666d4939211d867fad73eabb9fbacd330861a6e325eded452f84d -v1.6.5-otp-20 a9f1be07ca1a939739bd013f100686c8cf81432a 2020-03-25T22:29:01Z 1606a442acf49326d6805d9aa0a323fabfb150a27c5cb5de36489d5d759447a5 -v1.6.5-otp-21 a9f1be07ca1a939739bd013f100686c8cf81432a 2018-11-26T02:52:18Z -v1.6.6 1ec9d1d7bdd01665deb3607ba6beb8bcd524b85d 2020-03-25T22:30:57Z 025cb325e1cd9b6823bbd869f1b30f7f0529bef38e52335af5063a292b210a29 -v1.6.6-otp-19 1ec9d1d7bdd01665deb3607ba6beb8bcd524b85d 2020-03-25T22:30:50Z 025cb325e1cd9b6823bbd869f1b30f7f0529bef38e52335af5063a292b210a29 -v1.6.6-otp-20 1ec9d1d7bdd01665deb3607ba6beb8bcd524b85d 2020-03-25T21:14:55Z 25e55384303eaf867722fdfd9ff6ecdd300633a8e35146fa4c90a2f873f1d916 -v1.6.6-otp-21 1ec9d1d7bdd01665deb3607ba6beb8bcd524b85d 2018-11-26T02:57:59Z -v1.7 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:32:27Z 1ecb432fe2fe82a5f4b1287eda09799de1f4544a5cfd451c89544f93b3856b68 -v1.7-otp-19 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:32:19Z 1ecb432fe2fe82a5f4b1287eda09799de1f4544a5cfd451c89544f93b3856b68 -v1.7-otp-20 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:31:26Z feace86783358fe1ccbe5a8b55bfcdaddd64e6a0aef3656ff36c9200b7e8dacb -v1.7-otp-21 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:30:37Z 8535ea645e53e5b1d740fcee364a98e309247a623f28b7b0d281c8cdf518086f -v1.7-otp-22 a1fb6c0d0e801debd2ec88602abc493ef7937907 2020-03-25T22:29:45Z 6cdd6a9714a1fc7209e2498936986418c3a145b14e158df5e9e8d762a52fb281 -v1.7.0 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T21:17:57Z 16f6a0c235c8766fcb3a97ced61c9e3f08df579f7234464827824a9097b59123 -v1.7.0-otp-19 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T22:32:30Z 3f0ce20986311d9d21121d7e6314fb25ffebe520fd9f4b974074caf74dca33e0 -v1.7.0-otp-20 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T21:16:57Z c9bbf4d7d9a4088644797bae699f10be011ef0a144faa8c48a14aa40e6d2bd05 -v1.7.0-otp-21 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T22:30:45Z ca180626cc6fcd7a6b4c591410d42e68ad3e0007e07ad645a39fb3c2ed66f6ff -v1.7.0-otp-22 06e5ec2d4c628e57440b0a393e4efa98e7226173 2020-03-25T21:14:57Z c3fee34257d49ba18fce12dc165bea9f65828969ff2e6acc596c0d8a594237d1 -v1.7.0-rc.0 1164784b8ef25967471c068600301db850de58b3 2020-03-25T21:18:18Z f5d16a2382408acddb1a6d18ee73d0e92ae2eaa0d4adfebf8097723743eea85c -v1.7.0-rc.0-otp-19 1164784b8ef25967471c068600301db850de58b3 2020-03-25T22:32:36Z 08dbb2970f9ce6a9c4b246dbc8dd8dcace40d7ce0027772da09fdc8891b112e2 -v1.7.0-rc.0-otp-20 1164784b8ef25967471c068600301db850de58b3 2020-03-25T22:31:39Z ea293ca82f093a75ef10a377b3fe75ef5244c60388853bfcfcfebd313f21ced1 -v1.7.0-rc.0-otp-21 1164784b8ef25967471c068600301db850de58b3 2020-03-25T22:30:48Z 069a6875b80837e39b879ebc7a614cdc6e3a57d903c1c9c113fbf37a0a001805 -v1.7.0-rc.0-otp-22 1164784b8ef25967471c068600301db850de58b3 2020-03-25T22:29:59Z 236dbcc06de39c4c6afb8d72fe8f45e8a260da96aff214e0dfe442108f5bdaac -v1.7.0-rc.1 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T22:32:49Z 82001fa454804c467dc5d3128273e2f4c51d1529e05ab0dd976c5fbfc810c1c1 -v1.7.0-rc.1-otp-19 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T22:32:42Z 82001fa454804c467dc5d3128273e2f4c51d1529e05ab0dd976c5fbfc810c1c1 -v1.7.0-rc.1-otp-20 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T21:17:38Z e89ede91c4a824e7b930ad02a0b9c231a0b77cf01f74e122dd72ad29e31f9b99 -v1.7.0-rc.1-otp-21 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T22:30:59Z 6aa0013c238185014b300016c88f7211a00c5b1b04d3146d4788a7f0e4f2207f -v1.7.0-rc.1-otp-22 b6d77696743a34ade6a222cbe2811440ae4e0018 2020-03-25T22:30:13Z a481cff84a405be9da89721b1ed022f422a45b855d2159266302b3f6f2fa234b -v1.7.1 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2019-05-14T23:45:16Z -v1.7.1-otp-19 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2020-03-25T22:32:44Z b775acc22b7486ee5b0e2a3bb7101206889b4e33d9bb7e5dc734094e949cbfe3 -v1.7.1-otp-20 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2020-03-25T21:17:33Z aa2c20a4e3ac4d2a7767379fa3e185774e7052a969f6595dac4e4d4040e41dd1 -v1.7.1-otp-21 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2020-03-25T21:16:45Z b79f34570ab6ba52b4f0ce6067f6552225f9cc063ffd8d843310d833d7cffeff -v1.7.1-otp-22 8aab53b941ee955f005e7b4e08c333f0b94c48b7 2020-03-25T22:30:09Z 23bb48b55a98a7b47cd58433f6a3c17b6bd18c748ebcb2b32d2f6a90b4057557 -v1.7.2 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T22:33:25Z bd93d69afaa0ffcb456f158bf785f9b211803e472d5624030877771ba47af2f3 -v1.7.2-otp-19 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T22:33:18Z bd93d69afaa0ffcb456f158bf785f9b211803e472d5624030877771ba47af2f3 -v1.7.2-otp-20 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T21:17:42Z 1e36d839e8d075e68219944c34b3c90622e0a5698e954c0a22384d412f958509 -v1.7.2-otp-21 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T22:31:36Z f11f023abdf43cbade64b7f0fef316d361e716bf5274aff3398a1ba97411cb41 -v1.7.2-otp-22 2b338092b6da5cd5101072dfdd627cfbb49e4736 2020-03-25T21:16:06Z 83d4c728d4526e7a72e423b2cca650d20ef8cf4cd8ceb1da022c900490de964e -v1.7.3 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:33:58Z 358170a282e52728be7402eadd52fdc66419c322548f2c6f0fd717741c86d029 -v1.7.3-otp-19 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:33:51Z 358170a282e52728be7402eadd52fdc66419c322548f2c6f0fd717741c86d029 -v1.7.3-otp-20 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:32:57Z 7df5ddd0b565c6bfe02b743a7338dd095b74228ea44bf71d912d1875a861c442 -v1.7.3-otp-21 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:32:08Z a20a939d8046184ab45b37efba70705cee4c66f73d227578b7e717a4e65bb26a -v1.7.3-otp-22 8ca85ed2a82019df1a2acf3238f24a56370464bb 2020-03-25T22:31:22Z c3c8b2cff0bef4c91636cd8335988e808ae2978ed90cc0ea2acd238bf60f22d8 -v1.7.4 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:34:34Z c82b6f34a17fc6f9fba9327e9080d2c44c97e11bf00398db2a5c120ac289671b -v1.7.4-otp-19 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:34:21Z c82b6f34a17fc6f9fba9327e9080d2c44c97e11bf00398db2a5c120ac289671b -v1.7.4-otp-20 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:33:29Z 620b4f6097aaa22421a41bde19c838983b2854aebc429b883342b7f71f8542df -v1.7.4-otp-21 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:32:39Z 2b372cbe7d905f3403bc42b9284ae9b84d2c1f9ee3b847ca6bc416c4d941e44d -v1.7.4-otp-22 eb5679bfcc9bd35c4c016e91745b4a1a4d43356a 2020-03-25T22:31:50Z 802ef1addcdfb16408b6b90f9a22c415ae23f5d725e5f5e3101cd196ef3a7b56 -v1.8 6d98af49c929b9e23c7c3b59e93f5f53cedeebd4 2020-03-25T22:33:48Z 90a26e9cc5b1cc7e2279dc633ef52e471f8eaaa4ce3263a6e87506427ad3fedc -v1.8-otp-20 6d98af49c929b9e23c7c3b59e93f5f53cedeebd4 2020-03-25T22:33:41Z 90a26e9cc5b1cc7e2279dc633ef52e471f8eaaa4ce3263a6e87506427ad3fedc -v1.8-otp-21 6d98af49c929b9e23c7c3b59e93f5f53cedeebd4 2020-03-25T22:32:52Z 69def395dc582c762c43267935e07732cddcc7a71a830bb09ce863b49b3d20cc -v1.8-otp-22 6d98af49c929b9e23c7c3b59e93f5f53cedeebd4 2020-03-25T22:32:06Z d7532382e69ba14b947a1405fa88cb05de11713673ab106b589958d456d726e3 -v1.8.0 2eee2fc6a4c3733537dc95083c4247a1fa723ab1 2020-03-25T22:34:52Z c08ff8e7affa636b2b0b0769d63c42289691d70cae832bdf97aeff5c931f8f95 -v1.8.0-otp-20 2eee2fc6a4c3733537dc95083c4247a1fa723ab1 2020-03-25T22:34:38Z c08ff8e7affa636b2b0b0769d63c42289691d70cae832bdf97aeff5c931f8f95 -v1.8.0-otp-21 2eee2fc6a4c3733537dc95083c4247a1fa723ab1 2019-05-15T02:00:31Z -v1.8.0-otp-22 2eee2fc6a4c3733537dc95083c4247a1fa723ab1 2020-03-25T22:33:03Z 40a1ca4092f367b2200612cfa16f0e1bd0c9ae7a1088a51665681acb6031c94a -v1.8.0-rc.0 2b594057567f352bd63f43c6535a901db6d37ed4 2019-05-15T01:22:37Z -v1.8.0-rc.0-otp-20 2b594057567f352bd63f43c6535a901db6d37ed4 2019-05-15T01:22:34Z -v1.8.0-rc.0-otp-21 2b594057567f352bd63f43c6535a901db6d37ed4 2019-05-15T01:16:16Z -v1.8.0-rc.0-otp-22 2b594057567f352bd63f43c6535a901db6d37ed4 2019-05-15T01:08:38Z -v1.8.0-rc.1 32825ebaa0c1f6785dcd30d87f0ade45cd6c20cb 2020-03-25T21:21:56Z 794460fe3531805f0a9d1a3ccbecf07fc13df0702002651d308e1ebb3f1a525c -v1.8.0-rc.1-otp-20 32825ebaa0c1f6785dcd30d87f0ade45cd6c20cb 2020-03-25T22:36:20Z 4743096ed9861d76537c36721c9e198e0efb63536ea05d11cb3c2d50abbacbc6 -v1.8.0-rc.1-otp-21 32825ebaa0c1f6785dcd30d87f0ade45cd6c20cb 2020-03-25T22:35:32Z f5defae82816a9dfef9f77be83e8d3d9f1b82b750b44825a1bbd58b1f4224c91 -v1.8.0-rc.1-otp-22 32825ebaa0c1f6785dcd30d87f0ade45cd6c20cb 2020-03-25T22:34:43Z 225ed2da0b5d0d6f8a6ac908d06f1e5c7000bdd32cc7e896fa44bd0fdf9939c8 -v1.8.1 511a51ba8925daa025d3c2fd410e170c1b651013 2020-03-25T22:36:31Z 36ab446e5db70a7d26bffc065054b4c70f3640c4b8b0387b170543c2cd769cd1 -v1.8.1-otp-20 511a51ba8925daa025d3c2fd410e170c1b651013 2020-03-25T21:22:02Z d9f62778b673791aa2bfeb50821eac0f949243bdc26287b3bbe2227771d78a0a -v1.8.1-otp-21 511a51ba8925daa025d3c2fd410e170c1b651013 2020-03-25T22:35:35Z 1e145564990957496145884aaed03228c7dc4105473f8bf023f567aedd2191cc -v1.8.1-otp-22 511a51ba8925daa025d3c2fd410e170c1b651013 2020-03-25T22:34:51Z 3a4aaa68928a5768441577eb9c90ccfc217ecee9be9da2456dde074d93fb2eda -v1.8.2 98485daab0a9f3ac2d7809d38f5e57cd73cb22ac 2020-03-25T22:36:35Z c77e0ac5ab0ba5cff5f573cdf711ed9106db788317ab16cacdcf41a93a795d48 -v1.8.2-otp-20 98485daab0a9f3ac2d7809d38f5e57cd73cb22ac 2020-03-25T22:36:28Z c77e0ac5ab0ba5cff5f573cdf711ed9106db788317ab16cacdcf41a93a795d48 -v1.8.2-otp-21 98485daab0a9f3ac2d7809d38f5e57cd73cb22ac 2020-03-25T22:35:41Z b406265ae842fe8355244150d06c92e01ab1fdc3e985feb59e9bf13452ac9754 -v1.8.2-otp-22 98485daab0a9f3ac2d7809d38f5e57cd73cb22ac 2020-03-25T22:34:56Z 570c7b1ab710b9a44326d7badc4254f6e66ce3111a3802f0a162210144260234 -v1.9 762989b39f62e8dc8153f5ea6c71c57693ffc3f3 2020-03-25T22:36:56Z 403db3ad4ae9e27272a06c6c95850507fa34dc2b311447f2190e22fa2c901ded -v1.9-otp-20 762989b39f62e8dc8153f5ea6c71c57693ffc3f3 2020-03-25T22:36:45Z 403db3ad4ae9e27272a06c6c95850507fa34dc2b311447f2190e22fa2c901ded -v1.9-otp-21 762989b39f62e8dc8153f5ea6c71c57693ffc3f3 2020-03-25T21:21:43Z 6d538a3e45b4bee6449d085c53f104a0c9680cb006f15857cd689a2e5e3251d5 -v1.9-otp-22 762989b39f62e8dc8153f5ea6c71c57693ffc3f3 2020-03-25T21:20:47Z 80953f1a1cbd8428a3d17042360a0a2c023ea029c2199909df97045f7b962de2 -v1.9.0 71c335ac2694d4457ac8f4fefdfc68ae167c8775 2020-03-25T22:37:01Z 74808a0308d64f36946dce470b51615117c9933a4454e52d3e25538f243fcfa3 -v1.9.0-otp-20 71c335ac2694d4457ac8f4fefdfc68ae167c8775 2020-03-25T22:36:55Z 74808a0308d64f36946dce470b51615117c9933a4454e52d3e25538f243fcfa3 -v1.9.0-otp-21 71c335ac2694d4457ac8f4fefdfc68ae167c8775 2020-03-25T21:21:41Z 59dc26d6691062788ec8e774c941098eaa5f02b4ad3c33502e910e4efaf4ee1e -v1.9.0-otp-22 71c335ac2694d4457ac8f4fefdfc68ae167c8775 2020-03-25T22:35:06Z ddae00c5bca44dd5bacbc4c4200be302c96b63cbad9c4433ea9fa0bba1d0a486 -v1.9.0-rc.0 aad7aa4d2255f1c33f2de6525f67cd7e852324d2 2020-03-25T22:37:19Z b6e6026f22a7e590f3b9122f3363a09572f251a288a4e50b9faad63548e81331 -v1.9.0-rc.0-otp-20 aad7aa4d2255f1c33f2de6525f67cd7e852324d2 2020-03-25T22:37:12Z b6e6026f22a7e590f3b9122f3363a09572f251a288a4e50b9faad63548e81331 -v1.9.0-rc.0-otp-21 aad7aa4d2255f1c33f2de6525f67cd7e852324d2 2020-03-25T22:36:25Z 698b8b34f9fe12ce3fbf1cf06ca455d689ed83fb927ae70f636a058a4ef9e700 -v1.9.0-rc.0-otp-22 aad7aa4d2255f1c33f2de6525f67cd7e852324d2 2019-06-04T11:49:17Z -v1.9.1 79388035f5391f0a283a48fba792ae3b4f4b5f21 2020-03-25T22:37:38Z cf13db14a1fd86d6e8824331eca7a2b41674a4ce04fba838877952194f9d02cd -v1.9.1-otp-20 79388035f5391f0a283a48fba792ae3b4f4b5f21 2020-03-25T22:37:31Z cf13db14a1fd86d6e8824331eca7a2b41674a4ce04fba838877952194f9d02cd -v1.9.1-otp-21 79388035f5391f0a283a48fba792ae3b4f4b5f21 2020-03-25T21:22:51Z 93af7d51379858451b90c1efdd859b7c80e0d9c0fc6531cea06e4edffd85605e -v1.9.1-otp-22 79388035f5391f0a283a48fba792ae3b4f4b5f21 2020-03-25T22:35:55Z 3e9d11d583fe60b4e4d7ae23aa4fa70baf41a4d53df4d1be75d9636637f7f699 -v1.9.2 ffe7a577cc80f37381dc289c820842d346002364 2020-03-25T21:24:21Z ec94b266ec22e3479126cfca69bd84002671c93c9a9dfe13e018efc5cf090f9e -v1.9.2-otp-20 ffe7a577cc80f37381dc289c820842d346002364 2020-03-25T22:37:45Z 0971bbcfb1759fdcb2b9dd13907c1f3cb521fbd0afbd177b8a236ad2018b669f -v1.9.2-otp-21 ffe7a577cc80f37381dc289c820842d346002364 2020-03-25T22:36:59Z e579d4f46fbc847d4609d7ca1be4ce28ea08c6c46b9113a278540ea89adb31f8 -v1.9.2-otp-22 ffe7a577cc80f37381dc289c820842d346002364 2020-03-25T22:36:11Z c2a03b667d9f079558995112ca29adb11bde1eeecd6126ac74bdd4a3c583c547 -v1.9.3 5af52898d344fda201e2437319449cdc0242eb31 2020-03-25T22:38:20Z 3f8e1d964e70bbd935b24ee5d06319440b2214ef66c5e6d3007bb1737c7589b2 -v1.9.3-otp-20 5af52898d344fda201e2437319449cdc0242eb31 2020-03-25T22:38:13Z 3f8e1d964e70bbd935b24ee5d06319440b2214ef66c5e6d3007bb1737c7589b2 -v1.9.3-otp-21 5af52898d344fda201e2437319449cdc0242eb31 2020-03-25T22:37:27Z a67f1826a0ee7a66e8588d72ac50843e68316ab275656dc95e1dcca5515dc612 -v1.9.3-otp-22 5af52898d344fda201e2437319449cdc0242eb31 2020-03-25T22:36:42Z 063e93f5de308925aa198343d5fdd65a8ebdff76bf7e8c5f4c0ef76c16f67e4c -v1.9.4 055526057ac9992cc1df87441357c4e56d45235d 2020-03-25T22:38:42Z 46810a6da6e68c4ac408c6e3120d985d87485f62e4afcd62673831d328d9e588 -v1.9.4-otp-20 055526057ac9992cc1df87441357c4e56d45235d 2020-03-25T22:38:36Z 46810a6da6e68c4ac408c6e3120d985d87485f62e4afcd62673831d328d9e588 -v1.9.4-otp-21 055526057ac9992cc1df87441357c4e56d45235d 2020-03-25T22:37:52Z 1e6c090841c267c4828d68647e020c91067daace9ba05669fd5c3ec315175423 -v1.9.4-otp-22 055526057ac9992cc1df87441357c4e56d45235d 2020-03-25T22:37:07Z b5eba5ab892f431a0d914055ee0ba177304e74da0b2af5a657670aa5ce00f10f diff --git a/dist/__tests__1/otp_builds.txt b/dist/__tests__1/otp_builds.txt deleted file mode 100644 index b3342f82..00000000 --- a/dist/__tests__1/otp_builds.txt +++ /dev/null @@ -1,309 +0,0 @@ -OTP-17.0 07b8f441ca711f9812fad9e9115bab3c3aa92f79 2020-10-29T05:18:45Z -OTP-17.0.1 9e19d1bf9fc7dc322823327e5e78f4ec0c3cee37 2020-10-29T05:18:42Z -OTP-17.0.2 deacab96d83ad6432afbcba54cf2e372395008e5 2020-10-29T05:19:00Z -OTP-17.1 461dc05384eece7b4b7d84370fb0a2cf96ed2f6d 2020-10-29T05:17:11Z -OTP-17.1.1 a7176f9186ffd7eb2b26daca2264d425383cf6a7 2020-10-29T05:16:25Z -OTP-17.1.2 934b6de4d2ab6c31c5217e1ba4779ade9e37cc83 2020-10-29T05:15:14Z -OTP-17.2 c472c3f5aafc81a409d0443c4601de43bafb53cb 2020-10-29T05:13:35Z -OTP-17.2.1 56715334380680c1466d2a9165ea2f7affc93a78 2020-10-29T07:20:19Z -OTP-17.2.2 144f3e9c79a87f6477fdf547ce162a5d885aa201 2020-10-29T05:13:31Z -OTP-17.3 743ed31108ee555db18d9833186865e85e34333e 2020-10-29T05:13:25Z -OTP-17.3.1 ee24a87a779d8d10461cadd47b3eb276e70baef8 2020-10-29T05:13:20Z -OTP-17.3.2 5d49d05c3604f764736b10cfb287818d4b41efda 2020-10-29T05:11:14Z -OTP-17.3.3 461757503e8ecaaeb3ea9b84f5c0dfccd3408694 2020-10-29T05:09:52Z -OTP-17.3.4 9417f044ee3c291c2ea343c203aebdcc40597226 2020-10-29T05:08:51Z -OTP-17.4 af87b1c3d4897840d8247589a88d3611106ecedc 2020-10-29T05:05:59Z -OTP-17.4.1 6c40ea37d6ba97b12c888cc3143fbeacfb5527b0 2020-10-29T05:05:52Z -OTP-17.5 545890576542e4be630df8772654b99bd0306f62 2020-10-29T05:05:47Z -OTP-17.5.1 bbac1019905e6e493a2cd3c8463e53a818d0723d 2020-10-29T07:26:46Z -OTP-17.5.2 ff1e0b2fe44a347670a5d72c45c061fefa6abc7f 2020-10-29T05:05:37Z -OTP-17.5.3 efbfe9602983ff451b864e557bdf3733222b78ba 2020-10-29T05:04:25Z -OTP-17.5.4 10e8677c632df5f9433eb771076d1ff71c7ed75d 2020-10-29T05:02:43Z -OTP-17.5.5 f3fefbae24a2569a13b538d80d0e99129963ebef 2020-10-29T05:01:43Z -OTP-17.5.6 c1df511623b9a2a98d4d3862ae612c1ca9837da7 2020-10-29T04:58:07Z -OTP-17.5.6.1 99d3e9c5b2569169d2f5fefd67898d2533e5a83d 2020-10-29T04:58:02Z -OTP-17.5.6.10 a5d9e9901468d75a2913c83580d5e9e29f37462d 2020-10-29T07:16:25Z -OTP-17.5.6.2 12002949e5435d19c750fe2cd8e897b4059f875a 2020-10-29T04:58:14Z -OTP-17.5.6.3 155c22ff3ce3f667d4a984bd6648f029e0998381 2020-10-29T04:58:00Z -OTP-17.5.6.4 bd1251dfe4d60f09e569731d36a92e94acbe297a 2020-10-29T07:26:17Z -OTP-17.5.6.5 4481c1b152a4442f2e0a648ab2877313dcc97c50 2020-10-29T04:57:29Z -OTP-17.5.6.6 42493ad886f9b1b3e32e6f1bef084275a4480096 2020-10-29T04:56:03Z -OTP-17.5.6.7 d7db1f1612e8a5a8a732a7e055ba5618778f1ac2 2020-10-29T04:54:26Z -OTP-17.5.6.8 05cef5e3a267b3515acb834130675e0cbf69bf78 2020-10-29T04:50:16Z -OTP-17.5.6.9 6d4001de141a00b3bf37b8f7b24c5bde2b4f4015 2020-10-29T04:50:09Z -OTP-18.0 74a95b3d511177a9b35c2b0272b9ca5511b6f750 2020-10-29T04:50:18Z -OTP-18.0-rc1 bf3b377220f2531b9b101f32222067beb3ea750b 2020-10-29T04:50:28Z -OTP-18.0.1 1c14bf099be15790ccbe56f464e81a9557476b3f 2020-10-29T04:49:50Z -OTP-18.0.2 61828f77ca2542109ece006d730a4f8fe3300616 2020-10-29T04:49:21Z -OTP-18.0.3 6b4c2dbd1b4a30f421611987acec6315c62ac9d5 2020-10-29T04:46:54Z -OTP-18.1 1523be48ab4071b158412f4b06fe9c8d6ba3e73c 2020-10-29T04:41:38Z -OTP-18.1.1 a2c538dee3013bb6285027d9ae45b7f055e8e8eb 2020-10-29T07:15:59Z -OTP-18.1.2 3c799a7ee5ee26f643c7ffad79c81d6156f3dac6 2020-10-29T04:41:31Z -OTP-18.1.3 fe1df7fc6bf050cb6c9bbd99eb9393c426b62f67 2020-10-29T04:41:27Z -OTP-18.1.4 9dd0c95d56ec33bde9668bb47668aa27981ea18d 2020-10-29T04:41:34Z -OTP-18.1.5 c24a4bf84029d06cc79f49634684cd6d2eeafb62 2020-10-29T04:41:18Z -OTP-18.2 b855206a1a7788216717ca272f44e9beb1f58e7c 2020-10-29T04:41:13Z -OTP-18.2.1 21d6192389a04024f7a41ced9d0911a9cce6f4e8 2020-10-29T04:39:37Z -OTP-18.2.2 7cf9a621c5280a3e97967c4c63ab6ca1adde69c3 2020-10-29T04:33:33Z -OTP-18.2.3 d96471b3f404f7341279d8598dd74d92fb1a923c 2020-10-29T04:33:26Z -OTP-18.2.4 d646221c59fbf57d5beac913248b46f5dbebfbe7 2020-10-29T04:33:11Z -OTP-18.2.4.0.1 a7f420e08aabe6af376f7b9c6f6bd50f342dfe8b 2020-10-29T04:33:02Z -OTP-18.2.4.1 c0540f1b946d699afbe496ab7c481d88eb9ae78b 2020-10-29T04:33:20Z -OTP-18.3 5e1b5ef47f3f2b898d30e0425823835bd9a574d4 2020-10-29T04:33:15Z -OTP-18.3.1 afe72bfc1448ff426c38eceb7412f69e973aef62 2020-10-29T04:33:06Z -OTP-18.3.2 fea24ae8d37b33e97ef1897d0d3b6cdb2338c051 2020-10-29T04:32:41Z -OTP-18.3.3 1ab69efa960703b86a13ea6ba96f4fd56f1565f9 2020-10-29T04:25:56Z -OTP-18.3.4 53e7743216647d810d529e397bd3ea7278c6047c 2020-10-29T04:25:26Z -OTP-18.3.4.1 5cf780148575f1ea4c460d7c9783831e6fbce9ff 2020-10-29T04:25:06Z -OTP-18.3.4.1.1 7dd7c1aad07b726759dc98bb2a439e32d2e833f1 2020-10-29T07:15:29Z -OTP-18.3.4.10 5fcec3e909f3a2eebef82c974e3cfb351398fd20 2020-10-29T04:16:35Z -OTP-18.3.4.11 1283ca3bc4bba3381f8fd1f59fb62780d3e17472 2020-10-29T04:16:26Z -OTP-18.3.4.2 f5ef4087331c0181fd154dcaa372a05e6f8bd408 2020-10-29T04:24:47Z -OTP-18.3.4.3 e7966ef5cb0c2337a674d8cdca7c89802fa01bf6 2020-10-29T04:24:43Z -OTP-18.3.4.4 7518684155aaabdde97c7b624803523c045bc185 2020-10-29T07:14:16Z -OTP-18.3.4.5 79ea550fdf9ebd02c1932728dac509cd0d520a7c 2020-10-29T04:24:33Z -OTP-18.3.4.6 70213bdf6cfa2e61c7e9013c4c217a1857b9df2e 2020-10-29T04:19:24Z -OTP-18.3.4.7 8c54c2199c503e7eac931b4e1765f5307726dcc8 2020-10-29T04:17:59Z -OTP-18.3.4.8 ba3710484344ed57124574abcd0f19fbe251389c 2020-10-29T07:12:44Z -OTP-18.3.4.9 60abdddf4bc5a25ca31af151642ca59c7dd07e92 2020-10-29T04:16:40Z -OTP-19.0 3b7a6ffddc819bf305353a593904cea9e932e7dc 2020-10-29T04:12:26Z -OTP-19.0-rc1 f68a3780fbcc836c7036b55db5ee1d0447213c8f 2020-10-29T04:16:44Z -OTP-19.0-rc2 2c9dba638a8bda92e3db2d5c07e6ba251330c7ca 2020-10-29T07:12:03Z -OTP-19.0.1 0573efbc18fc20f8646cf3ff64d2affd06e03cb8 2020-10-29T04:11:43Z -OTP-19.0.2 b490fb8664ec6e5ceaadc1c74350dc666f5406d2 2020-10-29T07:11:52Z -OTP-19.0.3 020d38d4c9062f255b52eeb35542152c7cff1598 2020-10-29T04:08:24Z -OTP-19.0.4 19db7510939149206017c925032d390da9a83fe9 2020-10-29T07:09:27Z -OTP-19.0.5 71894a879d6254693791585246ce340dd7414b82 2020-10-29T04:08:21Z -OTP-19.0.6 226a754d1f4babb262b2a15569b174921f97ad86 2020-10-29T04:08:20Z -OTP-19.0.7 33b39b559a31c38465dfc038218f432c9c60a9ad 2020-10-29T04:08:22Z -OTP-19.1 e6059f94571a6c968c15b9de6b7d63ebd64f9acf 2020-10-29T04:04:22Z -OTP-19.1.1 310b00b7fc18b5883f5f2cb1b992deb1dd6c9a65 2020-10-29T04:04:14Z -OTP-19.1.2 7a5356d99d8f01572b67305cc9a86446fad351e3 2020-10-29T07:08:18Z -OTP-19.1.3 a59807ef9a6a8af6eb6f13976eb405ddb9baad6c 2020-10-29T04:00:03Z -OTP-19.1.4 c1c2149818396bdefe9eff995184f8864f18fca3 2020-10-29T03:59:57Z -OTP-19.1.5 926391fbb8761d5833b3a6f5c9e523fcda373c6d 2020-10-29T04:00:00Z -OTP-19.1.6 2b41d8f318b7e5ec139d42fd2f01a132699be839 2020-10-29T07:07:28Z -OTP-19.1.6.1 6ceb840258a6faf74f63b481198ae4bf9399f2d0 2020-10-29T03:59:55Z -OTP-19.2 3473ecd83a7bbe7e0bebb865f25dddb93e3bf10f 2020-10-29T03:56:39Z -OTP-19.2.1 bca5bf5a2d68a0e9ca681363a8943809c4751950 2020-10-29T03:56:07Z -OTP-19.2.2 51faafa9a20c4afa7944b8089b26f22c774bed19 2020-10-29T03:51:17Z -OTP-19.2.3 aa315e1cf1b79ab782e5b4c944595495ebf4e2f4 2020-10-29T03:51:20Z -OTP-19.2.3.1 677cbdffef317aaff00f1ef7eda0e28bd88fbb96 2020-10-29T03:51:13Z -OTP-19.3 a748cafdc7063d9f181ba12088db6458793ced2f 2020-10-29T03:51:15Z -OTP-19.3.1 d25ad84195ca42969fbfb017a52aab8c8effc246 2020-10-29T03:51:14Z -OTP-19.3.2 6acb7d6fb8d23c0b0b78d30a618d2636ad463e6e 2020-10-29T07:16:03Z -OTP-19.3.3 0298a195873c606ac885d37f54a098eca3d7905a 2020-10-29T03:50:34Z -OTP-19.3.4 f954cdea9b67369185094a3aea7cb611dd680b3c 2020-10-29T03:49:01Z -OTP-19.3.5 87bca557898bea79dbd53d59b21f6e7384e3a25d 2020-10-29T03:43:10Z -OTP-19.3.6 da06fd040775fffee17409ebbd6fa797e34d6f99 2020-10-29T03:42:52Z -OTP-19.3.6.1 8d9cde83b628533ae7a5fe85a5dd9c6c00c084e3 2020-10-29T03:42:31Z -OTP-19.3.6.10 5e64ffd74845a2b3b0a31968d31b2b409de41ca1 2020-10-29T03:34:14Z -OTP-19.3.6.11 58966e6d0b8ebdb96db02e42dd422f15be829df1 2020-10-29T07:06:17Z -OTP-19.3.6.12 ffc6c26914813a95fe0652c51b57c3c00a9f4ad7 2020-10-29T03:34:05Z -OTP-19.3.6.13 777e8a89dc5cabe4acd4910ce5e8f9e7e5d8d6b5 2020-10-29T07:03:33Z -OTP-19.3.6.2 0c0d7899f869eae275a9dd2677791f34bbd25bfe 2020-10-29T03:42:37Z -OTP-19.3.6.3 2cc46961352aded5c84ecb9bcb32581461dbc047 2020-10-29T03:42:33Z -OTP-19.3.6.4 e64a1f429ec5f7534e0201fed42967aeb1aae8d8 2020-10-29T03:42:30Z -OTP-19.3.6.5 2e7160f3c28d495a8b798c5f8b484b1b977cee8e 2020-10-29T03:42:39Z -OTP-19.3.6.6 33521da61673b890bcd05eda02f38fea1fe58a30 2020-10-29T03:42:09Z -OTP-19.3.6.7 bf70d8de7a6c52cb3ba51ae3e5506d8fc31bbc69 2020-10-29T07:07:13Z -OTP-19.3.6.8 90edf69ba7acbfaa55a709fa115ce8bb782b9dc9 2020-10-29T03:37:39Z -OTP-19.3.6.9 3d0c4930775cf2ab304d5e4701b41ffc2936ce53 2020-10-29T03:35:32Z -OTP-20.0 040bdce67f88d833bfb59adae130a4ffb4c180f0 2020-10-29T03:30:08Z -OTP-20.0-rc1 4f03eba5294f1c1bc922b07f1267e6b0099fd4b5 2020-10-29T03:34:07Z -OTP-20.0-rc2 d106c5fffb3832fffbdf99cca905390fe15d489f 2020-10-29T03:33:57Z -OTP-20.0.1 a01de6873844ba510084090abec734c4166d71fa 2020-10-29T03:29:36Z -OTP-20.0.2 6ede2da826335960037299d9f3b0e66d072ea5a0 2020-10-29T03:27:26Z -OTP-20.0.3 41878bba817fc2ec9e08529afe19c2655742dbd1 2020-10-29T03:25:53Z -OTP-20.0.4 a230f26086b3db9097f06d4bb91fb3b2e9379c77 2020-10-29T03:25:48Z -OTP-20.0.5 a3c983b4ba8755e39083bdaa785e400e8b5d745c 2020-10-29T03:17:54Z -OTP-20.1 02fd746c40e829adbe77cc526c7df904698e2534 2020-10-29T03:17:52Z -OTP-20.1.1 69292a11cd4b31fd3ff73b44f28d527f2d16f555 2020-10-29T03:17:05Z -OTP-20.1.2 919ef5de2858e606d4a9be3e0e995b0802c76e33 2020-10-29T03:14:09Z -OTP-20.1.3 a98379d0519c28f9bc9b673ed2c09fb1ad52456e 2020-10-29T03:14:16Z -OTP-20.1.4 3e8c1ff94c0a73df71daadd4eb782c21c49f22d9 2020-10-29T03:10:21Z -OTP-20.1.5 84f29ab803e8f36ef058a47f4c2b224f4dd58220 2020-10-29T03:10:18Z -OTP-20.1.6 f021a71ad8ffd2d1f5548927944d2b08935511d1 2020-10-29T03:10:13Z -OTP-20.1.7 2302ea8ca97b8a9075e9234d15430c47d3a115c8 2020-10-29T03:11:17Z -OTP-20.1.7.1 715c34cbea60ee6527b1963f8802f053e705a03e 2020-10-29T03:10:09Z -OTP-20.2 44b09e036b31b29dddc3b178e8f6b9fc96a9a874 2020-10-29T03:22:58Z -OTP-20.2.0.1 3f45d2f012d18a44e28be5c944b92996d8f4f517 2020-10-29T03:10:00Z -OTP-20.2.1 3a14bb468b1f3f1f5bef3c18291fe0498429a417 2020-10-29T03:07:00Z -OTP-20.2.2 194513197e19cd592f3f5c2231510542f5193fe4 2020-10-29T03:06:38Z -OTP-20.2.3 309ef748ddc5bde4bcba280ce2739385f27a76e6 2020-10-29T03:02:34Z -OTP-20.2.4 13c6a4bf01d39a5002e09ef1f82619cde9f2c90c 2020-10-29T03:02:16Z -OTP-20.3 a113f6117fd696ea6f84ed754055b4ec97a7ccb2 2020-10-29T03:02:29Z -OTP-20.3.1 0f2ead7bedeedc852db2deeeaa0e9e096bba8c0f 2020-10-29T03:02:09Z -OTP-20.3.2 c5ee502e6031986983d3596745cad7fd547fd9c2 2020-10-29T03:02:03Z -OTP-20.3.2.1 3c2908f8a6d4b55407c553db09cef8e22848c152 2020-10-29T03:02:06Z -OTP-20.3.3 6fad272f6b0a6b751386497191eb26e62e800ae2 2020-10-29T03:01:13Z -OTP-20.3.4 f2c1d537dc28ffbde5d42aedec70bf4c6574c3ea 2020-10-29T02:58:59Z -OTP-20.3.5 b5b627ded69445c06e8fbe34cda3421854c5582e 2020-10-29T02:47:15Z -OTP-20.3.6 40ab3958644be3fc14682c54233514fdf880386a 2020-10-29T02:46:52Z -OTP-20.3.7 cfaede58328ace4bb4fb7c5e1b055e420c0ded9a 2020-10-29T02:46:18Z -OTP-20.3.8 db6059a9217767a6e42e93cec05089c0ec977d20 2020-10-29T02:46:31Z -OTP-20.3.8.1 aa490b13a7f98e54c48fea3537f02614f1145ffc 2020-10-29T02:55:52Z -OTP-20.3.8.10 2e6b0b105b48e072d13672e0ca73107fc75cbcdc 2020-10-29T02:38:01Z -OTP-20.3.8.11 1da4135c98d9160d2d890724eb423db1fd1e39a2 2020-10-29T02:34:52Z -OTP-20.3.8.12 cb86d6daabc6dc2af7d05fd1c5b44b1697bad926 2020-10-29T02:34:06Z -OTP-20.3.8.13 39676016001f61affa62f040f42c704a62fa542c 2020-10-29T02:33:58Z -OTP-20.3.8.14 166aa12d68c71814ad3a06345bec57fa78a4b7de 2020-10-29T02:17:49Z -OTP-20.3.8.15 e6bf92e6e1a691bba97ea3d339fdab1872b823b3 2020-10-29T02:33:07Z -OTP-20.3.8.16 13f956c27a25b726b0cc297740d1f14bf854567f 2020-10-29T02:31:49Z -OTP-20.3.8.17 0d6eeb82210b5ad848af972c3b2f687a52edd156 2020-10-29T02:30:37Z -OTP-20.3.8.18 354da9029c62668d1ef5284aa60426d3b5349ecb 2020-10-29T02:30:27Z -OTP-20.3.8.19 487729f0a064d32a3fea6ad092f59a60ee53ca5f 2020-10-29T02:30:04Z -OTP-20.3.8.2 857156bcadae45fe112911bd7ca735ac6f3ca9d2 2020-10-29T02:46:07Z -OTP-20.3.8.20 8ab1bc2af5933b36c1583b1168e9b7875334cd50 2020-10-29T02:28:08Z -OTP-20.3.8.21 22a55c40254cfee683e070167794fab632bef865 2020-10-29T02:25:50Z -OTP-20.3.8.22 b228a78ccf59d79da8ba5bcbe7a354206b138595 2020-10-29T02:25:37Z -OTP-20.3.8.23 1d1ee8f87ae2b651dbb2502fc19577a6a3a6f34b 2020-10-29T02:11:20Z -OTP-20.3.8.24 edc678d5add2c741bc6d63f9f434e43e9bb12dae 2020-10-29T02:09:42Z -OTP-20.3.8.25 6a99831ae3c5c7962929108480323792af6cbc61 2020-10-29T02:07:53Z -OTP-20.3.8.26 8b1efc6cc3fa3b64bae51db4943f77f8ddd1399c 2020-10-29T02:07:43Z -OTP-20.3.8.3 107c492a5e3ebe315d68f9438191f2b0c2d37e5b 2020-10-29T02:42:23Z -OTP-20.3.8.4 757057b32f60fc1626af9593b49975f40fcceefd 2020-10-29T02:41:35Z -OTP-20.3.8.5 fe34bce692c8f83f46771f1f85a62137de10edd7 2020-10-29T02:40:52Z -OTP-20.3.8.6 2c7fbaf3b358a01c2d7541220d455759bea413b5 2020-10-29T02:38:52Z -OTP-20.3.8.7 8bb0d5d4049b6b2ec41f6cc3e154e9f688029bef 2020-10-29T02:38:36Z -OTP-20.3.8.8 9dc3d174810d468e718731953de3e9cc4bc95f43 2020-10-29T02:45:52Z -OTP-20.3.8.9 0eab3e63a93235cfa0bda36d25df15fd9421e642 2020-10-29T02:38:08Z -OTP-21.0 a0ae44f324576104760a63fe6cf63e0ca31756fc 2020-10-29T02:07:04Z -OTP-21.0-rc1 24bfa1943a85f9f9db34a799d44e072306694db9 2020-10-29T02:07:18Z -OTP-21.0-rc2 d3b4568f6d910eb4ce26b7a899c8c414ae252386 2020-10-29T02:07:10Z -OTP-21.0.1 a09907d56e29b24ded9a34de82bceac7f39021d1 2020-10-29T02:07:07Z -OTP-21.0.2 1f55b15c5e3f6ff79c855963876c501e9f782406 2020-10-29T02:06:36Z -OTP-21.0.3 a3a900e382ccba96ef15369c5771070e538b8367 2020-10-29T02:02:38Z -OTP-21.0.4 4664de710ded469916fcc8f85d4e9791adc319e9 2020-10-29T02:01:27Z -OTP-21.0.5 e37eec271ad08a6689e358071eeb800674cde938 2020-10-29T02:01:15Z -OTP-21.0.6 53b1e77ea7be8d90d652521a2326046b5d95c3e2 2020-10-29T02:00:18Z -OTP-21.0.7 f7012b7a731924193cf05fc77b103e89bd0fcbfb 2020-10-29T01:59:14Z -OTP-21.0.8 30e5321740b96b3a8984611b6f821692716d0555 2020-10-29T01:59:06Z -OTP-21.0.9 333e4c5a1406cdeb9d1d5cf9bf4a4fadb232fca8 2020-10-29T01:58:48Z -OTP-21.1 377f19f25aeec6939a6728bd0c4910086c22ccdc 2020-10-29T02:25:14Z -OTP-21.1.1 d9682b02b81fa6e23e554b6e017650eb89ecebed 2020-10-29T01:57:51Z -OTP-21.1.2 db35a04a38f9501b921beac2c46576c5fa13e75a 2020-10-29T01:54:45Z -OTP-21.1.3 9103097e3480b5fa8737205793df56c6288f5733 2020-10-29T01:53:53Z -OTP-21.1.4 51b11a0e7ad7794810be28b7239639784a85caf7 2020-10-29T01:53:44Z -OTP-21.2 3825199794da28d79b21052a2e69e2335921d55e 2020-10-29T01:53:14Z -OTP-21.2.1 5da29dab1d0de935b37cbfc9018d0d01955f1f48 2020-10-29T01:52:10Z -OTP-21.2.2 f0ea49125815ec9197ffb6c74e20ebb5f10732d4 2020-10-29T01:51:35Z -OTP-21.2.3 3f4b17036bb6dbd302da3c38830512439b146e34 2020-10-29T01:50:43Z -OTP-21.2.4 35f51c7f057943c25ccb7997526c9d47aed0cd0b 2020-10-29T02:25:18Z -OTP-21.2.5 934f9974eb6bec43cd9445ec0f5019a4d1389428 2020-10-29T01:50:10Z -OTP-21.2.6 f30b1052c7097a95faaba272feccc6190682a7f8 2020-10-29T01:47:08Z -OTP-21.2.7 0ec68a93247ca0ea1d44a2465767dffa4450411a 2020-10-29T01:45:44Z -OTP-21.3 620ac3e68c5bc8b36143965fcf2892a07dc005c4 2020-10-29T01:45:24Z -OTP-21.3.1 a4f71b669ad9ece1a4afa671601c7c72dc89f042 2020-10-29T12:55:36Z -OTP-21.3.2 7e6fff1e849998a3dd747b4d3cf35f39cb896aa0 2020-10-29T01:45:27Z -OTP-21.3.3 1feae54b6a313f7a35ca1671e3c50f8b434a1bb0 2020-10-29T01:45:05Z -OTP-21.3.4 7ad05d6dd4230061e8120ae8c0dec2535f47e294 2020-10-29T01:44:38Z -OTP-21.3.5 5d05cf5417b9f447a2de1cfaf705371c9ba64d50 2020-10-29T01:43:08Z -OTP-21.3.6 98669a56d4cacf5bf6c7413d264dc50289f84bb9 2020-10-29T02:24:43Z -OTP-21.3.7 68a90eb777b5c1e48c0760337fbf2b0b8a9aa6aa 2020-10-29T01:42:38Z -OTP-21.3.7.1 bfc4332e536d0ac9fdba62762607416c24e52ee9 2020-10-29T01:40:11Z -OTP-21.3.8 7fe7fa3dde556b5b92522f8279d465bb52baf1f6 2020-10-29T01:38:00Z -OTP-21.3.8.1 3b2c1dd3fdf1fec362cff3a88e188ef989ee79e5 2020-10-29T01:37:14Z -OTP-21.3.8.10 d0389a71bf302e2fd9487c1328ec0a5f33169639 2020-10-29T01:30:38Z -OTP-21.3.8.11 2896f4f12a9d9c3adeea41537348ded1a0f7ed32 2020-10-29T01:28:39Z -OTP-21.3.8.12 4b1a7d77593cab824bb5ea65bb58043adb5e2556 2020-10-29T02:23:39Z -OTP-21.3.8.13 d9523afc8bb54fa9772462170018f982359c0e0d 2020-10-29T01:28:21Z -OTP-21.3.8.14 8c27af949727bc5569b52d28dc4bf4a434d4f67d 2020-10-29T01:28:09Z -OTP-21.3.8.15 2cff1df7d6ba2ac8280fc1dfcde273bcd53b5727 2020-10-29T01:27:21Z -OTP-21.3.8.16 30c9094138934afbc88ab5827a409466464f37fd 2020-10-29T01:26:59Z -OTP-21.3.8.17 460a07fd6ea0213b245cec82caf2d325d1e55592 2020-10-29T01:26:55Z -OTP-21.3.8.18 526ba5933944a309d5225b801d936d0b41c622f3 2020-10-29T02:23:06Z -OTP-21.3.8.19 23719563b2a8255dd29c9bb102648b7e5188d633 2021-01-20T08:58:40Z -OTP-21.3.8.2 2bcc317861b118461376766692968775ab405cef 2020-10-29T01:37:11Z -OTP-21.3.8.20 775806a5363ad496ca573f4baa797628d15d7e2f 2021-01-25T10:49:10Z -OTP-21.3.8.21 67d0dd0997c3ac162b180cf86a084b34cabb9e0b 2021-02-19T12:32:10Z -OTP-21.3.8.3 9127de8d0204755a7a95b674e77c6aa0583efce0 2020-10-29T01:37:13Z -OTP-21.3.8.4 348e328375fb774b3fa919ffd1c4811367406516 2020-10-29T01:36:58Z -OTP-21.3.8.5 1be06fca56f5a13894b5317292fb3077d99e27d5 2020-10-29T01:35:53Z -OTP-21.3.8.6 4e0ab84c9f5f57bf73f72294789a447f458291f5 2020-10-29T01:35:26Z -OTP-21.3.8.7 9cf26085b35d8b305369f495001295e2dea90a84 2020-10-29T01:35:24Z -OTP-21.3.8.8 d233c924fe2de37c60b8d35898e57a8dcf6924d8 2020-10-29T01:35:07Z -OTP-21.3.8.9 76b004486063ac78586c8de69b2a7c9bd5ecc1f5 2020-10-29T01:32:36Z -OTP-22.0 6618ce7b6a621e92db72ea4f01f7d38553c8818c 2020-10-29T01:19:35Z -OTP-22.0-rc1 91637325d535b0881f6cc279927785d8ae0350e2 2020-10-29T01:24:37Z -OTP-22.0-rc2 d1b431a72f65ace425d6d85e57cb6e374f8d896d 2020-10-29T01:23:12Z -OTP-22.0-rc3 5b56ecbe12493a1ff6a0e975a65cefd09005cecd 2020-10-29T01:20:46Z -OTP-22.0.1 d32991afaf3fc5f9f73e3e2448672bb9a1b80101 2020-10-29T02:22:10Z -OTP-22.0.2 abbe8d424676a473bcebdf3b97996ac7a5a70f16 2020-10-29T01:19:15Z -OTP-22.0.3 b4fb2e5669acb02697d9a9ab168eb0fbff6f370c 2020-10-29T01:18:31Z -OTP-22.0.4 4319a7f8bc93388ec540e954eb9bb73ea1eec4ef 2020-10-29T01:17:57Z -OTP-22.0.5 7999631c63998cffc07bbcc91dd86cbe709dde5f 2020-10-29T01:17:55Z -OTP-22.0.6 fa5e2cae48323a391ff65512a972d6c9f4ba4119 2020-10-29T01:17:04Z -OTP-22.0.7 3967d28c05dae77db30b15e56eb4ececf4f1afef 2020-10-29T02:21:11Z -OTP-22.1 e62a389ce5dd27e7b26802243a5565ffd1feaef0 2020-10-29T01:14:36Z -OTP-22.1.1 2d381f491bb62cd80209dcddfe9ad79eaad6f71d 2020-10-29T01:12:43Z -OTP-22.1.2 b309db9f63bc6c07ecf1a273203791121d255e90 2020-10-29T01:10:50Z -OTP-22.1.3 a54dabce8c298a630f868a02ba7ef208df61080d 2020-10-29T01:09:58Z -OTP-22.1.4 6611181ae71422a1c66798718b37474641a090a9 2020-10-29T01:09:53Z -OTP-22.1.5 aa04ba3832f90baf4d7a5db46c7e30f159dd1853 2020-10-29T01:08:39Z -OTP-22.1.6 1ebb35ecf7de8e2763e665339e4e8f54500f5274 2020-10-29T01:07:53Z -OTP-22.1.7 0739760ac6ad4c9b2a92bca04a6e68a0e90528ad 2020-10-29T01:07:38Z -OTP-22.1.8 e6bb29f2aa9241b1966085c2264eb7f92d018b7e 2020-10-29T01:07:48Z -OTP-22.1.8.1 3affe7fb59341494cec157615a81a036956d7612 2020-10-29T01:06:53Z -OTP-22.2 926f03ce5ba4f2156a36940d267a1a1e683484ff 2020-10-29T01:06:41Z -OTP-22.2.1 4583b137e585e59a3fc7020b781911a6927187a2 2020-10-29T01:05:22Z -OTP-22.2.2 11b70e35e2322819d3b1bbe6a9af17800671394c 2020-10-29T01:03:21Z -OTP-22.2.3 33feb560af990dffdc138172741b16d7cac9bcb5 2020-10-29T01:01:50Z -OTP-22.2.4 692c0a4f98a85b81de8121ee2a452aa7350c819f 2020-10-29T01:01:37Z -OTP-22.2.5 19f272489dcac18147747c6a8b011e0d264cdfe8 2020-10-29T01:00:43Z -OTP-22.2.6 fb2d77b683aa21e2af801bcba4647cd6f826dd40 2020-10-29T00:59:15Z -OTP-22.2.7 60d3c955652cbd44e9d1e300b4834e16db565ce1 2020-10-29T00:59:07Z -OTP-22.2.8 1af6e2d6313aab7a736008f17fc6577e3ceb9195 2020-10-29T00:59:25Z -OTP-22.3 5b526169ea616e87a7145d2a996b94a91879f200 2020-10-29T00:58:38Z -OTP-22.3.1 f30844e4c506405c5219ecdfe1ed2989a2a6f1e2 2020-10-29T00:44:54Z -OTP-22.3.2 b55ccdf1539e9c80033c0f9d10aecaee3ab434d1 2020-10-29T00:44:45Z -OTP-22.3.3 e17bf2e452a421743f028960b4e1c559f3f8f450 2020-10-29T00:42:54Z -OTP-22.3.4 6d5a5f31c36bbdaad21585d25974177bd1b75e66 2020-10-29T00:58:23Z -OTP-22.3.4.1 7367d5d70409cd3696eb84f2e59ebab58ca14be7 2020-10-29T00:42:08Z -OTP-22.3.4.10 17c8d420e951b6723bac56478c5267a6c0503db0 2020-10-29T00:33:35Z -OTP-22.3.4.11 579c0a40867e3d0f6f5ad0a23c38fcea679bf4e9 2020-10-29T00:33:28Z -OTP-22.3.4.12 038a4e93f3779101dbfb48548c1dc575a1e94f1e 2020-10-29T00:33:14Z -OTP-22.3.4.13 59828a7d10c6202715099ae0ae4640801feb33ac 2020-12-07T10:21:46Z -OTP-22.3.4.14 982bf944b0a7e00dfcbf39703b9e47092b21e0ec 2021-01-13T13:06:23Z -OTP-22.3.4.15 70a94146d27e57524b34d79ab915adf54347ba0a 2021-01-20T09:12:23Z -OTP-22.3.4.16 304a086f18cbe9eb1b88d06afcaa6efdbb57dacc 2021-02-19T12:15:33Z -OTP-22.3.4.2 5664ccc8f9bbe6d22e4d088e85386cd7ffcee120 2020-10-29T00:41:59Z -OTP-22.3.4.3 2474135c753cfca3dde9141173b262a6e1da2f81 2020-10-29T00:41:50Z -OTP-22.3.4.4 351350b77159a50ec557bee3d423d7f6755cbc2e 2020-10-29T00:41:11Z -OTP-22.3.4.5 df83e85b18448379170c523e901e83357ba985fd 2020-10-29T00:39:40Z -OTP-22.3.4.6 7339e8f745c9ae4cc71e8dc09be37e3116249392 2020-10-29T00:36:58Z -OTP-22.3.4.7 4fe38e31ba9110fac6dcfecea198fa4fecf9d120 2020-10-29T00:36:45Z -OTP-22.3.4.8 dcedff2a67861fb546626c3e6e9fc41cbc17de6d 2020-10-29T00:36:49Z -OTP-22.3.4.9 9fc11d032af0d72b462d2b64c925213718c2ce56 2020-10-29T00:35:19Z -OTP-23.0 7a8d04dbcb388a5d837a213ad249c1b96e19e998 2020-11-22T21:02:22Z -OTP-23.0-rc1 2b823b90b7dbd56aae3a3fbdcb182f9fd5127a59 2020-11-22T21:18:29Z -OTP-23.0-rc2 a24425668beed38e04039c292361e09c4826683f 2020-11-22T21:14:04Z -OTP-23.0-rc3 9f17d424ada5353db1e5b31296484d95679f8ca8 2020-11-22T21:10:57Z -OTP-23.0.1 dfe280693df2990e1ee31ece3431e85a3c3dc07d 2020-11-22T21:01:04Z -OTP-23.0.2 d687a6f130d6554728cc250b932bad50bb729502 2020-11-22T20:56:32Z -OTP-23.0.3 44b6531bc575bac4eccab7eea2b27167f0d324aa 2020-11-22T20:49:01Z -OTP-23.0.4 c210ba41b305763f51a1f9663b616f606b10d42e 2020-11-22T20:44:28Z -OTP-23.1 1b5dce9313e29c320593b3bba5ca020a23019706 2020-11-22T20:36:51Z -OTP-23.1.1 3f21ce1e6a5d6c548867fa4bc9a8c666c626ade1 2020-11-22T18:47:22Z -OTP-23.1.2 fea47f1127b7190898b84852a90a4426fa022b39 2020-11-22T20:35:45Z -OTP-23.1.3 8e87411a2552104111a2f4592a972e5c7c6f8723 2020-11-22T20:19:57Z -OTP-23.1.4 f48399440e07199f89e589ac91bc866651264298 2020-11-22T20:19:17Z -OTP-23.1.5 600506690a10215a6c7e21eefbf855216cda4c33 2020-12-07T08:58:18Z -OTP-23.2 5a3d03ee2c12f4c93cf7375abdb3c04f7423f76d 2020-12-16T07:44:11Z -OTP-23.2.1 2c89431fa867d5b1cc56f26a9282bcfb6fcdec58 2020-12-21T10:08:46Z -OTP-23.2.2 1a7dc7ad22b089a01b253432484983fd6e141103 2021-01-15T11:06:16Z -OTP-23.2.3 050a78f8a67ed76a632f0e73b76ceb83e7054e5f 2021-01-20T12:37:28Z -OTP-23.2.4 74d045d62e283948247e03a93d22171802997804 2021-02-04T14:31:11Z -OTP-23.2.5 93caf7975a293bfd842f2c77ccab3bb8a4660363 2021-02-16T09:19:03Z -OTP-23.2.6 e8f9f260722457c48a801ba91f087cd986376fcd 2021-02-25T09:27:11Z -OTP-23.2.7 122ab644d8bf71c8afd099409e0032beb61aa464 2021-03-03T09:21:08Z -OTP-24.0-rc1 655bd1a27673720bcee187e9fd9f07d739860ad3 2021-02-24T09:21:45Z -maint 795417e9c98358bb82bb7f80a99f2f892c56fc49 2021-03-13T03:08:29Z -maint-17 a5d9e9901468d75a2913c83580d5e9e29f37462d 2020-10-31T03:10:41Z -maint-18 1283ca3bc4bba3381f8fd1f59fb62780d3e17472 2020-10-30T03:21:15Z -maint-19 777e8a89dc5cabe4acd4910ce5e8f9e7e5d8d6b5 2020-10-30T03:22:21Z -maint-20 8b1efc6cc3fa3b64bae51db4943f77f8ddd1399c 2020-10-30T03:22:14Z -maint-21 67d0dd0997c3ac162b180cf86a084b34cabb9e0b 2021-02-20T03:13:23Z -maint-22 304a086f18cbe9eb1b88d06afcaa6efdbb57dacc 2021-02-20T03:11:10Z -maint-23 122ab644d8bf71c8afd099409e0032beb61aa464 2021-03-04T03:11:26Z -master 13f941d2ed90b3dcb0f8fc97bbad79bcdc474f64 2021-03-13T03:08:08Z diff --git a/dist/__tests__1/setup-elixir.test.js b/dist/__tests__1/setup-elixir.test.js deleted file mode 100644 index c5fe7531..00000000 --- a/dist/__tests__1/setup-elixir.test.js +++ /dev/null @@ -1,39 +0,0 @@ -const setupElixir = require('../src/setup-elixir') -const {deepStrictEqual} = require('assert') - -async function test() { - let vsn - vsn = await setupElixir.getOTPVersion('19.3.x', 'ubuntu-16.04') - deepStrictEqual(vsn, 'OTP-19.3.6') - - vsn = await setupElixir.getOTPVersion('^19.3.6', 'ubuntu-16.04') - deepStrictEqual(vsn, 'OTP-19.3.6') - - vsn = await setupElixir.getOTPVersion('^19.3', 'ubuntu-18.04') - deepStrictEqual(vsn, 'OTP-19.3.6') - - vsn = await setupElixir.getElixirVersion('v1.10.x', 'OTP-23') - deepStrictEqual(vsn, ['v1.10.4', '23']) - - vsn = await setupElixir.getElixirVersion('^v1.10', 'OTP-23') - deepStrictEqual(vsn, ['v1.10.4', '23']) - - vsn = await setupElixir.getElixirVersion('v1.11.0-rc.0', 'OTP-23') - deepStrictEqual(vsn, ['v1.11.0-rc.0', '23']) - - vsn = await setupElixir.getRebar3Version('3.x') - deepStrictEqual(vsn, '3.14.4') - - vsn = await setupElixir.getRebar3Version('^3.14.4') - deepStrictEqual(vsn, '3.14.4') - - vsn = await setupElixir.getRebar3Version('^3.14') - deepStrictEqual(vsn, '3.14.4') -} - -test() - .then(() => process.exit(0)) - .catch((err) => { - console.error(err) - process.exit(1) - }) diff --git a/dist/index.js b/dist/index.js index 1f5d2580..f40bf0ab 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3940,10 +3940,6 @@ const installer = __nccwpck_require__(2127) const path = __nccwpck_require__(5622) const semver = __nccwpck_require__(1383) const https = __nccwpck_require__(7211) -const { - _fstat, - promises: {readFile}, -} = __nccwpck_require__(5747) main().catch((err) => { core.setFailed(err.message) @@ -3952,27 +3948,27 @@ main().catch((err) => { async function main() { installer.checkPlatform() - installOTP() + const osVersion = getRunnerOSVersion() + const otpBuildsListing = `https://repo.hex.pm/builds/otp/${osVersion}/builds.txt` + installOTP(osVersion, otpBuildsListing) .then((otpVersion) => { - const elixirSpec = getElixirSpecFromInput() - if (elixirSpec) { - installElixir(elixirSpec, otpVersion) - .then(() => { - mixRebarAndHex() - }) - } + const elixirBuildsListing = 'https://repo.hex.pm/builds/elixir/builds.txt' + maybeInstallElixir(otpVersion, elixirBuildsListing) + .then((installed) => { + if (installed) { + mixRebar() + mixHex() + } + }) - const rebar3Spec = getRebar3SpecFromInput() - if (rebar3Spec) { - installRebar3(rebar3Spec) - } + const rebar3BuildsListing = 'https://api.github.com/repos/erlang/rebar3/tags' + maybeInstallRebar3(rebar3BuildsListing) }) } -async function installOTP() { - const osVersion = getRunnerOSVersion() - const otpSpec = getOTPSpecFromInput() - const otpVersion = await getOTPVersion(otpSpec, osVersion) +async function installOTP(osVersion, otpBuildsListing) { + const otpSpec = core.getInput('otp-version', {required: true}) + const otpVersion = await getOTPVersion(otpSpec, osVersion, otpBuildsListing) console.log(`##[group]Installing Erlang/OTP ${otpVersion} over ${osVersion}`) await installer.installOTP(osVersion, otpVersion) console.log(`##[endgroup]`) @@ -3980,82 +3976,66 @@ async function installOTP() { return otpVersion } -async function installElixir(elixirSpec, otpVersion) { - const [elixirVersion, otpMajor] = await getElixirVersion( - elixirSpec, - otpVersion, - ) - console.log(`##[group]Installing Elixir ${elixirVersion}`) - await installer.installElixir(elixirVersion, otpMajor) - console.log(`##[endgroup]`) - core.setOutput('elixir-version', elixirVersion) - const matchersPath = __nccwpck_require__.ab + ".github" - console.log(`##[add-matcher]${path.join(matchersPath, 'elixir.json')}`) -} - -async function mixRebarAndHex() { - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/otp/bin` - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/elixir/bin` - - let installRebar = core.getInput('install-rebar') - installRebar = installRebar == null ? 'true' : installRebar - installRebar && await exec('mix local.rebar --force') - - let installHex = core.getInput('install-hex') - installHex = installHex == null ? 'true' : installHex - installHex && await exec('mix local.hex --force') -} - -async function installRebar3(rebar3Spec) { - const rebar3Version = await getRebar3Version(rebar3Spec) - console.log(`##[group]Installing rebar3 ${rebar3Version}`) - await installer.installRebar3(rebar3Version) - console.log(`##[endgroup]`) - core.setOutput('rebar3-version', rebar3Version) - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/rebar3/bin` +function maybeInstallElixir(otpVersion, elixirBuildsListing) { + return new Promise(async (resolve) => { + const elixirSpec = core.getInput('elixir-version', {required: false}) + if (elixirSpec) { + const [elixirVersion, otpMajor] = await getElixirVersion( + elixirSpec, + otpVersion, + elixirBuildsListing, + ) + console.log(`##[group]Installing Elixir ${elixirVersion}`) + await installer.installElixir(elixirVersion, otpMajor) + console.log(`##[endgroup]`) + core.setOutput('elixir-version', elixirVersion) + const matchersPath = __nccwpck_require__.ab + ".github" + console.log(`##[add-matcher]${path.join(matchersPath, 'elixir.json')}`) + process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/otp/bin` + process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/elixir/bin` + resolve(true) + } else { + resolve(false) + } + }) } -function getOTPSpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_OTP_VSN; - } else { - return core.getInput('otp-version', {required: true}) +async function mixRebar() { + if (core.getInput('install-rebar') !== false) { + await exec('mix local.rebar --force') } } -function getElixirSpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_ELIXIR_VSN; - } else { - return core.getInput('elixir-version', {required: false}); +async function mixHex() { + if (core.getInput('install-hex') !== false) { + await exec('mix local.hex --force') } } -function getRebar3SpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_REBAR3_VSN; - } else { - return core.getInput('rebar3-version', {required: false}); - } +function maybeInstallRebar3(rebar3BuildsListing) { + return new Promise(async (resolve) => { + const rebar3Spec = core.getInput('rebar3-version', {required: false}) + if (rebar3Spec) { + const rebar3Version = await getRebar3Version(rebar3Spec, rebar3BuildsListing) + console.log(`##[group]Installing rebar3 ${rebar3Version}`) + await installer.installRebar3(rebar3Version) + console.log(`##[endgroup]`) + core.setOutput('rebar3-version', rebar3Version) + process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/rebar3/bin` + resolve(true) + } else { + resolve(false) + } + }) } -async function getOTPVersion(spec, osVersion) { - const version = getVersionFromSpec(spec, await getOTPVersions(osVersion)) +async function getOTPVersion(spec, osVersion, otpBuildsListing) { + const version = getVersionFromSpec(spec, await getOTPVersions(osVersion, otpBuildsListing)) return version ? `OTP-${version}` : spec } -function getRunnerOSVersion() { - const mapToUbuntuVersion = { - ubuntu16: 'ubuntu-16.04', - ubuntu18: 'ubuntu-18.04', - ubuntu20: 'ubuntu-20.04', - } - - return mapToUbuntuVersion[process.env.ImageOS] || 'ubuntu-18.04' -} - -async function getElixirVersion(spec, otpVersion) { - const versions = await getElixirVersions() +async function getElixirVersion(spec, otpVersion, elixirBuildsListing) { + const versions = await getElixirVersions(elixirBuildsListing) const semverRegex = /^v(\d+\.\d+\.\d+(?:-.+)?)/ const semverVersions = Array.from(versions.keys()) @@ -4073,18 +4053,12 @@ async function getElixirVersion(spec, otpVersion) { } } -function getVersionFromSpec(spec, versions) { - if (versions.includes(spec)) { - return spec - } else { - const range = semver.validRange(spec) - return semver.maxSatisfying(versions, range) - } +async function getRebar3Version(spec, rebar3BuildsListing) { + return getVersionFromSpec(spec, await getRebar3Versions(rebar3BuildsListing)) } -async function getOTPVersions(osVersion) { - const result = await get(`https://repo.hex.pm/builds/otp/${osVersion}/builds.txt`, - 'otp_builds.txt') +async function getOTPVersions(osVersion, otpBuildsListing) { + const result = await get(otpBuildsListing) return result .trim() @@ -4101,26 +4075,8 @@ async function getOTPVersions(osVersion) { }) } -async function getRebar3Versions() { - const resultJSON = await get('https://api.github.com/repos/erlang/rebar3/tags') - const result = JSON.parse(resultJSON).map((x) => x.name).sort() - - return result - .map((line) => { - const match = line.match(/^([\.\d]+)/) - - if (match) { - const [_, version] = match - return version - } else { - return line - } - }) -} - -async function getElixirVersions() { - const result = await get('https://repo.hex.pm/builds/elixir/builds.txt', - 'elixir_builds.txt') +async function getElixirVersions(elixirBuildsListing) { + const result = await get(elixirBuildsListing) const map = new Map() result @@ -4142,16 +4098,43 @@ async function getElixirVersions() { return map } -async function getRebar3Version(spec) { - return getVersionFromSpec(spec, await getRebar3Versions()) +async function getRebar3Versions(rebar3BuildsListing) { + const resultJSON = await get(rebar3BuildsListing) + const result = JSON.parse(resultJSON).map((x) => x.name).sort() + + return result + .map((line) => { + const match = line.match(/^([\.\d]+)/) + + if (match) { + const [_, version] = match + return version + } else { + return line + } + }) } -function get(url, testFile) { - if (process.env.CI_TEST_ENV === 'test' && testFile) { - return readFile(__nccwpck_require__.ab + "__tests__/" + testFile) - .then((buf) => buf.toString()) +function getVersionFromSpec(spec, versions) { + if (versions.includes(spec)) { + return spec + } else { + const range = semver.validRange(spec) + return semver.maxSatisfying(versions, range) } +} +function getRunnerOSVersion() { + const mapToUbuntuVersion = { + ubuntu16: 'ubuntu-16.04', + ubuntu18: 'ubuntu-18.04', + ubuntu20: 'ubuntu-20.04', + } + + return mapToUbuntuVersion[process.env.ImageOS] || 'ubuntu-18.04' +} + +function get(url) { return new Promise((resolve, reject) => { const req = https.get(url, {headers: {'user-agent': 'setup-elixir'}}) @@ -4196,14 +4179,6 @@ module.exports = require("events");; /***/ }), -/***/ 5747: -/***/ ((module) => { - -"use strict"; -module.exports = require("fs");; - -/***/ }), - /***/ 7211: /***/ ((module) => { diff --git a/dist/install-elixir1 b/dist/install-elixir1 deleted file mode 100755 index 41fb90a8..00000000 --- a/dist/install-elixir1 +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -set -eo pipefail - -cd "$RUNNER_TEMP" - -wget -q "https://repo.hex.pm/builds/elixir/${1}${2}.zip" -unzip -d .setup-elixir/elixir "${1}${2}.zip" -rm -f "${1}${2}.zip" -echo "$(pwd)/.setup-elixir/elixir/bin" >> "$GITHUB_PATH" diff --git a/dist/install-otp1 b/dist/install-otp1 deleted file mode 100755 index d6e55c43..00000000 --- a/dist/install-otp1 +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -eo pipefail - -cd "$RUNNER_TEMP" - -OS=${1} -OTP=${2} - -wget -q -O otp.tar.gz "https://repo.hex.pm/builds/otp/${OS}/${OTP}.tar.gz" -mkdir -p .setup-elixir/otp -tar zxf otp.tar.gz -C .setup-elixir/otp --strip-components=1 -rm -f otp.tar.gz -.setup-elixir/otp/Install -minimal "$(pwd)/.setup-elixir/otp" -echo "$(pwd)/.setup-elixir/otp/bin" >> "$GITHUB_PATH" diff --git a/dist/install-rebar31 b/dist/install-rebar31 deleted file mode 100755 index ba80ba06..00000000 --- a/dist/install-rebar31 +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -eo pipefail - -cd "$RUNNER_TEMP" - -VSN=${1} -FILE=rebar3 -DIR_FOR_BIN=.setup-elixir/rebar3/bin - -wget -q "https://github.com/erlang/rebar3/releases/download/${VSN}/${FILE}" -mkdir -p ${DIR_FOR_BIN} -chmod +x ${FILE} -mv ${FILE} ${DIR_FOR_BIN} -echo "$(pwd)/${DIR_FOR_BIN}" >> "$GITHUB_PATH" diff --git a/src/setup-beam.js b/src/setup-beam.js index 5cac3127..7a5bf58c 100644 --- a/src/setup-beam.js +++ b/src/setup-beam.js @@ -4,10 +4,6 @@ const installer = require('./installer') const path = require('path') const semver = require('semver') const https = require('https') -const { - _fstat, - promises: {readFile}, -} = require('fs') main().catch((err) => { core.setFailed(err.message) @@ -16,27 +12,27 @@ main().catch((err) => { async function main() { installer.checkPlatform() - installOTP() + const osVersion = getRunnerOSVersion() + const otpBuildsListing = `https://repo.hex.pm/builds/otp/${osVersion}/builds.txt` + installOTP(osVersion, otpBuildsListing) .then((otpVersion) => { - const elixirSpec = getElixirSpecFromInput() - if (elixirSpec) { - installElixir(elixirSpec, otpVersion) - .then(() => { - mixRebarAndHex() - }) - } - - const rebar3Spec = getRebar3SpecFromInput() - if (rebar3Spec) { - installRebar3(rebar3Spec) - } + const elixirBuildsListing = 'https://repo.hex.pm/builds/elixir/builds.txt' + maybeInstallElixir(otpVersion, elixirBuildsListing) + .then((installed) => { + if (installed) { + mixRebar() + mixHex() + } + }) + + const rebar3BuildsListing = 'https://api.github.com/repos/erlang/rebar3/tags' + maybeInstallRebar3(rebar3BuildsListing) }) } -async function installOTP() { - const osVersion = getRunnerOSVersion() - const otpSpec = getOTPSpecFromInput() - const otpVersion = await getOTPVersion(otpSpec, osVersion) +async function installOTP(osVersion, otpBuildsListing) { + const otpSpec = core.getInput('otp-version', {required: true}) + const otpVersion = await getOTPVersion(otpSpec, osVersion, otpBuildsListing) console.log(`##[group]Installing Erlang/OTP ${otpVersion} over ${osVersion}`) await installer.installOTP(osVersion, otpVersion) console.log(`##[endgroup]`) @@ -44,82 +40,66 @@ async function installOTP() { return otpVersion } -async function installElixir(elixirSpec, otpVersion) { - const [elixirVersion, otpMajor] = await getElixirVersion( - elixirSpec, - otpVersion, - ) - console.log(`##[group]Installing Elixir ${elixirVersion}`) - await installer.installElixir(elixirVersion, otpMajor) - console.log(`##[endgroup]`) - core.setOutput('elixir-version', elixirVersion) - const matchersPath = path.join(__dirname, '..', '.github') - console.log(`##[add-matcher]${path.join(matchersPath, 'elixir.json')}`) -} - -async function mixRebarAndHex() { - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/otp/bin` - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/elixir/bin` - - let installRebar = core.getInput('install-rebar') - installRebar = installRebar == null ? 'true' : installRebar - installRebar && await exec('mix local.rebar --force') - - let installHex = core.getInput('install-hex') - installHex = installHex == null ? 'true' : installHex - installHex && await exec('mix local.hex --force') -} - -async function installRebar3(rebar3Spec) { - const rebar3Version = await getRebar3Version(rebar3Spec) - console.log(`##[group]Installing rebar3 ${rebar3Version}`) - await installer.installRebar3(rebar3Version) - console.log(`##[endgroup]`) - core.setOutput('rebar3-version', rebar3Version) - process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/rebar3/bin` +function maybeInstallElixir(otpVersion, elixirBuildsListing) { + return new Promise(async (resolve) => { + const elixirSpec = core.getInput('elixir-version', {required: false}) + if (elixirSpec) { + const [elixirVersion, otpMajor] = await getElixirVersion( + elixirSpec, + otpVersion, + elixirBuildsListing, + ) + console.log(`##[group]Installing Elixir ${elixirVersion}`) + await installer.installElixir(elixirVersion, otpMajor) + console.log(`##[endgroup]`) + core.setOutput('elixir-version', elixirVersion) + const matchersPath = path.join(__dirname, '..', '.github') + console.log(`##[add-matcher]${path.join(matchersPath, 'elixir.json')}`) + process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/otp/bin` + process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/elixir/bin` + resolve(true) + } else { + resolve(false) + } + }) } -function getOTPSpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_OTP_VSN; - } else { - return core.getInput('otp-version', {required: true}) +async function mixRebar() { + if (core.getInput('install-rebar') !== false) { + await exec('mix local.rebar --force') } } -function getElixirSpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_ELIXIR_VSN; - } else { - return core.getInput('elixir-version', {required: false}); +async function mixHex() { + if (core.getInput('install-hex') !== false) { + await exec('mix local.hex --force') } } -function getRebar3SpecFromInput() { - if (process.env.CI_TEST_ENV === 'test') { - return process.env.CI_TEST_REBAR3_VSN; - } else { - return core.getInput('rebar3-version', {required: false}); - } +function maybeInstallRebar3(rebar3BuildsListing) { + return new Promise(async (resolve) => { + const rebar3Spec = core.getInput('rebar3-version', {required: false}) + if (rebar3Spec) { + const rebar3Version = await getRebar3Version(rebar3Spec, rebar3BuildsListing) + console.log(`##[group]Installing rebar3 ${rebar3Version}`) + await installer.installRebar3(rebar3Version) + console.log(`##[endgroup]`) + core.setOutput('rebar3-version', rebar3Version) + process.env.PATH += `:${process.env.RUNNER_TEMP}/.setup-elixir/rebar3/bin` + resolve(true) + } else { + resolve(false) + } + }) } -async function getOTPVersion(spec, osVersion) { - const version = getVersionFromSpec(spec, await getOTPVersions(osVersion)) +async function getOTPVersion(spec, osVersion, otpBuildsListing) { + const version = getVersionFromSpec(spec, await getOTPVersions(osVersion, otpBuildsListing)) return version ? `OTP-${version}` : spec } -function getRunnerOSVersion() { - const mapToUbuntuVersion = { - ubuntu16: 'ubuntu-16.04', - ubuntu18: 'ubuntu-18.04', - ubuntu20: 'ubuntu-20.04', - } - - return mapToUbuntuVersion[process.env.ImageOS] || 'ubuntu-18.04' -} - -async function getElixirVersion(spec, otpVersion) { - const versions = await getElixirVersions() +async function getElixirVersion(spec, otpVersion, elixirBuildsListing) { + const versions = await getElixirVersions(elixirBuildsListing) const semverRegex = /^v(\d+\.\d+\.\d+(?:-.+)?)/ const semverVersions = Array.from(versions.keys()) @@ -137,18 +117,12 @@ async function getElixirVersion(spec, otpVersion) { } } -function getVersionFromSpec(spec, versions) { - if (versions.includes(spec)) { - return spec - } else { - const range = semver.validRange(spec) - return semver.maxSatisfying(versions, range) - } +async function getRebar3Version(spec, rebar3BuildsListing) { + return getVersionFromSpec(spec, await getRebar3Versions(rebar3BuildsListing)) } -async function getOTPVersions(osVersion) { - const result = await get(`https://repo.hex.pm/builds/otp/${osVersion}/builds.txt`, - 'otp_builds.txt') +async function getOTPVersions(osVersion, otpBuildsListing) { + const result = await get(otpBuildsListing) return result .trim() @@ -165,26 +139,8 @@ async function getOTPVersions(osVersion) { }) } -async function getRebar3Versions() { - const resultJSON = await get('https://api.github.com/repos/erlang/rebar3/tags') - const result = JSON.parse(resultJSON).map((x) => x.name).sort() - - return result - .map((line) => { - const match = line.match(/^([\.\d]+)/) - - if (match) { - const [_, version] = match - return version - } else { - return line - } - }) -} - -async function getElixirVersions() { - const result = await get('https://repo.hex.pm/builds/elixir/builds.txt', - 'elixir_builds.txt') +async function getElixirVersions(elixirBuildsListing) { + const result = await get(elixirBuildsListing) const map = new Map() result @@ -206,16 +162,43 @@ async function getElixirVersions() { return map } -async function getRebar3Version(spec) { - return getVersionFromSpec(spec, await getRebar3Versions()) +async function getRebar3Versions(rebar3BuildsListing) { + const resultJSON = await get(rebar3BuildsListing) + const result = JSON.parse(resultJSON).map((x) => x.name).sort() + + return result + .map((line) => { + const match = line.match(/^([\.\d]+)/) + + if (match) { + const [_, version] = match + return version + } else { + return line + } + }) +} + +function getVersionFromSpec(spec, versions) { + if (versions.includes(spec)) { + return spec + } else { + const range = semver.validRange(spec) + return semver.maxSatisfying(versions, range) + } } -function get(url, testFile) { - if (process.env.CI_TEST_ENV === 'test' && testFile) { - return readFile(path.join(__dirname, '..', '__tests__', testFile)) - .then((buf) => buf.toString()) +function getRunnerOSVersion() { + const mapToUbuntuVersion = { + ubuntu16: 'ubuntu-16.04', + ubuntu18: 'ubuntu-18.04', + ubuntu20: 'ubuntu-20.04', } + return mapToUbuntuVersion[process.env.ImageOS] || 'ubuntu-18.04' +} + +function get(url) { return new Promise((resolve, reject) => { const req = https.get(url, {headers: {'user-agent': 'setup-elixir'}})