mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-29 18:33:05 +00:00
build docker images on PR
Sometimes we want people to test features in PRs and not everyone is used to using git, build go and docker. This commit builds docker containers and pushes them to GHCR (not dockerhub) for testing on pushes to branches that has open pull requests to main using Ko. This is configured to mimic the debug images produced by goreleaser. Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
parent
fcd1183805
commit
cec46716b6
4 changed files with 104 additions and 36 deletions
71
.github/workflows/build-docker-pr.yml
vendored
Normal file
71
.github/workflows/build-docker-pr.yml
vendored
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
name: Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-$${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions: write-all
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
- name: Get changed files
|
||||||
|
id: changed-files
|
||||||
|
uses: dorny/paths-filter@v3
|
||||||
|
with:
|
||||||
|
filters: |
|
||||||
|
files:
|
||||||
|
- '*.nix'
|
||||||
|
- 'go.*'
|
||||||
|
- '**/*.go'
|
||||||
|
- 'integration_test/'
|
||||||
|
- 'config-example.yaml'
|
||||||
|
- uses: DeterminateSystems/nix-installer-action@main
|
||||||
|
if: steps.changed-files.outputs.files == 'true'
|
||||||
|
- uses: DeterminateSystems/magic-nix-cache-action@main
|
||||||
|
if: steps.changed-files.outputs.files == 'true'
|
||||||
|
|
||||||
|
- name: Run build
|
||||||
|
id: build
|
||||||
|
if: steps.changed-files.outputs.files == 'true'
|
||||||
|
run: |
|
||||||
|
nix build |& tee build-result
|
||||||
|
BUILD_STATUS="${PIPESTATUS[0]}"
|
||||||
|
|
||||||
|
OLD_HASH=$(cat build-result | grep specified: | awk -F ':' '{print $2}' | sed 's/ //g')
|
||||||
|
NEW_HASH=$(cat build-result | grep got: | awk -F ':' '{print $2}' | sed 's/ //g')
|
||||||
|
|
||||||
|
echo "OLD_HASH=$OLD_HASH" >> $GITHUB_OUTPUT
|
||||||
|
echo "NEW_HASH=$NEW_HASH" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
exit $BUILD_STATUS
|
||||||
|
|
||||||
|
- name: Nix gosum diverging
|
||||||
|
uses: actions/github-script@v6
|
||||||
|
if: failure() && steps.build.outcome == 'failure'
|
||||||
|
with:
|
||||||
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
script: |
|
||||||
|
github.rest.pulls.createReviewComment({
|
||||||
|
pull_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
body: 'Nix build failed with wrong gosum, please update "vendorSha256" (${{ steps.build.outputs.OLD_HASH }}) for the "headscale" package in flake.nix with the new SHA: ${{ steps.build.outputs.NEW_HASH }}'
|
||||||
|
})
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
if: steps.changed-files.outputs.files == 'true'
|
||||||
|
with:
|
||||||
|
name: headscale-linux
|
||||||
|
path: result/bin/headscale
|
43
.github/workflows/build.yml
vendored
43
.github/workflows/build.yml
vendored
|
@ -1,9 +1,6 @@
|
||||||
name: Build
|
name: Build Docker images for PRs
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
@ -36,36 +33,22 @@ jobs:
|
||||||
- uses: DeterminateSystems/magic-nix-cache-action@main
|
- uses: DeterminateSystems/magic-nix-cache-action@main
|
||||||
if: steps.changed-files.outputs.files == 'true'
|
if: steps.changed-files.outputs.files == 'true'
|
||||||
|
|
||||||
- name: Run build
|
- uses: actions/github-script@v6
|
||||||
id: build
|
id: get_pr_data
|
||||||
if: steps.changed-files.outputs.files == 'true'
|
|
||||||
run: |
|
|
||||||
nix build |& tee build-result
|
|
||||||
BUILD_STATUS="${PIPESTATUS[0]}"
|
|
||||||
|
|
||||||
OLD_HASH=$(cat build-result | grep specified: | awk -F ':' '{print $2}' | sed 's/ //g')
|
|
||||||
NEW_HASH=$(cat build-result | grep got: | awk -F ':' '{print $2}' | sed 's/ //g')
|
|
||||||
|
|
||||||
echo "OLD_HASH=$OLD_HASH" >> $GITHUB_OUTPUT
|
|
||||||
echo "NEW_HASH=$NEW_HASH" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
exit $BUILD_STATUS
|
|
||||||
|
|
||||||
- name: Nix gosum diverging
|
|
||||||
uses: actions/github-script@v6
|
|
||||||
if: failure() && steps.build.outcome == 'failure'
|
|
||||||
with:
|
with:
|
||||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
||||||
script: |
|
script: |
|
||||||
github.rest.pulls.createReviewComment({
|
return (
|
||||||
pull_number: context.issue.number,
|
await github.rest.repos.listPullRequestsAssociatedWithCommit({
|
||||||
|
commit_sha: context.sha,
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
body: 'Nix build failed with wrong gosum, please update "vendorSha256" (${{ steps.build.outputs.OLD_HASH }}) for the "headscale" package in flake.nix with the new SHA: ${{ steps.build.outputs.NEW_HASH }}'
|
|
||||||
})
|
})
|
||||||
|
).data[0];
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- name: Run ko build
|
||||||
|
id: build
|
||||||
if: steps.changed-files.outputs.files == 'true'
|
if: steps.changed-files.outputs.files == 'true'
|
||||||
with:
|
env:
|
||||||
name: headscale-linux
|
KO_DOCKER_REPO: ghcr.io/${{ github.repository_owner }}/headscale
|
||||||
path: result/bin/headscale
|
run: |
|
||||||
|
ko build --tags=pr-${{ fromJson(steps.get_pr_data.outputs.result).number }},${{ github.sha }} ./cmd/headscale
|
||||||
|
|
|
@ -27,8 +27,6 @@ builds:
|
||||||
- -mod=readonly
|
- -mod=readonly
|
||||||
ldflags:
|
ldflags:
|
||||||
- -s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=v{{.Version}}
|
- -s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=v{{.Version}}
|
||||||
tags:
|
|
||||||
- ts2019
|
|
||||||
|
|
||||||
archives:
|
archives:
|
||||||
- id: golang-cross
|
- id: golang-cross
|
||||||
|
|
16
.ko.yaml
Normal file
16
.ko.yaml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
defaultBaseImage: gcr.io/distroless/base-debian12:debug
|
||||||
|
defaultPlatforms:
|
||||||
|
- linux/arm64
|
||||||
|
- linux/arm/v7
|
||||||
|
- linux/amd64
|
||||||
|
- linux/386
|
||||||
|
|
||||||
|
builds:
|
||||||
|
- id: headscale
|
||||||
|
main: ./cmd/headscale
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
flags:
|
||||||
|
- -mod=readonly
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=v{{.Git.ShortCommit}}
|
Loading…
Reference in a new issue