Skip to content

Commit

Permalink
CI/CD: Run integration tests and GoReleaser concurrently (#3258)
Browse files Browse the repository at this point in the history
  • Loading branch information
tlimoncelli authored Dec 17, 2024
1 parent c74fbd5 commit 7f477d8
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 60 deletions.
83 changes: 83 additions & 0 deletions .github/workflows/pr_build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: "PR: Run Unit tests and Build artifacts for all platforms"

# When will this pipeline be activated?
# 1. On any pull-request, or if someone pushes to a branch called
# "tlim_testpr".
on:
pull_request:
workflow_dispatch:
# Want to trigger all the tests without making a PR?
# Run: git push origin main:tlim_testpr --force
# This will trigger a full PR test on the main branch.
# See https://github.com/StackExchange/dnscontrol/actions/workflows/pr_test.yml?query=branch%3Atlim_testpr
push:
branches:
- 'tlim_testpr'

# Environment Variables
env:
# cache-key: Change to force cache reset `pwsh > Get-Date -UFormat %s`
cache-key: 1639697695
# go-mod-path: Where go-mod writes temp files
go-mod-path: /go/pkg/mod
# BIND_DOMAIN: BIND is the one providers that we always test. By
# defining this here, we know it will always be set.
BIND_DOMAIN: example.com

jobs:

# Run unit tests:

build:
runs-on: ubuntu-latest
env:
TEST_RESULTS: "/tmp/test-results"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: stable
- name: restore_cache
uses: actions/[email protected]
with:
key: linux-go-${{ hashFiles('go.sum') }}-${{ env.cache-key }}
restore-keys: linux-go-${{ hashFiles('go.sum') }}-${{ env.cache-key }}
path: ${{ env.go-mod-path }}
- run: mkdir -p "$TEST_RESULTS"
- name: Run unit tests
run: |
go install gotest.tools/gotestsum@latest
gotestsum --junitfile ${TEST_RESULTS}/gotestsum-report.xml -- $PACKAGE_NAMES
# - name: Enforce Go Formatted Code
# run: "[ `go fmt ./... | wc -l` -eq 0 ]"
- uses: actions/[email protected]
with:
name: unit-tests
path: ${{ env.TEST_RESULTS }}

# build: Use GoReleaser to build binaries for all platforms.

# Stringer is needed because .goreleaser includes "go generate ./..."
- name: Install stringer
run: |
go install golang.org/x/tools/cmd/stringer@latest
-
id: build_binaries_tagged
name: Build binaries (if tagged)
if: github.ref_type == 'tag'
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: latest
args: build
-
id: build_binaries_not_tagged
name: Build binaries (not tagged)
if: github.ref_type != 'tag'
uses: goreleaser/goreleaser-action@v6
with:
args: build --snapshot
Original file line number Diff line number Diff line change
@@ -1,73 +1,37 @@
name: "PR: Run all tests"
name: "PR: Run integration tests"

# When will this pipeline be activated?
# 1. On any pull-request, or if someone pushes to a branch called
# "tlim_testpr".
on:
# git push origin main:tlim_testpr --force
# will trigger a full PR test on the main branch:
# https://github.com/StackExchange/dnscontrol/actions/workflows/pr_test.yml?query=branch%3Atlim_testpr
pull_request:
workflow_dispatch:
# Want to trigger all the tests without making a PR?
# Run: git push origin main:tlim_testpr --force
# This will trigger a full PR test on the main branch.
# See https://github.com/StackExchange/dnscontrol/actions/workflows/pr_test.yml?query=branch%3Atlim_testpr
push:
branches:
- 'tlim_testpr'
pull_request:
workflow_dispatch:

# Environment Variables
env:
cache-key: 1639697695 #Change to force cache reset `pwsh > Get-Date -UFormat %s`
# cache-key: Change to force cache reset `pwsh > Get-Date -UFormat %s`
cache-key: 1639697695
# go-mod-path: Where go-mod writes temp files
go-mod-path: /go/pkg/mod
# BIND_DOMAIN: BIND is the one providers that we always test. By
# defining this here, we know it will always be set.
BIND_DOMAIN: example.com

jobs:
build:
runs-on: ubuntu-latest
env:
TEST_RESULTS: "/tmp/test-results"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: stable
- name: restore_cache
uses: actions/[email protected]
with:
key: linux-go-${{ hashFiles('go.sum') }}-${{ env.cache-key }}
restore-keys: linux-go-${{ hashFiles('go.sum') }}-${{ env.cache-key }}
path: ${{ env.go-mod-path }}
- run: mkdir -p "$TEST_RESULTS"
- name: Run unit tests
run: |
go install gotest.tools/gotestsum@latest
gotestsum --junitfile ${TEST_RESULTS}/gotestsum-report.xml -- $PACKAGE_NAMES
- name: Enforce Go Formatted Code
run: "[ `go fmt ./... | wc -l` -eq 0 ]"
- uses: actions/[email protected]
with:
name: unit-tests
path: ${{ env.TEST_RESULTS }}

# Stringer is needed because .goreleaser includes "go generate ./..."
- name: Install stringer
run: |
go install golang.org/x/tools/cmd/stringer@latest

-
id: build_binaries_tagged
name: Build binaries (if tagged)
if: github.ref_type == 'tag'
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: latest
args: build
-
id: build_binaries_not_tagged
name: Build binaries (not tagged)
if: github.ref_type != 'tag'
uses: goreleaser/goreleaser-action@v6
with:
args: build --snapshot
# integration-test-providers: Determine which providers have a _DOMAIN variable set.
# That variable enables testing for the provider. The results are
# stored in a JSON blob stashed in # needs.integration-test-providers.outputs.integration_test_providers
# where integration-tests can pick it up.
integration-test-providers:
needs: build
#needs: build
runs-on: ubuntu-latest
outputs:
integration_test_providers: ${{ steps.get_integration_test_providers.outputs.integration_test_providers }}
Expand All @@ -92,6 +56,9 @@ jobs:
ENV_CONTEXT: ${{ toJson(env) }}
VARS_CONTEXT: ${{ toJson(vars) }}
SECRETS_CONTEXT: ${{ toJson(secrets) }}

# integration-tests: Run the integration tests on any provider listed
# in needs.integration-test-providers.outputs.integration_test_providers.
integration-tests:
if: github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main'
runs-on: ubuntu-latest
Expand Down Expand Up @@ -150,7 +117,7 @@ jobs:
CNR_UID: ${{ secrets.CNR_UID }}
CNR_PW: ${{ secrets.CNR_PW }}
CNR_ENTITY: ${{ secrets.CNR_ENTITY }}
#
#
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
#
GANDI_V5_APIKEY: ${{ secrets.GANDI_V5_APIKEY }}
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/release_draft.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
name: "Release: Make release candidate"

on:
push:
tags:
- v[0-9]+.[0-9]+.[0-9]+
- v[0-9]+.[0-9]+.[0-9]+-*

name: "Release: Make release candidate"
jobs:
draft_release:
name: draft release
Expand Down Expand Up @@ -49,6 +50,7 @@ jobs:
run: |
go install golang.org/x/tools/cmd/stringer@latest
# use GoReleaser to build for all platforms.
-
id: release
name: Goreleaser release
Expand Down

0 comments on commit 7f477d8

Please sign in to comment.