From 50c811b96f02bf3d0125deb85673991a48d36ced Mon Sep 17 00:00:00 2001 From: Alejandro R Mosteo Date: Sat, 12 Oct 2024 10:43:05 +0200 Subject: [PATCH] Enable aarch64 builds (#82) --- .../{ => disabled}/cache-minimal.yml | 0 .github/workflows/selftest.yml | 47 ++++++++++++++----- .github/workflows/test-cache.yml | 19 ++++---- README.md | 6 +-- action.yml | 20 ++++---- lib/main.js | 13 ++++- src/main.ts | 14 +++++- 7 files changed, 83 insertions(+), 36 deletions(-) rename .github/workflows/{ => disabled}/cache-minimal.yml (100%) diff --git a/.github/workflows/cache-minimal.yml b/.github/workflows/disabled/cache-minimal.yml similarity index 100% rename from .github/workflows/cache-minimal.yml rename to .github/workflows/disabled/cache-minimal.yml diff --git a/.github/workflows/selftest.yml b/.github/workflows/selftest.yml index fbce260b..c8f8c5e2 100644 --- a/.github/workflows/selftest.yml +++ b/.github/workflows/selftest.yml @@ -1,52 +1,63 @@ -# Changes to the v2 branch must be proposed via PRs in the branch -# v2-next. This way we can check the action just as GHA is going to -# use it. - name: Selftest on: pull_request: - # branches: - # - disabled + workflow_dispatch: jobs: setup-alire: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-12, macos-14, windows-latest] - target: [stable, nightly, source] + os: + - macos-12 + - macos-14 + - macos-latest + - ubuntu-latest + - windows-latest + target: + - nightly + - source + - stable runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Setup stable - uses: ./ # This uses the action code in the current PR if: matrix.target == 'stable' + uses: ./ # This uses the action code in the current PR with: 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. - name: Setup nightly - uses: ./ if: matrix.target == 'nightly' + uses: ./ with: version: nightly cache: false - name: Setup from source (master) - uses: ./ if: matrix.target == 'source' + uses: ./ with: branch: master cache: false - # Verify proper builds + # Check alr and default toolchains + - run: alr -n version + - run: | + alr -n init --bin alrws + cd alrws + alr exec -- gnat --version + alr exec -- gprbuild --version + + # Verify proper OS - run: alr -n version | grep "os:" | grep LINUX if: matrix.os == 'ubuntu-latest' @@ -59,3 +70,13 @@ jobs: - run: alr -n version | grep "os:" | grep WINDOWS if: matrix.os == 'windows-latest' shell: bash + + # Verify proper architecture + + - run: alr -n version | grep "arch:" | grep X86_64 + if: runner.arch == 'X64' + shell: bash + + - run: alr -n version | grep "arch:" | grep AARCH64 + if: runner.arch == 'ARM64' + shell: bash diff --git a/.github/workflows/test-cache.yml b/.github/workflows/test-cache.yml index 86fcf296..038e5529 100644 --- a/.github/workflows/test-cache.yml +++ b/.github/workflows/test-cache.yml @@ -1,13 +1,8 @@ -# Changes to the v2 branch must be proposed via PRs in the branch -# v3-next. This way we can check the action just as GHA is going to -# use it. - name: Test cache on: pull_request: - # branches: - # - disabled + workflow_dispatch: jobs: test-cache: @@ -15,11 +10,13 @@ jobs: fail-fast: false matrix: os: + - macos-12 + - macos-14 - macos-latest - ubuntu-latest - windows-latest config: - - version: '2.0.1' + - version: '2.0.2' branch: '' - version: '1.2.2' branch: '' @@ -27,12 +24,18 @@ jobs: branch: '' - version: '' branch: 'master' + # Exclude combos that do not make sense (we dont have aarm64 for 1.2.2) + exclude: + - os: macos-14 + config: {version: '1.2.2', branch: ''} + - os: macos-latest + config: {version: '1.2.2', branch: ''} runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 # This might hit cache diff --git a/README.md b/README.md index cf2d540b..69928686 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,12 @@ Version v2 adds caching to speed up deployment, particularly on Windows. To use the latest stable release of the Alire project, add this line to your workflow steps: ```yaml - - uses: alire-project/setup-alire@v2 + - uses: alire-project/setup-alire@v3 ``` To use a precompiled nightly build of the development version, use the following: ```yaml - - uses: alire-project/setup-alire@v2 + - uses: alire-project/setup-alire@v3 with: version: "nightly" ``` @@ -21,7 +21,7 @@ To use a precompiled nightly build of the development version, use the following To use a development version compiled from sources (if you known what you are doing), use the following: ```yaml - - uses: alire-project/setup-alire@v2 + - uses: alire-project/setup-alire@v3 with: branch: "master" # or the branch you want to use ``` diff --git a/action.yml b/action.yml index 2dae233d..58f3b777 100644 --- a/action.yml +++ b/action.yml @@ -6,7 +6,7 @@ inputs: version: description: Use this argument to install a stable or nightly release. Use a version number without v prefix, e.g., 1.0.1, 1.1.0, or 'nightly'. This argument will be ignored if a branch argument is supplied. Defaults to the latest stable release. required: false - default: '2.0.1' + default: '2.0.2' # Also to be updated in test-cache-yml branch: description: Use this argument to install a development branch (e.g., master). @@ -113,21 +113,25 @@ runs: shell: bash run: | os_lower=$(echo "${{ runner.os }}" | tr '[:upper:]' '[:lower:]') - alr_version=2.0.1 - curl -L -O https://github.com/alire-project/alire/releases/download/v${alr_version}/alr-${alr_version}-bin-x86_64-${os_lower}.zip - unzip -o alr-${alr_version}-bin-x86_64-${os_lower}.zip "bin/alr*" -d tmp_alr - rm alr-${alr_version}-bin-x86_64-${os_lower}.zip + case "${{ runner.arch }}" in + ARM64) arch=aarch64;; + X64) arch=x86_64;; + *) echo "Unknown arch: ${{runner.arch}}"; exit 1;; + esac + alr_version=2.0.2 + alr_filename=alr-${alr_version}-bin-${arch}-${os_lower}.zip + curl -L -O https://github.com/alire-project/alire/releases/download/v${alr_version}/${alr_filename} + unzip -o ${alr_filename} "bin/alr*" -d tmp_alr + rm ${alr_filename} echo "$(pwd -W 2>/dev/null || pwd)/tmp_alr/bin" >> $GITHUB_PATH # Perform the actual `alr install` and remove the `alr` just used to avoid # conflicts with the `alr` being built. - # TODO: we use gnat^13 because there seems to be some trouble with gnat^14 - # on macOS. Revisit this when the issue is resolved. - name: Install GNAT (II) if: steps.need-GNAT.outputs.need == 'true' shell: bash run: | - alr install gnat_native^13 gprbuild^22 --prefix=$PWD/setup_alire_prefix + alr install gnat_native gprbuild --prefix=$PWD/setup_alire_prefix echo REMOVAL TARGET: $(which alr) rm -rf tmp_alr && echo REMOVED stable alr used for toolchain install diff --git a/lib/main.js b/lib/main.js index 8054dcf2..576984ff 100644 --- a/lib/main.js +++ b/lib/main.js @@ -82,7 +82,7 @@ function install_branch(branch) { process.env.ALIRE_OS = "unknown"; break; } - yield exec.exec(`gprbuild -j0 -p -P alr_env.gpr -cargs -fPIC`); + yield exec.exec(`gprbuild -j0 -p -P alr_env.gpr -cargs -fPIC -largs -static-libgcc`); process.chdir(start_path); }); } @@ -90,14 +90,23 @@ function install_release(version) { return __awaiter(this, void 0, void 0, function* () { const base_url = "https://github.com/alire-project/alire/releases/download"; console.log(`Deploying alr version [${version}]`); + var arch; var infix; var platform; + switch (process.arch) { + case 'arm64': + arch = "aarch64"; + break; + default: + arch = "x86_64"; + break; + } switch (version) { case '1.0.1': infix = "bin"; break; default: - infix = "bin-x86_64"; + infix = `bin-${arch}`; break; } switch (process.platform) { diff --git a/src/main.ts b/src/main.ts index 5f9d75bc..e6ea1336 100644 --- a/src/main.ts +++ b/src/main.ts @@ -52,7 +52,7 @@ async function install_branch(branch : string) { break; } - await exec.exec(`gprbuild -j0 -p -P alr_env.gpr -cargs -fPIC`); + await exec.exec(`gprbuild -j0 -p -P alr_env.gpr -cargs -fPIC -largs -static-libgcc`); process.chdir(start_path) } @@ -61,15 +61,25 @@ async function install_release(version : string) { console.log(`Deploying alr version [${version}]`) + var arch : string; var infix : string; var platform : string; + switch (process.arch) { + case 'arm64': + arch = "aarch64"; + break; + default: + arch = "x86_64"; + break; + } + switch(version) { case '1.0.1': infix = "bin"; break; default: - infix = "bin-x86_64"; + infix = `bin-${arch}`; break; }