4cd2da5202
The previous CI attemtped to use Homebrew for builds, but unfortunately Homebrew has dropped support for universal packages aka multiarch (fat) binaries. This means that in order to build an arm64 + x86_64 package, macports has to be used instead of homebrew. Unlike Homebrew, MacPorts is not installed by default on the GitHub Actions runners, so we need to install it ourselves. This means managing our own instance of the cache, which itself produces challenges as the `gtar` binary run by the action doesn't have enough permissions to restore the MacPorts checkout. So we have to shim gtar with a sudo wrapper. With this commit, we produce a Mosh package that works on macOS 11.0 and newer, on both arm64 and x86_64 architectures. The protobuf library is statically linked, but all other libraries are provided by the system.
135 lines
4.2 KiB
YAML
135 lines
4.2 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
# This syntax is globs, not regex, so it's matching any tag that
|
|
# contains the prefix "mosh-" and the 3 version elements.
|
|
- "mosh-*.*.*"
|
|
|
|
jobs:
|
|
macports-cache:
|
|
runs-on: macos-12
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: "Install gtar wrapper"
|
|
run: |
|
|
sudo mv /usr/local/bin/gtar /usr/local/bin/gtar.orig
|
|
sudo cp macosx/gtar /usr/local/bin/gtar
|
|
sudo chmod +x /usr/local/bin/gtar
|
|
|
|
- name: Cache macports
|
|
id: cache-macports
|
|
uses: actions/cache@v3
|
|
env:
|
|
cache-name: cache-macports
|
|
with:
|
|
path: /opt/local
|
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('macosx/port-deps.sh') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-build-${{ env.cache-name }}-
|
|
${{ runner.os }}-build-
|
|
${{ runner.os }}-
|
|
|
|
- name: "setup MacPorts environment"
|
|
run: |
|
|
curl -L "https://github.com/macports/macports-base/releases/download/v2.7.2/MacPorts-2.7.2-12-Monterey.pkg" --output macports.pkg
|
|
sudo installer -pkg macports.pkg -target /
|
|
./macosx/port-deps.sh deps
|
|
|
|
release:
|
|
needs: macports-cache
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-20.04, macos-12]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: "ensure version bumped"
|
|
run: |
|
|
expected_tag=$(echo ${{ github.ref }} | cut -d'/' -f3)
|
|
have_tag="mosh-$(sed -n 's/AC_INIT(\[[^]]*\], \[\([^]]*\)\].*/\1/p' <configure.ac)"
|
|
echo "Expected tag <$expected_tag>, got <$have_tag>"
|
|
if [[ "$expected_tag" != "$have_tag" ]]; then exit 1; fi
|
|
|
|
- name: "setup linux build environment"
|
|
if: ${{ startsWith(matrix.os, 'ubuntu') }}
|
|
run: sudo apt install -y protobuf-compiler libprotobuf-dev libutempter-dev autoconf automake nettle-dev
|
|
|
|
- name: "Install gtar wrapper"
|
|
if: ${{ startsWith(matrix.os, 'macos') }}
|
|
run: |
|
|
sudo mv /usr/local/bin/gtar /usr/local/bin/gtar.orig
|
|
sudo cp macosx/gtar /usr/local/bin/gtar
|
|
sudo chmod +x /usr/local/bin/gtar
|
|
|
|
- name: Restore macports cache
|
|
id: cache-macports
|
|
if: ${{ startsWith(matrix.os, 'macos') }}
|
|
uses: actions/cache@v3
|
|
env:
|
|
cache-name: cache-macports
|
|
with:
|
|
path: /opt/local
|
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('macosx/port-deps.sh') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-build-${{ env.cache-name }}-
|
|
${{ runner.os }}-build-
|
|
${{ runner.os }}-
|
|
|
|
- name: "describe macos build environment"
|
|
if: ${{ startsWith(matrix.os, 'macos') }}
|
|
run: |
|
|
BUILD_TAG=$(echo ${{ github.ref }} | cut -d'/' -f3)
|
|
mkdir macosx/build-report &&
|
|
pushd macosx/build-report &&
|
|
../port-deps.sh describe &&
|
|
../osx-xcode.sh describe &&
|
|
tar -cjf "../${BUILD_TAG}-osx-build-report.tbz" . &&
|
|
popd
|
|
|
|
- name: "generate build scripts"
|
|
run: PATH=/opt/local/bin:$PATH ./autogen.sh
|
|
|
|
- name: "configure"
|
|
if: ${{ startsWith(matrix.os, 'ubuntu') }}
|
|
run: ./configure --enable-compile-warnings=error --enable-examples
|
|
|
|
- name: "build"
|
|
if: ${{ startsWith(matrix.os, 'ubuntu') }}
|
|
run: make V=1
|
|
|
|
- name: "test"
|
|
if: ${{ startsWith(matrix.os, 'ubuntu') }}
|
|
run: make V=1 distcheck -j
|
|
|
|
- name: "unshallow git repository for git describe"
|
|
if: ${{ startsWith(matrix.os, 'macos') }}
|
|
run: git fetch --tags --unshallow
|
|
|
|
- name: "macOS package build"
|
|
if: ${{ startsWith(matrix.os, 'macos') }}
|
|
run: |
|
|
pushd macosx &&
|
|
env ZERO_AR_DATE=1 MACOSX_DEPLOYMENT_TARGET=11.0 PATH=/opt/local/bin:$PATH ./build.sh &&
|
|
popd
|
|
|
|
- name: "Upload Release"
|
|
# v1 aka v0.1.14 as of 2022-07-05; pinned to avoid potential code injection
|
|
uses: softprops/action-gh-release@1e07f4398721186383de40550babbdf2b84acfc5
|
|
with:
|
|
# Action always creates releases in "draft" mode, and requires
|
|
# a maintainer to publish them
|
|
draft: True
|
|
prerelease: contains(github.ref, 'rc')
|
|
generate_release_notes: True
|
|
files: |
|
|
mosh-*.tar.gz
|
|
macosx/*.pkg
|
|
macosx/*-osx-build-report.tbz
|