debian-forge-composer/.github/workflows/tests.yml
Christian Kellner 986f076276 container: add support for uploading to registries
Add a new generic container registry client via a new `container`
package. Use this to create a command line utility as well as a
new upload target for container registries.

The code uses the github.com/containers/* project and packages to
interact with container registires that is also used by skopeo,
podman et al. One if the dependencies is `proglottis/gpgme` that
is using cgo to bind libgpgme, so we have to add the corresponding
devel package to the BuildRequires as well as installing it on CI.

Checks will follow later via an integration test.
2022-06-29 10:02:46 +02:00

184 lines
5.4 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: 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)
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
- 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
lint:
name: "⌨ Lint"
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: Install golangci-lint
run: curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(go env GOPATH)/bin v1.30.0
# 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
run: $(go env GOPATH)/bin/golangci-lint run --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:
SHELLCHECK_OPTS: -e SC1091 -e SC2002 # don't check /etc/os-release sourcing and allow useless cats to live inside our codebase
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@v2
- 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