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.
184 lines
5.4 KiB
YAML
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
|