Skip to content

Continuous Integration #2619

Continuous Integration

Continuous Integration #2619

Workflow file for this run

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 }}