Skip to content

Commit

Permalink
Add a GitHub workflow for testing the release infrastructure
Browse files Browse the repository at this point in the history
The `release-infra-test.yaml` workflow can be called manually to build
`nixpkgs#hello` on the ARM64 runner. The plan is to use it as a test
while making a release to catch problems with the infrastructure early.
  • Loading branch information
vkleen committed Mar 25, 2024
1 parent c755205 commit f15801e
Showing 1 changed file with 92 additions and 0 deletions.
92 changes: 92 additions & 0 deletions .github/workflows/release-infra-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: Test the ARM64 runner infrastructure
on:
workflow_dispatch:

jobs:
start-runner:
name: Start EC2 runner
runs-on: ubuntu-latest
outputs:
instance_id: ${{ steps.invoke-start.outputs.INSTANCE_ID }}
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.EC2_ROLE }}
aws-region: ${{ vars.EC2_REGION }}
- name: Start EC2 instance
id: invoke-start
env:
GH_TOKEN: ${{ secrets.GH_TOKEN_FOR_UPDATES }}
EC2_START: ${{ secrets.EC2_START }}
run: |
RUNNER_TOKEN=$(gh api -X POST -q '.token' /repos/${{ github.repository }}/actions/runners/registration-token)
aws lambda invoke \
--cli-binary-format raw-in-base64-out \
--function-name "$EC2_START" \
--payload '{"ref_name":"${{ github.ref_name }}","runner_token":"'"${RUNNER_TOKEN}"'"}' \
response.json
INSTANCE_ID=$(jq -r '.body.instance_id' < response.json)
echo "INSTANCE_ID=${INSTANCE_ID}" >>"$GITHUB_OUTPUT"
echo "Got EC2 instance ${INSTANCE_ID}"
echo 'Waiting for GitHub runner to start'
while [[ -z "$(gh api /repos/${{ github.repository }}/actions/runners | jq '.runners[] | select(.name == "ec2-spot")')" ]]; do
sleep 60
done
echo 'Done 🎉'
stop-runner:
name: Stop EC2 runner
runs-on: ubuntu-latest
# Ensure that `stop-runner` will always stop the EC2 instance, even if other jobs failed or were canceled
if: ${{ always() }}
needs:
- start-runner
- docker-multiplatform-image
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.EC2_ROLE }}
aws-region: ${{ vars.EC2_REGION }}
- name: Delete GitHub Runner
env:
GH_TOKEN: ${{ secrets.GH_TOKEN_FOR_UPDATES }}
run: |
RUNNER_ID=$(gh api /repos/${{ github.repository }}/actions/runners | jq '.runners[] | select(.name == "ec2-spot") | .id')
if [[ -n "${RUNNER_ID}" ]]; then
gh api -X DELETE /repos/${{ github.repository }}/actions/runners/${RUNNER_ID}
fi
- name: Lambda Invoke Stop
env:
EC2_STOP: ${{ secrets.EC2_STOP }}
run: |
aws lambda invoke \
--cli-binary-format raw-in-base64-out \
--function-name "$EC2_STOP" \
--payload '{"instance_id":"${{ needs.start-runner.outputs.instance_id }}"}' \
response.json
cat response.json
release-artifacts:
name: "Build hello"
strategy:
matrix:
os:
- runs-on: [EC2, ARM64, Linux]
architecture: arm64
runs-on: ${{ matrix.os.runs-on }}
needs:
- start-runner
steps:
- uses: actions/checkout@v4
with:
ref: master
- uses: cachix/install-nix-action@v25
name: "Installing Nix"
with:
extra_nix_config: |
experimental-features = nix-command flakes
accept-flake-config = true
nix_path: "nixpkgs=channel:nixos-unstable"
- name: "Build hello"
run: |
nix build --log-format raw-with-logs nixpkgs#hello

0 comments on commit f15801e

Please sign in to comment.