-
Notifications
You must be signed in to change notification settings - Fork 60
137 lines (136 loc) · 5.29 KB
/
build-binaries.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
on:
push:
tags:
- 2*.*.*
workflow_dispatch:
name: Build binaries
env:
DEFAULT_TAG: 24.0.999
jobs:
build:
name: Build and deploy
strategy:
fail-fast: false
matrix:
os: [macos-13, macos-14, ubuntu-20.04, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- 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: 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: Get als
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get GNAT toolchain with alire
shell: bash
run: |
# alire-project/setup-alire works for ARM64 Mac OS X now. Shall we use it?
if [[ "$RUNNER_ARCH" == ARM64 ]] ; then
ZIP=v2.0.2/alr-2.0.2-bin-aarch64-${RUNNER_OS}.zip
else
ZIP=v2.0.2/alr-2.0.2-bin-x86_64-${RUNNER_OS}.zip
fi
curl -L -O https://github.com/alire-project/alire/releases/download/$ZIP
unzip $(basename $ZIP)
bin/alr index --reset-community
bin/alr toolchain --select gnat_native gprbuild
echo $PWD/bin >> $GITHUB_PATH
- name: Get cross GNAT toolchain (Linux)
if: ${{ 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/aarch64-Linux-gcc-14.2.tar.bz2 . --sse=AES256
aws s3 cp s3://adacore-gha-tray-eu-west-1/toolchain/aarch64-Linux-gmp-6.2.1.tar.bz2 . --sse=AES256
sudo tar xjf aarch64-Linux-gcc-14.2.tar.bz2 -C /
sudo tar xjf aarch64-Linux-gmp-6.2.1.tar.bz2 -C /
- name: Fetch dependency commits numbers
shell: bash
if: ${{ env.TAG != env.DEFAULT_TAG }}
run: |
# For tags `actions/checkout@v2` action fetches a tag's commit, but
# not the tag annotation itself. Let's refetch the tag from origin.
# This makes `git show --no-patch --format=%n $TAG` work again.
git tag --delete $TAG
git fetch --tags
git show --no-patch --format=%n $TAG > deps.txt
- name: Build
shell: bash
run: |
alr settings --global --set dependencies.shared false
pip3 install e3-testsuite
scripts/build_als.sh all "$TAG"
- name: Build ALS with cross (Linux)
if: ${{ runner.os == 'Linux' }}
run: |
if alr exec -- gprconfig --show-targets | grep aarch64-linux; then
export GPRBUILD_EXTRA=--target=aarch64-linux
export NODE_ARCH_PLATFORM=arm64/linux
find . -name '*.ali' -delete
find . -name '*.[ao]' -delete
scripts/build_als.sh build_als "$TAG" arm64/linux
scripts/build_als.sh strip_debug "$TAG" arm64/linux
else
echo "No AArch64 cross compiler found:"
alr exec -- gprconfig --show-targets || true
fi
- name: Archive ALS binary
uses: actions/upload-artifact@v4
with:
name: als-${{ matrix.os }}
# 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*
- name: Upload release
shell: bash
if: ${{ env.TAG != env.DEFAULT_TAG }}
run: |
.github/workflows/release.sh "${{ secrets.GITHUB_TOKEN }}" $TAG ""
if [ -f integration/vscode/ada/arm64/linux/ada_language_server ] ; then
.github/workflows/release.sh "${{ secrets.GITHUB_TOKEN }}" $TAG arm64/linux
fi
- name: Package
shell: bash
run: |
.github/workflows/pack-binaries.sh "$TAG"
- name: Archive VSIX binary
uses: actions/upload-artifact@v4
with:
name: vsix-${{ matrix.os }}
path: "*.vsix"
- name: Upload result to AWS
shell: bash
if: ${{ github.repository == 'AdaCore/ada_language_server' && startsWith(matrix.os, 'macos-') }}
env:
AWS_ACCESS_KEY_ID: ${{secrets.GHA_PUBLISH_ACCESS_KEY_ID}}
AWS_SECRET_ACCESS_KEY: ${{secrets.GHA_PUBLISH_SECRET}}
AWS_DEFAULT_REGION: eu-west-1
run: |
for FILE in *.vsix ; do
aws s3 cp ${FILE} s3://als-publish-adacore-eu-west-1/vscode-extension/${TAG}/ --sse=AES256
done
aws s3 ls s3://als-publish-adacore-eu-west-1/vscode-extension/${TAG}/