debian-forge-composer/.github/workflows/tests.yml
Ondřej Budai 8c4689f082 workflows: mark the working directory safe for git
Github actions have a peculiar behaviour: The "job root" directory is owned
by user with ID 1001 whereas many containers (like the Fedora one) run as root
by default. This causes git to freak out because repositories owned by
different users aren't considered safe anymore and must be explicitly allow-
listed.

This becomes a problem when we switch to Go 1.18 because it stamps build with
Git information which fails because the repository technically isn't safe.

Let's fix this by marking the repository as a safe one.

Note that the actions/checkout action has a set-safe-directory feature, but
this one is not permanent. After the action is done, the setting is removed.
See https://github.com/actions/checkout/pull/762

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2023-01-06 11:34:50 +01:00

230 lines
6.7 KiB
YAML

name: Tests
# NOTE(mhayden): Restricting branches prevents jobs from being doubled since
# a push to a pull request triggers two events.
on:
pull_request:
branches:
- "*"
push:
branches:
- main
jobs:
unit-tests:
name: "🛃 Unit tests"
runs-on: ubuntu-20.04
container:
image: registry.fedoraproject.org/fedora:35
steps:
# krb5-devel is needed to test internal/upload/koji package
# gcc is needed to build the mock dnf-json binary for the unit tests
# gpgme-devel is needed for container upload dependencies
- name: Install build and test dependencies
run: dnf -y install krb5-devel gcc git-core go gpgme-devel
- name: Check out code into the Go module directory
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Mark the working directory as safe for git
run: git config --global --add safe.directory "$(pwd)"
- name: Run unit tests
run: go test -race -covermode=atomic -coverprofile=coverage.txt -coverpkg=$(go list ./... | grep -v rpmmd/test$ | tr "\n" ",") ./...
- name: Run dnfjson tests with force-dnf to make sure it's not skipped for any reason
run: go test -race ./internal/dnfjson/... -force-dnf
- name: Send coverage to codecov.io
run: bash <(curl -s https://codecov.io/bash)
db-tests:
name: "🗄 DB tests"
runs-on: ubuntu-20.04
services:
postgres:
# 12 is used in deployments
image: postgres:12
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: foobar
POSTGRES_DB: osbuildcomposer
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
# gpgme-devel is needed for container upload dependencies
- name: Install test dependencies
run: sudo apt-get install -y libgpgme-dev
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: 1.16
- env:
PGUSER: postgres
PGPASSWORD: foobar
PGDATABASE: osbuildcomposer
PGHOST: localhost
PGPORT: 5432
run: |
WORKDIR=$(readlink -f pkg/jobqueue/dbjobqueue/schemas)
pushd $(mktemp -d)
go mod init temp
go install github.com/jackc/tern@latest
$(go env GOPATH)/bin/tern migrate -m "$WORKDIR"
popd
- run: go test -tags=integration ./cmd/osbuild-composer-dbjobqueue-tests
- run: go test -tags=integration ./cmd/osbuild-service-maintenance
python-lint:
name: "🐍 Lint (dnf-json)"
runs-on: ubuntu-latest
container:
image: registry.fedoraproject.org/fedora:35
steps:
- name: Install build and test dependencies
run: dnf -y install python3-pylint git-core python3-requests
- name: Check out code into the Go module directory
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Analysing the code with pylint
run: |
python3 -m pylint dnf-json tools/koji-compose.py
lint:
name: "⌨ Lint"
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.16
uses: actions/setup-go@v3
with:
go-version: 1.16
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
# This is needed to lint internal/upload/koji package
- name: Install kerberos devel package
run: sudo apt-get install -y libkrb5-dev
# This is needed for the container upload dependencies
- name: Install libgpgme devel package
run: sudo apt-get install -y libgpgme-dev
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v3
with:
version: latest
args: --verbose --timeout 5m0s
prepare:
name: "🔍 Check source preparation"
runs-on: ubuntu-20.04
steps:
- name: Set up Go 1.16
uses: actions/setup-go@v3
with:
go-version: 1.16
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Check that source has been prepared
run: |
./tools/prepare-source.sh
if [ -n "$(git status --porcelain)" ]; then
echo
echo "Please include these changes in your branch: "
git status -vv
exit "1"
else
exit "0"
fi
shellcheck:
name: "🐚 Shellcheck"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@1.1.0
with:
ignore: vendor # We don't want to fix the code in vendored dependencies
env:
# don't check /etc/os-release sourcing, allow useless cats to live inside our codebase, and
# allow seemingly unreachable commands
SHELLCHECK_OPTS: -e SC1091 -e SC2002 -e SC2317
rpmlint:
name: "📦 RPMlint"
runs-on: ubuntu-20.04
container: registry.fedoraproject.org/fedora:35
steps:
- name: Install dependencies
run: sudo dnf install -y rpmlint rpm-build make git-core
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Create SRPM
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
make srpm
- name: Run rpmlint
run: rpmlint rpmbuild/SRPMS/*
gitlab-ci-helper:
name: "Gitlab CI trigger helper"
runs-on: ubuntu-latest
env:
SKIP_CI: ${{ (github.event.pull_request.draft == true || contains(github.event.pull_request.labels.*.name, 'WIP')) && !contains(github.event.pull_request.labels.*.name, 'WIP+test') }}
steps:
- name: Write PR status
run: echo "$SKIP_CI" > SKIP_CI.txt
- name: Upload status
uses: actions/upload-artifact@v3
with:
name: PR_STATUS
path: SKIP_CI.txt
kube-linter:
name: "🎀 kube-linter"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: redhat-actions/oc-installer@v1
- name: Process template
run: |
mkdir processed-templates
oc process -f templates/composer.yml \
-p IMAGE_TAG=image_tag \
--local \
-o yaml > processed-templates/composer.yml
- uses: stackrox/kube-linter-action@v1.0.4
with:
directory: processed-templates
config: templates/.kube-linter-config.yml
version: 0.3.0