Continuous Integration #2619
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: Continuous Integration | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: '0 12 * * *' | |
push: | |
branches: | |
- 'main' | |
- 'renovate/**' | |
tags: | |
- 'v*.*.*' | |
pull_request: | |
branches: | |
- 'main' | |
permissions: | |
contents: read | |
jobs: | |
lint-charts: | |
name: Lint Helm charts | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout GitHub Repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Helm lint | |
run: | | |
make lint-charts | |
- name: Install Helm Docs | |
# Use syntax ${version} instead of $version | |
# In certain contexts, only the less ambiguous ${version} form works | |
# Source: https://tldp.org/LDP/abs/html/parameter-substitution.html | |
run: | | |
version="v1.14.2" | |
stripped=$( echo "${version}" | sed s'/v//' ) | |
wget https://github.com/norwoodj/helm-docs/releases/download/${version}/helm-docs_${stripped}_Linux_x86_64.tar.gz | |
tar --extract --verbose --file="helm-docs_${stripped}_Linux_x86_64.tar.gz" helm-docs | |
sudo mv helm-docs /usr/local/sbin | |
- name: Verify Helm docs are up to date | |
run: | | |
make validate-helm-docs | |
golangci-lint: | |
name: Lint Go files | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout GitHub Repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: '0' | |
- name: Set up Go | |
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 | |
with: | |
go-version-file: './go.mod' | |
- name: Run golangci-lint | |
uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1 | |
with: | |
# Require: The version of golangci-lint to use. | |
# When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version. | |
# When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit. | |
version: latest | |
# Optional: golangci-lint command line arguments. | |
# | |
# Note: by default the `.golangci.yml` file should be at the root of the repository. | |
# The location of the configuration file can be changed by using `--config=` | |
args: --config=./.github/.golangci.yml | |
# Optional: if set to true, then all caching functionality will be completely disabled, | |
# takes precedence over all other caching options. | |
# Skip cache because of flaky behavior. Source: | |
# https://github.com/golangci/golangci-lint/blob/master/.github/workflows/pr.yml#L49 | |
skip-cache: true | |
# Optional: if set to true, then the action won't cache or restore ~/go/pkg. | |
skip-pkg-cache: true | |
# Optional: if set to true, then the action won't cache or restore ~/.cache/go-build. | |
skip-build-cache: true | |
tests: | |
name: Unit and integration tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout GitHub Repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Go | |
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 | |
with: | |
go-version-file: './go.mod' | |
- name: Set up tests | |
run: | | |
make clean | |
make format | |
make validate-modules | |
- name: Run unit tests for Go | |
run: | | |
make test | |
- name: Run integration tests for Go | |
run: | | |
make integration | |
- name: Upload coverage reports to Codecov | |
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
with: | |
files: ./tmp/cover-unit.out,./tmp/cover-integration.out | |
build: | |
name: Build Docker image | |
runs-on: ubuntu-latest | |
needs: [tests] | |
steps: | |
- name: Checkout GitHub Repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Docker metadata | |
id: meta | |
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5.6.1 | |
with: | |
# List of Docker images to use as base name for tags | |
images: | | |
juanjjaramillo/testbed | |
# Generate Docker tags based on the following events/attributes | |
tags: | | |
# workflow_dispatch, schedule, push branches events | |
# reflects the last commit of the active branch | |
type=edge | |
# schedule event, nightly tag | |
type=schedule | |
# push tag event | |
type=semver,pattern={{version}} | |
# push tag event | |
type=semver,pattern={{major}}.{{minor}} | |
# push tag event, disabled if major is zero | |
type=semver,pattern={{major}},enable=${{ !startsWith(github.ref, 'refs/tags/v0.') }} | |
- name: Login to Docker Hub | |
if: github.event_name != 'pull_request' && !startsWith(github.ref, 'refs/heads/renovate') | |
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 | |
- name: Build and push | |
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0 | |
with: | |
context: . | |
platforms: linux/amd64,linux/arm64 | |
file: ./Dockerfile | |
push: ${{ github.event_name != 'pull_request' && !startsWith(github.ref, 'refs/heads/renovate') }} | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} |