Merge pull request #122 from auditumio/dependabot/github_actions/dock… #345
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: main | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- 'v*' | |
pull_request: | |
branches: | |
- '*' | |
jobs: | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: postgres:14-alpine | |
env: | |
POSTGRES_DB: auditum_db | |
POSTGRES_USER: user | |
POSTGRES_PASSWORD: pass | |
options: >- | |
--health-cmd "pg_isready -U user" | |
--health-interval 1s | |
--health-timeout 10s | |
--health-retries 10 | |
ports: | |
- 5432:5432 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 | |
- name: Setup Go | |
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 | |
with: | |
go-version-file: 'go.mod' | |
- name: Download dependencies | |
run: | | |
go mod download | |
- name: Run unit tests | |
run: | | |
go test -v -race -coverprofile=coverage.txt -covermode=atomic $(go list ./...) | |
- name: Run linter | |
uses: golangci/golangci-lint-action@3cfe3a4abbb849e10058ce4af15d205b6da42804 # v4.0.0 | |
with: | |
version: v1.55.2 | |
args: --verbose | |
# See: https://github.com/golangci/golangci-lint-action/issues/244 | |
skip-pkg-cache: true | |
skip-build-cache: true | |
- name: Build | |
run: | | |
go build -v -o ./bin/auditum ./cmd/auditum | |
- name: Run integration tests | |
env: | |
POSTGRES_HOST: 127.0.0.1 | |
POSTGRES_PORT: 5432 | |
POSTGRES_DBNAME: auditum_db | |
POSTGRES_USER: user | |
POSTGRES_PASSWORD: pass | |
POSTGRES_SSL_MODE: disable | |
run: | | |
go test \ | |
-tags "integration postgres" \ | |
-v \ | |
-p 1 \ | |
-count 1 \ | |
./internal/sql/... \ | |
-run "TestIntegration" | |
go test \ | |
-tags "integration sqlite" \ | |
-v \ | |
-p 1 \ | |
-count 1 \ | |
./internal/sql/... \ | |
-run "TestIntegration" | |
docker: | |
name: Docker | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
permissions: | |
contents: read | |
packages: write | |
env: | |
IMAGE_REGISTRY_GITHUB: ghcr.io | |
IMAGE_NAME_GITHUB: ${{ github.repository }} | |
IMAGE_NAME_DOCKERHUB_AUDITUMIO: auditumio/auditum | |
# For PR, we only build for AMD64, just to be sure that Docker build works. | |
# For main branch and tags we also build for ARM64. | |
# Note that building for ARM64 is very slow. | |
IMAGE_PLATFORMS: | | |
linux/amd64 | |
${{ github.event_name != 'pull_request' && 'linux/arm64' || '' }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 | |
- name: Setup Go | |
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 | |
with: | |
go-version-file: 'go.mod' | |
- name: Download dependencies | |
run: | | |
go mod download | |
go mod vendor | |
- name: Extract Docker image metadata | |
id: docker_meta | |
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 | |
with: | |
images: | | |
${{ env.IMAGE_NAME_DOCKERHUB_AUDITUMIO }} | |
${{ env.IMAGE_REGISTRY_GITHUB }}/${{ env.IMAGE_NAME_GITHUB }} | |
tags: | | |
type=ref,event=pr | |
type=ref,event=branch,enable={{ is_default_branch }} | |
type=semver,pattern={{ version }} | |
- name: Login to Docker Hub for auditumio | |
uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v3.1.0 | |
with: | |
username: auditumio | |
password: ${{ secrets.DOCKERHUB_AUDITUMIO_TOKEN }} | |
if: github.event_name != 'pull_request' | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v3.1.0 | |
with: | |
registry: ${{ env.IMAGE_REGISTRY_GITHUB }} | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
if: github.event_name != 'pull_request' | |
# Used for arm images. | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 | |
with: | |
platforms: ${{ env.IMAGE_PLATFORMS }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0 | |
- name: Build and push Docker image | |
uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 | |
with: | |
context: . | |
platforms: ${{ env.IMAGE_PLATFORMS }} | |
tags: ${{ steps.docker_meta.outputs.tags }} | |
labels: ${{ steps.docker_meta.outputs.labels }} | |
push: ${{ github.event_name != 'pull_request' }} | |
goreleaser: | |
name: GoReleaser | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
permissions: | |
contents: write | |
if: startsWith(github.ref, 'refs/tags/') | |
steps: | |
- name: Checkout | |
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 | |
with: | |
fetch-depth: 0 | |
- name: Setup Go | |
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 | |
with: | |
go-version-file: 'go.mod' | |
- name: Download dependencies | |
run: | | |
go mod download | |
- name: Run GoReleaser | |
uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0 | |
with: | |
version: latest | |
args: release --clean | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GORELEASER_PREVIOUS_TAG: "" |