fix operator build #58
Workflow file for this run
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: Custom build | |
on: | |
workflow_dispatch: | |
inputs: | |
everest_branch: | |
required: false | |
default: main | |
description: "Everest branch with the feature to checkout" | |
everest_operator_branch: | |
required: false | |
default: main | |
description: "Everest operator branch with the feature to checkout" | |
vs_branch: | |
required: false | |
default: main | |
description: "Version Service branch with the feature to checkout" | |
helm_branch: | |
required: false | |
default: main | |
description: "Helm charts branch with the feature to checkout" | |
upstream_operator: | |
type: choice | |
description: "The upstream operator to upgrade" | |
required: false | |
options: | |
- "" | |
- percona-xtradb-cluster-operator | |
- percona-server-mongodb-operator | |
- percona-postgresql-operator | |
upstream_operator_bundle_image: | |
required: false | |
description: "Full name of the upstream bundle image to test" | |
cli_prerequisites: | |
required: false | |
description: "Prerequisites for CLI to add to the VS" | |
default: ">= 1.2.0" | |
k8s_prerequisites: | |
required: false | |
description: "Prerequisites for k8s version to add to the VS" | |
default: ">= 1.27" | |
push: | |
branches: | |
- early-adoption-test | |
permissions: | |
contents: read | |
packages: write | |
checks: write | |
pull-requests: write | |
jobs: | |
test: | |
name: Test | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
go-version: [ 1.23.x ] | |
may-fail: [ false ] | |
continue-on-error: ${{ matrix.may-fail }} | |
runs-on: ubuntu-20.04 | |
env: | |
TOOLS_PATH: "/opt/tools/bin" | |
ARTIFACTS_RETENTION_DAYS: 30 | |
VS_BRANCH: ${{ github.event.inputs.vs_branch }} | |
HELM_BRANCH: ${{ github.event.inputs.helm_branch }} | |
# !!! revert before merge to using inputs | |
#EVEREST_BRANCH: ${{ github.event.inputs.everest_branch }} | |
EVEREST_BRANCH: "EVEREST-1563-operator-early-adoption" | |
EVEREST_OPERATOR_BRANCH: ${{ github.event.inputs.everest_operator_branch }} | |
# !!! revert before merge to using inputs | |
# IMAGE: ${{ github.event.inputs.upstream_operator_bundle_image }} | |
IMAGE: "docker.io/percona/percona-xtradb-cluster-operator:1.15.1-community-bundle" | |
# !!! revert before merge to using inputs | |
# UPSTREAM_REPO: ${{ github.event.inputs.upstream-operator }} | |
UPSTREAM_REPO: "percona-xtradb-cluster-operator" | |
# !!! revert before merge to using inputs | |
CLI_PREREQUISITES: ">= 1.2.0" | |
# CLI_PREREQUISITES: ${{ github.event.inputs.cli_prerequisites }} | |
# !!! revert before merge to using inputs | |
K8S_PREREQUISITES: ">= 1.27" | |
# K8S_PREREQUISITES: ${{ github.event.inputs.k8s_prerequisites }} | |
VS_PORT: 8081 | |
ARCH: "" | |
OS: "" | |
VERSION: "" | |
VERSION_TAG: "" | |
VS_URL: "" | |
VS_TAG: "" | |
steps: | |
- name: Set environment variables | |
run: | | |
echo "ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')" >> $GITHUB_ENV | |
echo "OS=$(uname | awk '{print tolower($0)}')" >> $GITHUB_ENV | |
echo "VS_URL=http://localhost:$VS_PORT" >> $GITHUB_ENV | |
# !!! revert before merge | |
# TIMESTAMP=$(date +'%Y%m%d%H%M%S') | |
TIMESTAMP="20241125120500" | |
V="1.10000.0-rc$TIMESTAMP" | |
echo "VERSION=$V" >> $GITHUB_ENV | |
echo "VERSION_TAG=v$V" >> $GITHUB_ENV | |
echo "VS_TAG=everest-test$TIMESTAMP" >> $GITHUB_ENV | |
- name: Set up Go release | |
uses: percona-platform/setup-go@v4 | |
with: | |
go-version: ${{ matrix.go-version }} | |
- name: Set GO_VERSION environment variable | |
run: | | |
go version | |
echo "GO_VERSION=$(go version)" >> $GITHUB_ENV | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Operator - check out | |
uses: actions/checkout@v4 | |
with: | |
repository: percona/everest-operator | |
ref: ${{ env.EVEREST_OPERATOR_BRANCH }} | |
path: everest-operator | |
token: ${{ secrets.ROBOT_TOKEN }} | |
- name: Operator - install operator-sdk | |
run: | | |
mkdir -p $TOOLS_PATH | |
echo $TOOLS_PATH >> $GITHUB_PATH | |
export OPERATOR_SDK_DL_URL=https://github.com/operator-framework/operator-sdk/releases/download/v1.38.0 | |
curl -LO ${OPERATOR_SDK_DL_URL}/operator-sdk_${OS}_${ARCH} | |
gpg --keyserver keyserver.ubuntu.com --recv-keys 052996E2A20B5C7E | |
curl -LO ${OPERATOR_SDK_DL_URL}/checksums.txt | |
curl -LO ${OPERATOR_SDK_DL_URL}/checksums.txt.asc | |
gpg -u "Operator SDK (release) <[email protected]>" --verify checksums.txt.asc | |
grep operator-sdk_${OS}_${ARCH} checksums.txt | sha256sum -c - | |
chmod +x operator-sdk_${OS}_${ARCH} | |
mv operator-sdk_${OS}_${ARCH} $TOOLS_PATH/operator-sdk | |
- name: Operator - build and bundle | |
run: | | |
cd everest-operator | |
git checkout -b $VERSION_TAG | |
VERSION=$VERSION make build manifests bundle | |
# configure userdata for commits | |
git config --global user.email "[email protected]" | |
git config --global user.name "Everest RC CI triggered by ${{ github.actor }}" | |
# commit and push the updated files | |
git commit -a -m "operator manifests" | |
# to build crds in helm, the remote ref with the version name should exist | |
git push origin $VERSION_TAG | |
- name: Helm - checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: percona/percona-helm-charts | |
ref: ${{ env.HELM_BRANCH }} | |
path: percona-helm-charts | |
token: ${{ secrets.ROBOT_TOKEN }} | |
- name: Helm - build | |
run: | | |
cd percona-helm-charts/charts/everest | |
CRD_VERSION=${{ env.VERSION_TAG }} make crds-gen | |
make release-dev | |
- name: Helm - Create tar.gz archive | |
run: | | |
tar -czvf helm.tar.gz percona-helm-charts/charts/everest | |
- name: Helm - Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: helm | |
path: helm.tar.gz | |
- name: Operator - check out again | |
uses: actions/checkout@v4 | |
with: | |
repository: percona/everest-operator | |
ref: ${{ env.EVEREST_OPERATOR_BRANCH }} | |
path: everest-operator | |
token: ${{ secrets.ROBOT_TOKEN }} | |
- name: Operator - delete the feature build branch | |
run: | | |
cd everest-operator | |
git push -d origin $VERSION_TAG | |
- name: Operator - setup Docker meta for everest-operator | |
id: operator_meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
perconalab/everest-operator | |
tags: | | |
type=raw,value=${{ env.VERSION }} | |
- name: Operator - setup Docker meta for everest-operator-bundle | |
id: bundle_meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
perconalab/everest-operator-bundle | |
tags: | | |
type=raw,value=${{ env.VERSION }} | |
- name: Operator - push everest-operator image | |
uses: docker/build-push-action@v6 | |
with: | |
context: everest-operator | |
push: true | |
tags: ${{ steps.operator_meta.outputs.tags }} | |
- name: Operator - push everest-operator-bundle image | |
uses: docker/build-push-action@v6 | |
with: | |
context: everest-operator | |
push: true | |
tags: ${{ steps.bundle_meta.outputs.tags }} | |
file: everest-operator/bundle.Dockerfile | |
- name: VS - checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: Percona-Lab/percona-version-service | |
ref: ${{ env.VS_BRANCH }} | |
path: percona-version-service | |
token: ${{ secrets.ROBOT_TOKEN }} | |
- name: VS - update | |
run: | | |
cd percona-version-service | |
make init | |
# create an entry for the new Everest version | |
printf "version: $VERSION\nsupported:\n cli: '$CLI_PREREQUISITES'\n kubernetes: '$K8S_PREREQUISITES'" > "sources/metadata/everest/$VERSION.yaml" | |
- name: Build and Push VS dev image | |
uses: docker/build-push-action@v6 | |
with: | |
context: percona-version-service | |
push: true | |
tags: perconalab/version-service:${{ env.VS_TAG }} | |
- name: Catalog - checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: percona/everest-catalog | |
path: everest-catalog | |
token: ${{ secrets.ROBOT_TOKEN }} | |
- name: Catalog - update veneer file | |
run: | | |
cd everest-catalog/tools | |
go run . \ | |
--veneer-file ../veneer/everest-operator.yaml \ | |
--channel fast-v0 \ | |
--new-version ${{ env.VERSION }} \ | |
cd .. | |
curl -Lo /tmp/opm https://github.com/operator-framework/operator-registry/releases/download/v1.48.0/${OS}-${ARCH}-opm | |
chmod +x /tmp/opm | |
/tmp/opm alpha render-template basic --skip-tls -o yaml < veneer/everest-operator.yaml > catalog/everest-operator/catalog.yaml | |
# Check if catalog has the new version listed | |
if ! grep -q "$VERSION$" catalog/everest-operator/catalog.yaml; then | |
echo "catalog/everest-operator/catalog.yaml does not include the version $VERSION" | |
exit 1 | |
fi | |
# If the feature build contains upstream upgrades | |
if [ -n "$UPSTREAM_REPO" ]; then | |
# Add a new record to the upstream veneer | |
yq e ".Stable.Bundles += {\"Image\": \"$IMAGE\"}" veneer/${UPSTREAM_REPO}.yaml > temp.yaml && mv temp.yaml veneer/${UPSTREAM_REPO}.yaml | |
# Generate upstream catalog | |
/tmp/opm alpha render-template semver --skip-tls -o yaml < veneer/${UPSTREAM_REPO}.yaml > catalog/${UPSTREAM_REPO}/catalog.yaml | |
# Check if upstream catalog has the new image listed | |
if ! grep -q "$IMAGE$" catalog/${UPSTREAM_REPO}/catalog.yaml; then | |
echo "catalog/${UPSTREAM_REPO}/catalog.yaml does not include the version $IMAGE" | |
exit 1 | |
fi | |
fi | |
git diff | |
- name: Catalog - setup Docker meta for everest-catalog | |
id: catalog_meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
perconalab/everest-catalog | |
tags: | | |
type=raw,value=${{ env.VERSION }} | |
- name: Catalog - push everest-catalog image | |
uses: docker/build-push-action@v6 | |
with: | |
context: everest-catalog | |
push: true | |
tags: ${{ steps.catalog_meta.outputs.tags }} | |
file: everest-catalog/everest-catalog.Dockerfile | |
- name: Everest - check out | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.ROBOT_TOKEN }} | |
ref: ${{ env.EVEREST_BRANCH }} | |
- name: Everest - setup golang | |
uses: actions/setup-go@v5 | |
with: | |
go-version-file: "./go.mod" | |
- name: Everest UI - setup pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 9.4.0 | |
- name: Everest UI - run with Node 20 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: "pnpm" | |
cache-dependency-path: ui/pnpm-lock.yaml | |
- name: Everest UI - build | |
run: | | |
cd ui | |
pnpm install | |
EVEREST_OUT_DIR=${GITHUB_WORKSPACE}/public/dist/ pnpm build | |
- name: Everest - build binary | |
run: | | |
RELEASE_VERSION=${VERSION} CGO_ENABLED=0 GOOS=linux GOARCH=amd64 make rc | |
RELEASE_VERSION=${VERSION} make release-cli | |
- name: Upload CLI artefacts | |
uses: actions/upload-artifact@v4 | |
id: cli-upload-step-1 | |
with: | |
name: everestctl.exe | |
path: ./dist/everestctl.exe | |
retention-days: ${{ env.ARTIFACTS_RETENTION_DAYS }} | |
- name: Upload CLI artefacts | |
uses: actions/upload-artifact@v4 | |
id: cli-upload-step-2 | |
with: | |
name: everestctl-darwin-amd64 | |
path: ./dist/everestctl-darwin-amd64 | |
retention-days: ${{ env.ARTIFACTS_RETENTION_DAYS }} | |
- name: Upload CLI artefacts | |
uses: actions/upload-artifact@v4 | |
id: cli-upload-step-3 | |
with: | |
name: everestctl-darwin-arm64 | |
path: ./dist/everestctl-darwin-arm64 | |
retention-days: ${{ env.ARTIFACTS_RETENTION_DAYS }} | |
- name: Upload CLI artefacts | |
uses: actions/upload-artifact@v4 | |
id: cli-upload-step-4 | |
with: | |
name: everestctl-linux-amd64 | |
path: ./dist/everestctl-linux-amd64 | |
retention-days: ${{ env.ARTIFACTS_RETENTION_DAYS }} | |
- name: Upload CLI artefacts | |
uses: actions/upload-artifact@v4 | |
id: cli-upload-step-5 | |
with: | |
name: everestctl-linux-arm64 | |
path: ./dist/everestctl-linux-arm64 | |
retention-days: ${{ env.ARTIFACTS_RETENTION_DAYS }} | |
- name: Everest - push Everest image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
tags: perconalab/everest:${{ env.VERSION }} | |
- name: Info | |
run: | | |
echo "$VS_TAG" > vs_tag.txt | |
- name: Upload version info artefact | |
uses: actions/upload-artifact@v4 | |
id: vs_file | |
with: | |
name: vs_tag.txt | |
path: ./vs_tag.txt | |
- name: Info | |
run: | | |
echo "::notice title=Feature Build $VERSION is created" | |