From fdd16fa65f4bb6c96888e3191f520fa8481b117f Mon Sep 17 00:00:00 2001 From: "Alejandro R. Mosteo" Date: Wed, 9 Oct 2024 20:01:31 +0200 Subject: [PATCH] Add msys2 option --- .github/workflows/checkin.yml | 2 +- .github/workflows/selftest.yml | 16 ++++++++++++++++ .github/workflows/test-cache.yml | 3 +++ README.md | 6 +++--- action.yml | 11 +++++++++-- lib/main.js | 17 +++++++++++++++++ src/main.ts | 23 +++++++++++++++++++++++ 7 files changed, 72 insertions(+), 6 deletions(-) diff --git a/.github/workflows/checkin.yml b/.github/workflows/checkin.yml index 2febfde2..c897d9a1 100644 --- a/.github/workflows/checkin.yml +++ b/.github/workflows/checkin.yml @@ -5,7 +5,7 @@ jobs: check_pr: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: "npm ci" run: npm ci diff --git a/.github/workflows/selftest.yml b/.github/workflows/selftest.yml index c8f8c5e2..b35f1a4d 100644 --- a/.github/workflows/selftest.yml +++ b/.github/workflows/selftest.yml @@ -19,6 +19,9 @@ jobs: - nightly - source - stable + msys2: [true, false] + # A bit redundant for non-windows platforms, but let's keep things + # simple for the very rare times this workflow is run runs-on: ${{ matrix.os }} @@ -31,6 +34,7 @@ jobs: if: matrix.target == 'stable' uses: ./ # This uses the action code in the current PR with: + msys2: ${{ matrix.msys2 }} cache: false # We test without cache, as caching is tested in a separate workflow. # This way we make sure the cache isn't hiding any issue. @@ -39,6 +43,7 @@ jobs: if: matrix.target == 'nightly' uses: ./ with: + msys2: ${{ matrix.msys2 }} version: nightly cache: false @@ -46,6 +51,7 @@ jobs: if: matrix.target == 'source' uses: ./ with: + msys2: ${{ matrix.msys2 }} branch: master cache: false @@ -80,3 +86,13 @@ jobs: - run: alr -n version | grep "arch:" | grep AARCH64 if: runner.arch == 'ARM64' shell: bash + + # Verify proper msys2 behavior + + - run: alr -n version | grep "distribution:" | grep MSYS2 + if: matrix.os == 'windows-latest' && matrix.msys2 == true + shell: bash + + - run: alr -n version | grep "distribution:" | grep UNKNOWN + if: matrix.os == 'windows-latest' && matrix.msys2 == false + shell: bash diff --git a/.github/workflows/test-cache.yml b/.github/workflows/test-cache.yml index 038e5529..7d311863 100644 --- a/.github/workflows/test-cache.yml +++ b/.github/workflows/test-cache.yml @@ -45,6 +45,8 @@ jobs: with: version: ${{matrix.config.version}} branch: ${{matrix.config.branch}} + msys2: false + # Not needed, speed up test. This is tested in selftest.yml # Next attemp should hit cache given the previous run @@ -55,6 +57,7 @@ jobs: with: version: ${{matrix.config.version}} branch: ${{matrix.config.branch}} + msys2: false - name: Diagnose cache use shell: bash diff --git a/README.md b/README.md index 69928686..c657fcc3 100644 --- a/README.md +++ b/README.md @@ -48,10 +48,10 @@ inputs: description: Arguments to pass to `alr toolchain` after setup. required: false default: 'gnat_native gprbuild' - toolchain_dir: - description: Location to install the toolchain under. + msys2: + description: Whether to install MSYS2 on Windows. When false, `msys2.do_not_install` will be set to true in alire's settings. required: false - default: '' + default: true cache: description: Whether to reuse a cached previous install. required: false diff --git a/action.yml b/action.yml index 58f3b777..ab1e8b31 100644 --- a/action.yml +++ b/action.yml @@ -16,6 +16,10 @@ inputs: description: Arguments to pass to `alr toolchain` after setup. required: false default: 'gnat_native gprbuild' + msys2: + description: Whether to install MSYS2 on Windows. When false, `msys2.do_not_install` will be set to true in alire's settings. + required: false + default: true cache: description: Whether to reuse a cached previous install. required: false @@ -50,7 +54,7 @@ runs: id: cache-key shell: bash run: | - echo "key=alr[1][${{ steps.find-hash.outputs.version }}][${{ inputs.toolchain }}][${{ runner.os }}][${{ runner.arch }}][${{ steps.find-hash.outputs.hash }}]" >> $GITHUB_OUTPUT + echo "key=alr[1][${{steps.find-hash.outputs.version}}][${{inputs.toolchain}}][msys2=${{inputs.msys2}}][${{runner.os}}][${{runner.arch}}][${{steps.find-hash.outputs.hash}}]" >> $GITHUB_OUTPUT # The first value in square brackets is to make the key unique for debugging - name: Reuse cached installation @@ -107,7 +111,8 @@ runs: shell: bash run: echo "need=true" >> $GITHUB_OUTPUT - # Download a stable alr capable of installing a toolchain + # Download a stable alr capable of installing a toolchain. Avoid to install + # a msys2 at this point which is not needed and confuses later tests. - name: Install GNAT (I) if: steps.need-GNAT.outputs.need == 'true' shell: bash @@ -124,6 +129,8 @@ runs: unzip -o ${alr_filename} "bin/alr*" -d tmp_alr rm ${alr_filename} echo "$(pwd -W 2>/dev/null || pwd)/tmp_alr/bin" >> $GITHUB_PATH + tmp_alr/bin/alr settings --global --set msys2.do_not_install true || \ + tmp_alr/bin/alr config --global --set msys2.do_not_install true # Perform the actual `alr install` and remove the `alr` just used to avoid # conflicts with the `alr` being built. diff --git a/lib/main.js b/lib/main.js index 576984ff..3b3c710f 100644 --- a/lib/main.js +++ b/lib/main.js @@ -136,17 +136,22 @@ function run() { try { var version; var branch; + var msys2; var tool_args; if (process.argv[2]) { // e.g., node lib/script.js const inputs = JSON.parse(process.argv[2]); + // Log the inputs for the record + console.log("Inputs: " + process.argv[2]); version = inputs.version; branch = inputs.branch; + msys2 = inputs.msys2 == "true"; tool_args = inputs.toolchain; } else { // Old way in case this is fixed by GH version = core.getInput('version'); branch = core.getInput('branch'); + msys2 = core.getInput('msys2') == "true"; tool_args = core.getInput('toolchain'); } // Install the requested version/branch unless cached @@ -168,6 +173,18 @@ function run() { yield exec.exec(`alr -n settings --global --set index.auto_update_asked true`); console.log("Enabled index auto-refresh without further asking."); } + // Disable msys2 installation if requested + if (process.platform == "win32") { + if (msys2) { + // Re-enable in case it was disabled during previous actions steps + yield exec.exec(`alr -n settings --global --set msys2.do_not_install false`); + console.log(`MSYS2 installation NOT disabled (msys2=${msys2})`); + } + else { + yield exec.exec(`alr -n settings --global --set msys2.do_not_install true`); + console.log(`MSYS2 installation DISABLED (msys2=${msys2})`); + } + } // And configure the toolchain if (tool_args.length > 0 && !cached) { yield exec.exec(`alr -n toolchain ${tool_args != "--disable-assistant" ? "--select " : ""} ${tool_args}`); diff --git a/src/main.ts b/src/main.ts index e6ea1336..44e45172 100644 --- a/src/main.ts +++ b/src/main.ts @@ -113,17 +113,24 @@ async function run() { try { var version : string var branch : string + var msys2 : boolean var tool_args : string if (process.argv[2]) { // e.g., node lib/script.js const inputs = JSON.parse(process.argv[2]) + + // Log the inputs for the record + console.log("Inputs: " + process.argv[2]) + version = inputs.version branch = inputs.branch + msys2 = inputs.msys2 == "true"; tool_args = inputs.toolchain } else { // Old way in case this is fixed by GH version = core.getInput('version'); branch = core.getInput('branch'); + msys2 = core.getInput('msys2') == "true"; tool_args = core.getInput('toolchain'); } @@ -142,6 +149,10 @@ async function run() { // Add to path in any case core.addPath(path.join(process.cwd(), install_dir, 'bin')); + // Identify the major version number to choose between config/settings + const major : number = parseInt(version.split(".")[0], 10); + const settings_cmd : string = (major >= 2 ? "settings" : "config"); + // Disable index auto-refresh asking, that may cause trouble to users // on first run, but only if the major version is >=2, which // introduced the feature. @@ -150,6 +161,18 @@ async function run() { console.log("Enabled index auto-refresh without further asking."); } + // Disable msys2 installation if requested + if (process.platform == "win32") { + if (msys2) { + // Re-enable in case it was disabled during previous actions steps + await exec.exec(`alr -n ${settings_cmd} --global --set msys2.do_not_install false`); + console.log(`MSYS2 installation NOT disabled (msys2=${msys2})`); + } else { + await exec.exec(`alr -n ${settings_cmd} --global --set msys2.do_not_install true`); + console.log(`MSYS2 installation DISABLED (msys2=${msys2})`); + } + } + // And configure the toolchain if (tool_args.length > 0 && !cached) { await exec.exec(`alr -n toolchain ${tool_args != "--disable-assistant" ? "--select " : ""} ${tool_args}`);