Skip to content

Build binaries

Build binaries #1389

on:
push:
branches:
- edge
tags:
- 2*.*.*
name: Build binaries
env:
DEFAULT_TAG: 24.0.999
AWS_DEFAULT_REGION: eu-west-1
jobs:
build:
name: Build and deploy
strategy:
fail-fast: false
matrix: # Build debug and/or production
debug: [''] # '' if production, 'debug' for debug
os: [macos-11, ubuntu-20.04, windows-latest]
cross: ['', aarch64]
exclude:
- os: windows-latest
cross: aarch64
runs-on: ${{ matrix.os }}
steps:
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Initialize TAG and git autocrlf
shell: bash
run: |
git config --global core.autocrlf input
if [[ ${GITHUB_REF##*/} = 2*.[0-9]*.[0-9]* ]]; then
echo "TAG=${GITHUB_REF##*/}" >> $GITHUB_ENV
else
echo "TAG=$DEFAULT_TAG" >> $GITHUB_ENV
fi
- name: Install cross toolchain (Linux)
if: ${{ matrix.cross != '' && runner.os == 'Linux' }}
env:
AWS_ACCESS_KEY_ID: ${{secrets.GHA_CACHE_ACCESS_KEY_ID}}
AWS_SECRET_ACCESS_KEY: ${{secrets.GHA_CACHE_SECRET}}
AWS_DEFAULT_REGION: eu-west-1
run: |
sudo apt install -y libc6-dev-arm64-cross linux-libc-dev-arm64-cross binutils-aarch64-linux-gnu
aws s3 cp s3://adacore-gha-tray-eu-west-1/toolchain/${{ matrix.cross }}-${{ runner.os }}-gcc-13.2.tar.bz2 . --sse=AES256
aws s3 cp s3://adacore-gha-tray-eu-west-1/toolchain/${{ matrix.cross }}-${{ runner.os }}-gmp-6.2.1.tar.bz2 . --sse=AES256
sudo tar xjf ${{ matrix.cross }}-${{ runner.os }}-gcc-13.2.tar.bz2 -C /
sudo tar xjf ${{ matrix.cross }}-${{ runner.os }}-gmp-6.2.1.tar.bz2 -C /
- name: Install cross toolchain (MacOS)
if: ${{ matrix.cross != '' && runner.os != 'Linux' }}
env:
AWS_ACCESS_KEY_ID: ${{secrets.GHA_CACHE_ACCESS_KEY_ID}}
AWS_SECRET_ACCESS_KEY: ${{secrets.GHA_CACHE_SECRET}}
AWS_DEFAULT_REGION: eu-west-1
run: |
aws s3 cp s3://adacore-gha-tray-eu-west-1/toolchain/${{ matrix.cross }}-${{ runner.os }}-gcc-13.2.tar.bz2 . --sse=AES256
aws s3 cp s3://adacore-gha-tray-eu-west-1/toolchain/${{ matrix.cross }}-${{ runner.os }}-gmp-6.2.1.tar.bz2 . --sse=AES256
sudo tar xjf ${{ matrix.cross }}-${{ runner.os }}-gcc-13.2.tar.bz2 --strip-components=3 -C /usr/local
sudo tar xjf ${{ matrix.cross }}-${{ runner.os }}-gmp-6.2.1.tar.bz2 --strip-components=3 -C /usr/local
- name: Force Alire use preinstalled MSYS2
shell: bash
if: ${{ runner.os == 'Windows' }}
run: |
mkdir -p ~/.config/alire
echo '[msys2]' >> ~/.config/alire/config.toml
echo 'install_dir = "C:\\msys64"' >> ~/.config/alire/config.toml
- name: Install iconv and gmp (Windows only)
run: pacman --noconfirm -S mingw64/mingw-w64-x86_64-libiconv mingw64/mingw-w64-x86_64-gmp
if: ${{ runner.os == 'Windows' }}
shell: c:\msys64\usr\bin\bash.exe -l -e -o pipefail {0}
env:
MSYSTEM: MINGW64
- name: Get als
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get Spawn
uses: actions/checkout@v3
with:
repository: AdaCore/spawn
path: subprojects/spawn
- name: Get LAL_Tools
uses: actions/checkout@v3
with:
repository: AdaCore/libadalang-tools
path: subprojects/libadalang-tools
- name: Get Templates Parser
uses: actions/checkout@v3
with:
repository: AdaCore/templates-parser
path: subprojects/templates-parser
- name: Get GNATdoc
uses: actions/checkout@v3
with:
repository: AdaCore/gnatdoc
path: subprojects/gnatdoc
ref: edge
- name: Get LAL Refactor
uses: actions/checkout@v3
with:
repository: AdaCore/lal-refactor
path: subprojects/lal-refactor
ref: edge
- uses: actions/cache@v3
with:
path: ./cached_gnat
key: ${{ runner.os }}-alire-2023
restore-keys: ${{ runner.os }}-alire-2023
- name: Get GNAT toolchain with alire
uses: alire-project/setup-alire@v2
with:
toolchain: gnat_native^13 gprbuild^22
toolchain_dir: ./cached_gnat
- name: Build
shell: bash
env:
AWS_ACCESS_KEY_ID: ${{secrets.GHA_CACHE_ACCESS_KEY_ID}}
AWS_SECRET_ACCESS_KEY: ${{secrets.GHA_CACHE_SECRET}}
run: |
# This is to avoid locking .sh on win that prevents its updating
cp .github/workflows/build-binaries.sh .github/workflows/build-binaries.sh_
.github/workflows/build-binaries.sh_ "${{ matrix.debug }}" ${{ runner.os }} ${{ env.TAG }} "" "${{ matrix.cross }}"
- name: Archive ALS binary
if: ${{ github.event_name == 'push' }}
uses: actions/upload-artifact@v3
with:
name: als-${{ runner.os }}-${{ matrix.debug }}${{ matrix.cross }}
# We know that only one of the following entries will match on a given
# run, so we use globs here to try to avoid warnings on unmatched
# entries
path: |
integration/vscode/ada/arm*
integration/vscode/ada/x64*
package:
if: ${{ github.event_name == 'push' }}
needs: build
runs-on: ubuntu-latest
steps:
- name: Get als
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Download all workflow run artifacts
uses: actions/download-artifact@v3
- name: Pack vscode extension
run: |
if [[ ${GITHUB_REF##*/} = 2*.[0-9]*.[0-9]* ]]; then
TAG="${GITHUB_REF##*/}"
.github/workflows/release.sh "" "${{ secrets.GITHUB_TOKEN }}" $TAG
# .github/workflows/release.sh "debug" "${{ secrets.GITHUB_TOKEN }}" $TAG
else
TAG="$DEFAULT_TAG"
fi
echo "TAG=$TAG" >> $GITHUB_ENV
.github/workflows/pack-binaries.sh "" "${{secrets.VSCE_TOKEN}}" "${{secrets.OPENVSX_TOKEN}}" $TAG
# .github/workflows/pack-binaries.sh "debug" "${{secrets.VSCE_TOKEN}}" "${{secrets.OPENVSX_TOKEN}}" $TAG
- name: Archive ALS vsix
uses: actions/upload-artifact@v3
with:
name: als-vsix-${{ matrix.debug }}${{ env.TAG }}
path: '*.vsix'