shrub/.github/workflows/build.yml

197 lines
6.0 KiB
YAML
Raw Normal View History

# Notes:
#
# jobs.<job_id>
#
# A seperate job id results in a lot of duplication of nix/cachix work.
# The build will have to download any substituted derivations from cachix
# for the steps with each distinct job id and upload built derivations to
# cachix after each job has completed, either succesfully or on failure.
#
# jobs.<job_id>.steps.run
#
# build + test are distinct as each step entry results in a collapsable title
# within the log output, which makes it easier to view failing builds or
# tests independently.
#
# jobs.<job_id>.strategy.fail-fast
#
# Set to false so developers working on vere or king-haskell can have their
# respective builds proceed without the other causing failure.
#
# shell.nix
#
# mkShell doesn't allow you to build it - so instantiate all the subshells
# defined for the individual pkg/*/shell.nix as a sanity check and to create
# some artefacts suitable for developers to pull from cachix. The top-level
# shell.nix build time is dominated by Haskell dependencies so it's built as
# part of the haskell build steps.
#
# Syntax:
#
# https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions
name: build
on:
push:
paths:
2021-03-29 21:42:15 +03:00
- 'pkg/arvo/**'
- 'pkg/docker-image/**'
- 'pkg/ent/**'
- 'pkg/ge-additions/**'
- 'pkg/libaes_siv/**'
- 'pkg/urbit/**'
2022-04-01 21:03:41 +03:00
- 'pkg/urcrypt/**'
2021-03-29 21:42:15 +03:00
- 'bin/**'
- 'nix/**'
2022-04-01 21:03:41 +03:00
- default.nix
pull_request:
paths:
2021-03-29 21:42:15 +03:00
- 'pkg/arvo/**'
- 'pkg/docker-image/**'
- 'pkg/ent/**'
- 'pkg/ge-additions/**'
- 'pkg/libaes_siv/**'
- 'pkg/urbit/**'
2022-04-01 21:03:41 +03:00
- 'pkg/urcrypt/**'
2021-03-29 21:42:15 +03:00
- 'bin/**'
- 'nix/**'
2022-04-01 21:03:41 +03:00
- default.nix
workflow_dispatch:
inputs:
upload:
description: 'upload binaries to gcp'
default: false
required: false
type: boolean
env:
2022-05-21 07:02:14 +03:00
DO_UPLOAD: >
inputs.upload ||
(github.ref_name == 'next/vere' && github.ref_type == 'branch')
UPLOAD_BASE: bootstrap.urbit.org/ci/vere/often
jobs:
urbit:
strategy:
fail-fast: false
matrix:
include:
- { os: ubuntu-latest }
- { os: macos-latest }
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
# We only want the extra nix config on linux, where it is necessary
# for the docker build. We don't want in on Mac, where it isn't but
# it breaks the nix install. The two `if` clauses should be mutually
# exclusive
- uses: cachix/install-nix-action@v16
with:
extra_nix_config: |
system-features = nixos-test benchmark big-parallel kvm
if: ${{ matrix.os == 'ubuntu-latest' }}
- uses: cachix/install-nix-action@v16
if: ${{ matrix.os != 'ubuntu-latest' }}
- uses: cachix/cachix-action@v10
with:
name: ares
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
- run: nix-build -A urbit --arg enableStatic true
- uses: google-github-actions/setup-gcloud@v0.2.0
if: ${{ env.DO_UPLOAD == 'true' }}
with:
version: '290.0.1'
service_account_key: ${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}
project_id: ${{ secrets.GCS_PROJECT }}
export_default_credentials: true
- name: upload binary to bootstrap.urbit.org
if: ${{ env.DO_UPLOAD == 'true' }}
# XX how to get the nix-store path from the previous step without "rebuilding" it?
run: |
result="$(nix-build -A urbit --arg enableStatic true)"
version="$(cat ./pkg/urbit/version)"
system="$(nix-instantiate --eval --expr 'builtins.currentSystem')"
system=${system:1:${#system}-2}
2022-05-21 07:02:14 +03:00
target="gs://${UPLOAD_BASE}/${GITHUB_SHA:0:9}/vere-v${version}-${system}"
gsutil cp -n $result/bin/urbit "$target"
exitcode=$?
test $exitcode -eq 0 &&
echo "upload to $target complete." ||
echo "upload to $target failed.";
exit $exitcode
- if: ${{ matrix.os == 'ubuntu-latest' }}
run: nix-build -A urbit-tests
- if: ${{ matrix.os == 'ubuntu-latest' }}
run: nix-build -A docker-image
2021-03-29 23:49:41 +03:00
mingw:
runs-on: windows-latest
defaults:
run:
2022-05-21 07:02:14 +03:00
shell: >
C:\msys64\msys2_shell.cmd -mingw64 -defterm -no-start -here -c
". <(cygpath '{0}')"
working-directory: ./pkg/urbit
2021-03-29 23:49:41 +03:00
steps:
- uses: actions/checkout@v2
with:
lfs: true
# echo suppresses pacman prompt
- run: echo|./configure
env:
CACHIX_CACHE: ares
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
2021-03-29 23:49:41 +03:00
- run: mingw32-make build/urbit
2022-05-21 07:02:14 +03:00
- run: >
build/urbit -l -d -B ../../bin/solid.pill -F bus &&
curl -f --data '{"source":{"dojo":"+hood/exit"},"sink":{"app":"hood"}}'
http://localhost:12321
- uses: actions/setup-python@v2
if: ${{ env.DO_UPLOAD == 'true' }}
with:
python-version: 3.7
- uses: google-github-actions/setup-gcloud@v0.6.0
if: ${{ env.DO_UPLOAD == 'true' }}
env:
# see https://github.com/google-github-actions/setup-gcloud/issues/100
CLOUDSDK_PYTHON: ${{env.pythonLocation}}\python.exe
with:
service_account_key: ${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}
project_id: ${{ secrets.GCS_PROJECT }}
export_default_credentials: true
- name: upload binary to bootstrap.urbit.org
if: ${{ env.DO_UPLOAD == 'true' }}
env:
CLOUDSDK_PYTHON: ${{env.pythonLocation}}\python.exe
shell: bash
run: |
version="$(cat ./version)"
system="x86_64-windows"
2022-05-21 07:02:14 +03:00
target="gs://${UPLOAD_BASE}/${GITHUB_SHA:0:9}/vere-v${version}-${system}.exe"
gsutil cp -n ./build/urbit.exe "$target"
exitcode=$?
test $exitcode -eq 0 &&
echo "upload to $target complete." ||
echo "upload to $target failed.";
exit $exitcode