Skip to content

Commit

Permalink
Build universal macOS binary
Browse files Browse the repository at this point in the history
  • Loading branch information
eed3si9n committed Apr 5, 2024
1 parent 579f643 commit 1a7cd50
Showing 1 changed file with 104 additions and 28 deletions.
132 changes: 104 additions & 28 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
name: Perform Release

on:
push:
branches:
- main
- wip/macos
pull_request:
workflow_dispatch:
inputs:
version:
Expand All @@ -14,24 +19,25 @@ on:
type: string

jobs:
make-binaries:
make-linux-binary:
strategy:
matrix:
os: [macos-latest, ubuntu-20.04]
os: [ubuntu-20.04]
include:
- os: macos-latest
platform: macos-x86
artifact: bsp4bazel-macos-x86
- os: ubuntu-20.04
platform: linux-ubuntu-20.04
artifact: bsp4bazel-linux-x86
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@v3
- uses: actions/checkout@v4
- name: Print version
run: |
echo Performing release for ${{ inputs.version }}
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:
Expand All @@ -40,36 +46,106 @@ jobs:
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 and build native image
run: |
scala-cli .github/ci_scripts/updateVersion.scala -- build.sbt "^val bsp4BazelVersion" ${{ inputs.version }}
- 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 }}
./.github/ci_scripts/prepare_output.sh target/graalvm-native-image/bsp4bazel staging ${{ matrix.artifact }}
- name: Upload binary
uses: actions/upload-artifact@v3
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 }}
- 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 }}
- 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:
name: ${{ matrix.artifact }}
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-binaries]
needs: [make-linux-binary, native-image-universal-macos]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
path: "repo"
- uses: VirtusLab/scala-cli-setup@main
# Download the aritfacts produced in the preceeding jobs
- name: Download linux 20.04
uses: actions/download-artifact@v3
with:
name: bsp4bazel-linux-x86
path: staging
- name: Download macos x86
uses: actions/download-artifact@v3
- name: Download binaries
uses: actions/download-artifact@v4
with:
name: bsp4bazel-macos-x86
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"
Expand All @@ -91,9 +167,9 @@ jobs:
automatic_release_tag: "${{ inputs.version }}"
prerelease: false
files: |
staging/bsp4bazel-linux-x86
staging/bsp4bazel-linux-x86.sha256
staging/bsp4bazel-macos-x86
staging/bsp4bazel-macos-x86.sha256
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

0 comments on commit 1a7cd50

Please sign in to comment.