Skip to content

Build universal macOS binary #60

Build universal macOS binary

Build universal macOS binary #60

Workflow file for this run

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Perform Release
on:
push:
branches:
- main
- wip/macos
pull_request:
workflow_dispatch:
inputs:
version:
description: 'The release version'
required: true
type: string
jobs:
make-linux-binary:
strategy:
matrix:
os: [ubuntu-20.04]
include:
- os: ubuntu-20.04
platform: linux-ubuntu-20.04
local_path: staging/bsp4bazel
uploaded_filename: bsp4bazel-x86_64-pc-linux
name: Make binaries for ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Print version
run: |
echo Performing release for ${{ inputs.version }}
- name: Setup Windows C++ toolchain
uses: ilammy/msvc-dev-cmd@v1
if: ${{ matrix.os == 'windows-2019' }}
- uses: VirtusLab/scala-cli-setup@main
- uses: graalvm/setup-graalvm@v1
with:
version: 'latest'
java-version: '17'
components: 'native-image'
cache: 'sbt'
# Update version in build.sbt first, as that gets backed into the native-image (via sbt-buildinfo)
- name: Update version
if: github.event_name == 'workflow_dispatch'
run: scala-cli .github/ci_scripts/updateVersion.scala -- build.sbt "^val bsp4BazelVersion" ${{ inputs.version }}
- name: Build native image
shell: bash
run: |
sbt clean compile graalvm-native-image:packageBin
./.github/ci_scripts/prepare_output.sh target/graalvm-native-image/bsp4bazel staging ${{ matrix.artifact }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
path: ${{ matrix.local_path }}
name: ${{ matrix.uploaded_filename }}
native-image-macos:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: macOS-12
local_path: staging/bsp4bazel
uploaded_filename: bsp4bazel-x86_64-apple-darwin
- os: macOS-14
local_path: staging/bsp4bazel
uploaded_filename: bsp4bazel-aarch64-apple-darwin
steps:
- uses: actions/checkout@v4
- name: Print version
run: |
echo Performing release for ${{ inputs.version }}
- uses: VirtusLab/scala-cli-setup@main
- uses: graalvm/setup-graalvm@v1
with:
version: 'latest'
java-version: '17'
components: 'native-image'
cache: 'sbt'
# Update version in build.sbt first, as that gets backed into the native-image (via sbt-buildinfo)
- name: Update version
if: github.event_name == 'workflow_dispatch'
run: scala-cli .github/ci_scripts/updateVersion.scala -- build.sbt "^val bsp4BazelVersion" ${{ inputs.version }}
# macOS image is missing sbt
- name: Build native image
shell: bash
run: |
mkdir -p "$HOME/bin/"
curl -sL https://raw.githubusercontent.com/sbt/sbt/v1.9.9/sbt > "$HOME/bin/sbt"
export PATH="$PATH:$HOME/bin"
chmod +x "$HOME/bin/sbt"
sbt clean compile graalvm-native-image:packageBin
./.github/ci_scripts/prepare_output.sh target/graalvm-native-image/bsp4bazel staging ${{ matrix.artifact }}
- uses: actions/upload-artifact@v4
with:
path: ${{ matrix.local_path }}
name: ${{ matrix.uploaded_filename }}
native-image-universal-macos:
needs: native-image-macos
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: macOS-12
local_path: staging/bsp4bazel
uploaded_filename: bsp4bazel-universal-apple-darwin
steps:
# Download the aritfacts produced in the preceeding jobs
- name: Download binaries
uses: actions/download-artifact@v4
with:
path: staging
- name: Display structure of downloaded files
run: ls -R staging
- name: Build universal binary
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mkdir -p target
lipo -create -o "target/bsp4bazel" "staging/bsp4bazel-x86_64-apple-darwin" "staging/bsp4bazel-aarch64-apple-darwin"
./.github/ci_scripts/prepare_output.sh "target/bsp4bazel" staging ${{ matrix.artifact }}
- uses: actions/upload-artifact@v4
with:
path: ${{ matrix.local_path }}
name: ${{ matrix.uploaded_filename }}
make_release:
if: github.event_name == 'workflow_dispatch'
name: Make release
needs: [make-linux-binary, native-image-universal-macos]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
path: "repo"
- uses: VirtusLab/scala-cli-setup@main
# Download the aritfacts produced in the preceeding jobs
- name: Download binaries
uses: actions/download-artifact@v4
with:
path: staging
- name: Display structure of downloaded files
run: ls -R staging
# Update versions, and shas, in files
- name: Update versions, and shas
working-directory: "repo"
run: |
./.github/ci_scripts/update_all.sh ${{ inputs.version }}
# Push changes back to master
- name: Commit updates
working-directory: "repo"
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git commit -a -m "Release ${{ inputs.version }}"
git tag -a -m "Release ${{ inputs.version }}" ${{ inputs.version }}
git push --atomic --follow-tags
- name: "Create release"
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "${{ inputs.version }}"
prerelease: false
files: |
staging/bsp4bazel-x86_64-pc-linux
staging/bsp4bazel-x86_64-pc-linux.sha256
staging/bsp4bazel-universal-apple-darwin
staging/bsp4bazel-universal-apple-darwin.sha256
staging/bazel_rules.tar.gz
staging/bazel_rules.tar.gz.sha256