Builing MacOS Package on MacOS 13 #2989
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: 'Test PR' | |
on: | |
pull_request: | |
types: [opened, edited, reopened, synchronize] | |
branches: | |
- 'develop' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
version-sync: | |
name: 'Version Sync' | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: 'Check out code' | |
uses: actions/checkout@v3 | |
with: | |
token: ${{ secrets.JENKINS_GITHUB_PAT }} | |
# fetch-depth 0 means deep clone the repo | |
fetch-depth: 0 | |
- name: 'Update Version' | |
run: | | |
set -x | |
git config user.name devops | |
git config user.email [email protected] | |
./package/version.sh sub | |
if git add --update && git commit --message "Set Version: $(cat package/version)"; then | |
git push origin HEAD:${GITHUB_HEAD_REF} | |
fi | |
nix-maven: | |
name: 'Nix: Maven' | |
runs-on: ubuntu-20.04 | |
needs: version-sync | |
steps: | |
- name: 'Check out code, set up Git' | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- run: | | |
git config user.name devops | |
git config user.email [email protected] | |
- name: 'Install Nix' | |
uses: cachix/install-nix-action@v22 | |
with: | |
install_url: https://releases.nixos.org/nix/nix-2.13.3/install | |
extra_nix_config: | | |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} | |
substituters = http://cache.nixos.org https://hydra.iohk.io | |
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= | |
- name: 'Install Cachix' | |
uses: cachix/cachix-action@v12 | |
with: | |
name: k-framework | |
authToken: '${{ secrets.CACHIX_PUBLIC_TOKEN }}' | |
skipPush: true | |
- name: 'Update Maven dependencies, push changes' | |
run: | | |
set -x | |
git checkout ${GITHUB_HEAD_REF} | |
if ! git diff --exit-code origin/${GITHUB_BASE_REF} origin/${GITHUB_HEAD_REF} \ | |
-- $(find . -name pom.xml); then | |
nix run .#update-maven | |
fi | |
if git add nix/ && git commit -m 'Update Nix lock files'; then | |
git push | |
fi | |
test-k: | |
name: 'K Tests' | |
runs-on: [self-hosted, linux, normal] | |
needs: version-sync | |
steps: | |
- name: 'Check out code' | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: 'Set up Docker' | |
uses: ./.github/actions/with-docker | |
with: | |
tag: k-ci-${{ github.sha }} | |
os: ubuntu | |
distro: jammy | |
llvm: 14 | |
- name: 'Build and Test K' | |
run: docker exec -t k-ci-${GITHUB_SHA} /bin/bash -c 'mvn verify --batch-mode -U' | |
- name: 'Check out k-exercises' | |
uses: actions/checkout@v3 | |
with: | |
repository: runtimeverification/k-exercises | |
token: ${{ secrets.JENKINS_GITHUB_PAT }} | |
submodules: recursive | |
path: k-exercises | |
- name: 'Tutorial Integration Tests' | |
run: | | |
docker exec -t k-ci-${GITHUB_SHA} /bin/bash -c 'k-distribution/target/release/k/bin/spawn-kserver kserver.log' | |
docker exec -t k-ci-${GITHUB_SHA} /bin/bash -c 'cd k-exercises/tutorial && make -j`nproc` --output-sync' | |
docker exec -t k-ci-${GITHUB_SHA} /bin/bash -c 'cd k-distribution/k-tutorial/1_basic && ./test_kompile.sh' | |
docker exec -t k-ci-${GITHUB_SHA} /bin/bash -c 'cd k-distribution/k-tutorial/2_intermediate && ./test_kompile.sh' | |
- name: 'Tear down Docker' | |
if: always() | |
run: | | |
docker stop --time=0 k-ci-${GITHUB_SHA} | |
docker container rm --force k-ci-${GITHUB_SHA} || true | |
test-package-ubuntu-jammy: | |
name: 'K Ubuntu Jammy Package' | |
runs-on: [self-hosted, linux, normal] | |
needs: version-sync | |
steps: | |
- uses: actions/checkout@v3 | |
- name: 'Build and Test' | |
uses: ./.github/actions/test-package | |
with: | |
os: ubuntu | |
distro: jammy | |
llvm: 14 | |
build-package: package/debian/build-package jammy | |
test-package: package/debian/test-package | |
- name: On Failure, Upload the kore-exec.tar.gz file to the Summary Page | |
if: failure() | |
uses: actions/upload-artifact@v2 | |
with: | |
name: kore-exec.tar.gz | |
path: | | |
**/kore-exec.tar.gz | |
- name: 'On Success, Upload the package built to the Summary Page' | |
if: success() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: kframework.deb | |
path: kframework.deb | |
if-no-files-found: error | |
retention-days: 1 | |
set-release-id: | |
name: 'Set Release ID' | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: 'Get release_id' | |
run: echo "release_id=$(jq --raw-output '.release.id' $GITHUB_EVENT_PATH)" >> ${GITHUB_OUTPUT} | |
id: release | |
outputs: | |
release_id: ${{ steps.release.outputs.release_id }} | |
source-tarball: | |
name: 'Create source tarball' | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Check out code' | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: 'Create source tarball' | |
env: | |
GITHUB_TOKEN: ${{ secrets.JENKINS_GITHUB_PAT }} | |
run: | | |
set -x | |
version=$(cat package/version) | |
tarball=kframework-${version}-src.tar.gz | |
find . -name .git | xargs rm -r | |
CURDIR=$(pwd) | |
cd .. | |
tar czvf ${tarball} $(basename ${CURDIR}) | |
mv ${tarball} ${CURDIR}/ | |
cd ${CURDIR} | |
gh release upload --repo runtimeverification/k --clobber v${version} ${tarball} | |
macos-build: | |
name: 'Build MacOS Package' | |
runs-on: macos-13 | |
timeout-minutes: 120 | |
needs: [set-release-id, source-tarball] | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
path: kframework | |
- name: Check out matching homebrew repo branch | |
uses: actions/checkout@v3 | |
id: checkout | |
with: | |
repository: kframework/homebrew-k | |
path: homebrew-k | |
ref: staging | |
continue-on-error: true | |
- name: Check out homebrew repo master branch | |
uses: actions/checkout@v3 | |
if: ${{ steps.checkout.outcome == 'failure' }} | |
with: | |
repository: kframework/homebrew-k | |
path: homebrew-k | |
- name: Cache maven | |
uses: actions/cache@v2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}- | |
restore-keys: | | |
${{ runner.os }}-maven- | |
- name: Build brew bottle | |
id: build | |
env: | |
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 | |
MAVEN_OPTS: >- | |
-Dhttp.keepAlive=false | |
-Dmaven.wagon.http.pool=false | |
-Dmaven.wagon.httpconnectionManager.ttlSeconds=30 | |
run: | | |
PACKAGE=kframework | |
VERSION=$(cat kframework/package/version) | |
ROOT_URL='https://github.com/runtimeverification/k/releases/download' | |
wget "$ROOT_URL/v${VERSION}/kframework-${VERSION}-src.tar.gz" | |
cd homebrew-k | |
../kframework/package/macos/brew-update-to-local ${PACKAGE} ${VERSION} | |
git commit Formula/$PACKAGE.rb -m "Update ${PACKAGE} to ${VERSION}: part 1" | |
../kframework/package/macos/brew-build-and-update-to-local-bottle ${PACKAGE} ${VERSION} ${ROOT_URL} | |
git reset HEAD^ | |
LOCAL_BOTTLE_NAME=$(basename $(find . -name "kframework--${VERSION}.big_sur.bottle*.tar.gz")) | |
BOTTLE_NAME=$(echo ${LOCAL_BOTTLE_NAME#./} | sed 's!kframework--!kframework-!') | |
../kframework/package/macos/brew-update-to-final ${PACKAGE} ${VERSION} ${ROOT_URL} | |
echo "path=${LOCAL_BOTTLE_NAME}" >> ${GITHUB_OUTPUT} | |
echo "path_remote=${BOTTLE_NAME}" >> ${GITHUB_OUTPUT} | |
echo "version=${VERSION}" >> ${GITHUB_OUTPUT} | |
- name: Upload bottle | |
uses: actions/upload-artifact@v2 | |
with: | |
name: homebrew | |
path: homebrew-k | |
- name: Delete Release | |
if: failure() | |
uses: actions/[email protected] | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
script: | | |
const { owner, repo } = context.repo | |
await github.rest.repos.deleteRelease({ owner, repo, release_id: ${{ needs.set-release-id.outputs.release_id }} }) | |
outputs: | |
bottle_path: ${{ steps.build.outputs.path }} | |
bottle_path_remote: ${{ steps.build.outputs.path_remote }} | |
version: ${{ steps.build.outputs.version }} | |
performance-tests: | |
name: 'Performace Tests' | |
runs-on: [self-hosted, linux, performance] | |
needs: test-package-ubuntu-jammy | |
steps: | |
- uses: actions/checkout@v3 | |
- name: 'Download K package from the Summary Page' | |
uses: actions/download-artifact@v3 | |
with: | |
name: kframework.deb | |
- name: 'Set up Docker Test Image' | |
env: | |
BASE_OS: ubuntu | |
BASE_DISTRO: jammy | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
BENCHER_API_TOKEN: ${{ secrets.BENCHER_API_TOKEN }} | |
BENCHER_PROJECT: k-framework | |
BENCHER_ADAPTER: json | |
run: | | |
set -euxo pipefail | |
workspace=$(pwd) | |
docker run --name k-profiling-tests-${GITHUB_SHA} \ | |
--rm -it --detach \ | |
-e BENCHER_API_TOKEN=$BENCHER_API_TOKEN \ | |
-e BENCHER_PROJECT=$BENCHER_PROJECT \ | |
-e BENCHER_ADAPTER=$BENCHER_ADAPTER \ | |
-e GITHUB_HEAD_REF=$GITHUB_HEAD_REF \ | |
-e GITHUB_BASE_REF=$GITHUB_BASE_REF \ | |
-e GITHUB_TOKEN=$GITHUB_TOKEN \ | |
-e GITHUB_ACTIONS=true \ | |
-e GITHUB_EVENT_NAME=$GITHUB_EVENT_NAME \ | |
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \ | |
-e GITHUB_REF=$GITHUB_REF \ | |
--workdir /opt/workspace \ | |
-v "${workspace}:/opt/workspace" \ | |
${BASE_OS}:${BASE_DISTRO} | |
- name: 'Install K from Package' | |
run: | | |
set -euxo pipefail | |
docker exec -t k-profiling-tests-${GITHUB_SHA} /bin/bash -c './k-distribution/tests/profiling/setup_profiling.sh' | |
- name: 'Profiling Performance Tests' | |
run: | | |
set -euxo pipefail | |
docker exec -t k-profiling-tests-${GITHUB_SHA} /bin/bash -c 'cd k-distribution/tests/profiling && make' | |
- name: 'Tear down Docker' | |
if: always() | |
run: | | |
docker stop --time=0 k-profiling-tests-${GITHUB_SHA} | |
docker container rm --force k-profiling-tests-${GITHUB_SHA} || true | |
compile-nix-flake: | |
name: 'Nix flake' | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- runner: [self-hosted, linux, normal] | |
- runner: macos-13 | |
os: macos-13 | |
- runner: MacM1 | |
os: self-macos-12 | |
runs-on: ${{ matrix.runner }} | |
needs: [nix-maven] | |
steps: | |
- name: 'Check out code' | |
uses: actions/checkout@v3 | |
- name: 'Upgrade bash' | |
if: ${{ contains(matrix.os, 'macos') }} | |
run: brew install bash | |
- name: 'Install Nix' | |
if: ${{ !startsWith(matrix.os, 'self') }} | |
uses: cachix/install-nix-action@v22 | |
with: | |
install_url: https://releases.nixos.org/nix/nix-2.13.3/install | |
extra_nix_config: | | |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} | |
substituters = http://cache.nixos.org https://hydra.iohk.io | |
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= | |
- name: 'Install Cachix' | |
if: ${{ !startsWith(matrix.os, 'self') }} | |
uses: cachix/cachix-action@v12 | |
with: | |
name: k-framework | |
authToken: '${{ secrets.CACHIX_PUBLIC_TOKEN }}' | |
- name: 'Build K Framework' | |
run: GC_DONT_GC=1 nix build --print-build-logs . | |
# These tests take a really long time to run on other platforms, so we | |
# skip them unless we're on the M1 runner. | |
- name: 'Test K' | |
if: ${{ matrix.os == 'self-macos-12' }} | |
run: GC_DONT_GC=1 nix build --print-build-logs .#test | |