Files
mikrotik-operator/.gitea/workflows/ci.yml
T
feedc0de 5cbd3da40b
Validate and publish / Test image and chart (push) Successful in 2m58s
Validate and publish / Publish image and OCI chart (push) Failing after 23s
Update CI and package prefix
2026-08-28 23:22:26 +02:00

112 lines
3.9 KiB
YAML

name: Validate and publish
on:
push:
pull_request:
env:
IMAGE: registry.brunner.ninja/feedc0de/mikrotik-operator
CHART_REGISTRY: oci://registry.brunner.ninja/feedc0de/charts
HELM_VERSION: v4.2.2
jobs:
validate:
name: Test image and chart
runs-on: ubuntu-latest
steps:
- name: Check out source
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true
- name: Test and vet
run: |
go test -race ./...
go vet ./...
- name: Install Helm
run: bash hack/install-helm.sh
- name: Lint and render chart
run: |
cmp config/crd/mikrotikrouters.yaml chart/mikrotik-operator/crds/mikrotikrouters.yaml
"${RUNNER_TEMP}/helm" lint chart/mikrotik-operator
"${RUNNER_TEMP}/helm" template mikrotik-operator chart/mikrotik-operator \
--namespace mikrotik-operator-system \
--include-crds > "${RUNNER_TEMP}/rendered.yaml"
test -s "${RUNNER_TEMP}/rendered.yaml"
- name: Build container image
env:
COMMIT_SHA: ${{ gitea.sha }}
run: |
docker build \
--label "org.opencontainers.image.revision=${COMMIT_SHA}" \
--label "org.opencontainers.image.source=https://code.brunner.ninja/feedc0de/mikrotik-operator" \
--tag "${IMAGE}:ci-${COMMIT_SHA}" \
.
publish:
name: Publish image and OCI chart
if: gitea.event_name == 'push' && (gitea.ref == 'refs/heads/main' || startsWith(gitea.ref, 'refs/tags/v'))
needs: validate
runs-on: ubuntu-latest
steps:
- name: Check out source
uses: actions/checkout@v4
- name: Install Helm
run: bash hack/install-helm.sh
- name: Build and publish matched artifacts
env:
COMMIT_SHA: ${{ gitea.sha }}
GIT_REF: ${{ gitea.ref }}
QUAY_USERNAME: ${{ secrets.QUAY_USERNAME }}
QUAY_TOKEN: ${{ secrets.QUAY_TOKEN }}
run: |
set -euo pipefail
test -n "${QUAY_USERNAME}"
test -n "${QUAY_TOKEN}"
if [[ "${GIT_REF}" == refs/tags/v* ]]; then
chart_version="${GIT_REF#refs/tags/v}"
image_tag="${chart_version}"
else
chart_version="0.0.0-dev.sha${COMMIT_SHA:0:12}"
image_tag="${COMMIT_SHA}"
fi
mkdir -p "${RUNNER_TEMP}/packages"
docker build \
--label "org.opencontainers.image.version=${image_tag}" \
--label "org.opencontainers.image.revision=${COMMIT_SHA}" \
--label "org.opencontainers.image.source=https://code.brunner.ninja/feedc0de/mikrotik-operator" \
--tag "${IMAGE}:${image_tag}" \
.
"${RUNNER_TEMP}/helm" package chart/mikrotik-operator \
--destination "${RUNNER_TEMP}/packages" \
--version "${chart_version}" \
--app-version "${image_tag}"
chart_package="${RUNNER_TEMP}/packages/mikrotik-operator-${chart_version}.tgz"
test -f "${chart_package}"
"${RUNNER_TEMP}/helm" template mikrotik-operator "${chart_package}" \
--namespace mikrotik-operator-system > "${RUNNER_TEMP}/packaged-rendered.yaml"
grep --fixed-strings "image: \"${IMAGE}:${image_tag}\"" "${RUNNER_TEMP}/packaged-rendered.yaml"
printf '%s' "${QUAY_TOKEN}" | docker login registry.brunner.ninja \
--username "${QUAY_USERNAME}" --password-stdin
printf '%s' "${QUAY_TOKEN}" | "${RUNNER_TEMP}/helm" registry login registry.brunner.ninja \
--username "${QUAY_USERNAME}" --password-stdin
docker push "${IMAGE}:${image_tag}"
"${RUNNER_TEMP}/helm" push "${chart_package}" "${CHART_REGISTRY}"
echo "Published image ${IMAGE}:${image_tag}"
echo "Published chart ${CHART_REGISTRY}/mikrotik-operator:${chart_version}"