Bundle GCM on macOS and Linux #228
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- master | |
tags: | |
- v* | |
pull_request: | |
jobs: | |
shellcheck: | |
name: Shellcheck | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Run ShellCheck | |
run: | | |
sudo apt-get install shellcheck | |
shopt -s globstar; shellcheck script/**/*.sh | |
build: | |
name: ${{ matrix.friendlyName }} ${{ matrix.arch }} | |
runs-on: ${{ matrix.os }} | |
container: ${{ matrix.image }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-11, windows-2019, ubuntu-20.04] | |
arch: [x86, x64] | |
include: | |
- os: macos-11 | |
friendlyName: macOS | |
targetPlatform: macOS | |
- os: macos-11 | |
friendlyName: macOS | |
targetPlatform: macOS | |
arch: arm64 | |
- os: windows-2019 | |
friendlyName: Windows | |
targetPlatform: win32 | |
- os: ubuntu-20.04 | |
friendlyName: Linux | |
targetPlatform: ubuntu | |
image: ubuntu:18.04 | |
- os: ubuntu-20.04 | |
friendlyName: Linux | |
targetPlatform: ubuntu | |
arch: arm64 | |
image: ubuntu:18.04 | |
- os: ubuntu-20.04 | |
friendlyName: Linux | |
targetPlatform: ubuntu | |
arch: arm | |
image: ubuntu:18.04 | |
exclude: | |
- os: macos-11 | |
arch: x86 | |
timeout-minutes: 20 | |
steps: | |
- name: Install dependencies into dockerfile on Ubuntu | |
if: matrix.targetPlatform == 'ubuntu' | |
run: | | |
# ubuntu dockerfile is very minimal (only 122 packages are installed) | |
# add dependencies expected by scripts | |
apt update | |
apt install -y software-properties-common lsb-release sudo wget curl build-essential jq autoconf automake pkg-config ca-certificates | |
# install new enough git to run actions/checkout | |
sudo add-apt-repository ppa:git-core/ppa -y | |
sudo apt update | |
sudo apt install -y git | |
# install new enough npm/nodejs to build dugite-native | |
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - | |
sudo apt-get install -y nodejs | |
# avoid "fatal: detected dubious ownership in repository at '/__w/dugite-native/dugite-native'" error | |
git config --global --add safe.directory '*' | |
# We need to use Xcode 11.7 for maximum compatibility with older macOS (x64) | |
- name: Switch to Xcode 11.7 | |
if: matrix.targetPlatform == 'macOS' && matrix.arch == 'x64' | |
run: | | |
sudo xcode-select -s /Applications/Xcode_11.7.app/Contents/Developer/ | |
# Delete the command line tools to make sure they don't get our builds | |
# messed up with macOS SDK 11 stuff. | |
sudo rm -rf /Library/Developer/CommandLineTools | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
# Needed for script/package.sh to work | |
fetch-depth: 0 | |
- name: Install go | |
if: matrix.targetPlatform == 'macOS' | |
uses: actions/setup-go@v5 | |
- name: Install dependencies | |
run: npm install | |
- name: Check formatting | |
run: npm run prettier | |
- name: Build tools | |
run: npm run check | |
- name: Install extra dependencies for building Git on Ubuntu (x64) | |
if: matrix.targetPlatform == 'ubuntu' && matrix.arch == 'x64' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libcurl4-gnutls-dev libexpat1-dev zlib1g-dev gettext libssl-dev | |
- name: Install extra dependencies for building Git on Ubuntu (x86) | |
if: matrix.targetPlatform == 'ubuntu' && matrix.arch == 'x86' | |
run: | | |
sudo dpkg --add-architecture i386 | |
sudo apt-get update | |
sudo apt-get install -y gcc-i686-linux-gnu binutils-i686-gnu libcurl4-gnutls-dev:i386 zlib1g-dev:i386 libssl-dev:i386 gettext | |
- name: Install extra dependencies for building Git on Ubuntu (arm64) | |
if: matrix.targetPlatform == 'ubuntu' && matrix.arch == 'arm64' | |
run: | | |
sudo sed -i "s/^deb/deb [arch=amd64,i386]/g" /etc/apt/sources.list | |
echo "deb [arch=arm64,armhf] http://azure.ports.ubuntu.com/ $(lsb_release -s -c) main universe multiverse restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=arm64,armhf] http://azure.ports.ubuntu.com/ $(lsb_release -s -c)-updates main universe multiverse restricted" | sudo tee -a /etc/apt/sources.list | |
sudo dpkg --add-architecture arm64 | |
sudo apt-get update | |
sudo apt-get install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu libcurl4-gnutls-dev:arm64 zlib1g-dev:arm64 libssl-dev:arm64 gettext | |
- name: Install extra dependencies for building Git on Ubuntu (arm) | |
if: matrix.targetPlatform == 'ubuntu' && matrix.arch == 'arm' | |
run: | | |
sudo sed -i "s/^deb/deb [arch=amd64,i386]/g" /etc/apt/sources.list | |
echo "deb [arch=arm64,armhf] http://azure.ports.ubuntu.com/ $(lsb_release -s -c) main universe multiverse restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=arm64,armhf] http://azure.ports.ubuntu.com/ $(lsb_release -s -c)-updates main universe multiverse restricted" | sudo tee -a /etc/apt/sources.list | |
sudo dpkg --add-architecture armhf | |
sudo apt-get update | |
sudo apt-get install -y gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf libcurl4-gnutls-dev:armhf zlib1g-dev:armhf libssl-dev:armhf gettext | |
- name: Build (except macOS arm64) | |
if: matrix.targetPlatform != 'macOS' || matrix.arch != 'arm64' | |
shell: bash | |
run: script/build.sh | |
env: | |
TARGET_PLATFORM: ${{ matrix.targetPlatform }} | |
TARGET_ARCH: ${{ matrix.arch }} | |
- name: Build (macOS arm64) | |
if: matrix.targetPlatform == 'macOS' && matrix.arch == 'arm64' | |
shell: bash | |
run: script/build.sh | |
env: | |
TARGET_PLATFORM: ${{ matrix.targetPlatform }} | |
TARGET_ARCH: ${{ matrix.arch }} | |
- name: Package | |
shell: bash | |
run: script/package.sh | |
env: | |
TARGET_PLATFORM: ${{ matrix.targetPlatform }} | |
TARGET_ARCH: ${{ matrix.arch }} | |
- name: Upload output artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: | |
dugite-native-${{ matrix.targetPlatform }}-${{ matrix.arch }}-output | |
path: ./output | |
retention-days: 5 | |
release: | |
name: Create GitHub release | |
needs: [build, shellcheck] | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download all artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: './artifacts' | |
- name: Display structure of downloaded files | |
run: ls -R | |
working-directory: './artifacts' | |
- name: Generate release notes | |
run: | | |
npm ci | |
DUGITE_TAG=${GITHUB_REF/refs\/tags\//} | |
node -r ts-node/register script/generate-release-notes.ts "${{ github.workspace }}/artifacts" "$DUGITE_TAG" "${{ secrets.GITHUB_TOKEN }}" | |
RELEASE_NOTES_FILE=script/release_notes.txt | |
if [[ ! -f "$RELEASE_NOTES_FILE" ]]; then | |
echo "$RELEASE_NOTES_FILE does not exist. Something might have gone wrong while generating the release notes." | |
exit 1 | |
fi | |
echo 'DUGITE_RELEASE_NOTES<<EOF' >> $GITHUB_ENV | |
cat ${RELEASE_NOTES_FILE} >> $GITHUB_ENV | |
echo 'EOF' >> $GITHUB_ENV | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
body: ${{ env.DUGITE_RELEASE_NOTES }} | |
draft: true | |
prerelease: false | |
files: ${{ github.workspace }}/artifacts/**/* | |
fail_on_unmatched_files: true |