vrg: requeue if pvc is still in use #146
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
# SPDX-FileCopyrightText: The RamenDR authors | |
# SPDX-License-Identifier: Apache-2.0 | |
--- | |
# yamllint disable rule:line-length | |
name: PR and branch sanity | |
# This workflow will run when developer push a topic branch to their | |
# fork in github, minimizing noise for maintainers. | |
on: # yamllint disable-line rule:truthy | |
- push | |
- pull_request | |
env: | |
GO_VERSION: "1.18" | |
IMAGE_TAG_BASE: "quay.io/ramendr/ramen" | |
IMAGE_REGISTRY: "quay.io" | |
IMAGE_REPOSITORY: "ramendr" | |
IMAGE_NAME: "ramen" | |
IMAGE_TAG: "sanity" | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
lint: | |
name: Linters | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout source | |
uses: actions/checkout@v2 | |
- name: Install prereqs | |
run: | | |
echo 'APT::Acquire::Retries "5";' | sudo tee /etc/apt/apt.conf.d/80-retries | |
sudo apt-get update | |
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pip ruby | |
sudo gem install mdl | |
sudo pip3 install yamllint | |
- name: Run linters | |
run: ./hack/pre-commit.sh | |
golangci: | |
name: Golangci Lint | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout source | |
uses: actions/checkout@v2 | |
- name: Setup go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: GolangCI Lint | |
uses: golangci/golangci-lint-action@v3 | |
with: | |
version: v1.49.0 | |
build-image-and-ensure-clean-branch: | |
name: Build image and ensure clean branch | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout source | |
uses: actions/checkout@v2 | |
- name: Setup go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Build image | |
run: make docker-build | |
- name: Run unit tests | |
run: GO_TEST_GINKGO_ARGS="" make test | |
- name: Export image | |
run: docker save -o /tmp/ramen-operator.tar ${IMAGE_TAG_BASE}-operator:${IMAGE_TAG} | |
- name: Save image artifact | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ramen-operator | |
path: /tmp/ramen-operator.tar | |
retention-days: 1 | |
- name: Go tidy | |
run: go mod tidy | |
- name: Git branch sanity | |
run: | | |
echo "Failing if any auto generated files are updated, checking 'git status'" | |
git --no-pager diff | |
git status --porcelain 2>&1 | tee /dev/stderr | (! read) | |
deploy-check: | |
name: Check artifacts and operator deployment | |
needs: [build-image-and-ensure-clean-branch] | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
kubernetes_version: ["1.20.7"] | |
include: | |
- kubernetes_version: "1.20.7" | |
kind_image: "1.20.7@sha256:cbeaf907fc78ac97ce7b625e4bf0de16e3ea725daf6b04f930bd14c67c671ff9" | |
kind_version: "v0.11.1" | |
env: | |
KUBERNETES_VERSION: ${{ matrix.kubernetes_version }} | |
KIND_VERSION: ${{ matrix.kind_version }} | |
KIND_IMAGE: ${{ matrix.kind_image }} | |
KIND_CLUSTER_NAME: "sanity" | |
steps: | |
- name: Checkout source | |
uses: actions/checkout@v2 | |
- name: Setup go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install kubectl | |
run: | | |
curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBERNETES_VERSION}/bin/linux/amd64/kubectl" | |
sudo install ./kubectl /usr/local/bin/ | |
- name: Create Kind kubernetes cluster | |
run: ./hack/setup-kind-cluster.sh | |
- name: Download image artifact | |
uses: actions/download-artifact@v1 | |
with: | |
name: ramen-operator | |
path: /tmp | |
- name: Load image artifact | |
run: | | |
docker load -i /tmp/ramen-operator.tar | |
kind load docker-image ${IMAGE_TAG_BASE}-operator:${IMAGE_TAG} --name ${KIND_CLUSTER_NAME} | |
- name: Install cert-manager | |
run: | | |
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml | |
kubectl -n cert-manager wait --for=condition=Available --timeout=60s deploy/cert-manager | |
kubectl -n cert-manager wait --for=condition=Available --timeout=60s deploy/cert-manager-cainjector | |
kubectl -n cert-manager wait --for=condition=Available --timeout=60s deploy/cert-manager-webhook | |
- name: Deploy dependent CRDs | |
run: | | |
kubectl apply -f hack/test/ | |
- name: Deploy operator | |
run: | | |
make deploy | |
kubectl get deployment -n ramen-system | |
kubectl -n ramen-system wait --for=condition=Available --timeout=60s deploy/ramen-hub-operator | |
kubectl -n ramen-system wait --for=condition=Available --timeout=60s deploy/ramen-dr-cluster-operator | |
- name: Display failure logs | |
if: ${{ failure() }} | |
run: | | |
echo "===> BEGIN failure details <===" | |
echo "===> NODE details <===" | |
kubectl get node -o yaml | |
echo "===> Ramen POD details <===" | |
kubectl get pods -n ramen-system -o yaml | |
echo "===> Ramen POD describe <===" | |
kubectl describe pods -n ramen-system | |
echo "===> Ramen DR Orchestrator POD logs <===" | |
kubectl logs -n ramen-system deployment/ramen-hub-operator -c manager | |
echo "===> Ramen DR Manager POD logs <===" | |
kubectl logs -n ramen-system deployment/ramen-dr-cluster-operator -c manager | |
echo "===> END failure details <===" | |
publish-image: | |
name: Publish built image | |
needs: [deploy-check, lint, golangci] | |
if: > | |
(github.event_name == 'push') && | |
(github.ref == 'refs/heads/main' || | |
startsWith(github.ref, 'refs/heads/release-') || | |
startsWith(github.ref, 'refs/tags/v')) && | |
(github.repository == 'ramendr/ramen') | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Download image artifact | |
uses: actions/download-artifact@v1 | |
with: | |
name: ramen-operator | |
path: /tmp | |
- name: Load image artifact | |
run: | | |
docker load -i /tmp/ramen-operator.tar | |
- name: Login to Quay | |
uses: docker/login-action@v1 | |
with: | |
registry: quay.io | |
username: ${{ secrets.QUAY_USERNAME }} | |
password: ${{ secrets.QUAY_ROBOT_TOKEN }} | |
- name: Determine image tag | |
run: | | |
[[ "${{ github.ref }}" =~ ^refs\/(heads|tags)\/(release-)?(.*) ]] | |
echo "heads or tags? ${BASH_REMATCH[1]}" | |
echo "release? ${BASH_REMATCH[2]}" | |
echo "version? ${BASH_REMATCH[3]}" | |
TAG="" | |
if test "${BASH_REMATCH[1]}" = "heads"; then | |
if test "${BASH_REMATCH[2]}" = "" && test "${BASH_REMATCH[3]}" = "main"; then | |
TAG="canary" | |
elif test "${BASH_REMATCH[2]}" = "release-"; then | |
TAG="${BASH_REMATCH[3]}-canary" | |
fi | |
elif test "${BASH_REMATCH[1]}" == "tags" && test "${BASH_REMATCH[2]}" = ""; then | |
TAG="${BASH_REMATCH[3]}" | |
fi | |
test "${TAG}" = "" && exit 1 | |
echo "Publish image tag ${TAG}" | |
echo "publish_image_tag=${TAG}" >> $GITHUB_ENV | |
- name: Push operator image to Quay | |
run: | | |
docker tag "${IMAGE_TAG_BASE}-operator:${IMAGE_TAG}" "${IMAGE_TAG_BASE}-operator:${{ env.publish_image_tag }}" | |
docker push "${IMAGE_TAG_BASE}-operator:${{ env.publish_image_tag }}" | |
# TODO: We do not need to build bundles and catalogs each time, fix once we reach alpha | |
- name: Checkout source | |
uses: actions/checkout@v2 | |
- name: Setup go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Build and push bundle images to Quay | |
run: | | |
IMAGE_TAG="${{ env.publish_image_tag }}" make bundle-build bundle-push | |
- name: Build and push catalog image to Quay | |
run: | | |
IMAGE_TAG="${{ env.publish_image_tag }}" make catalog-build catalog-push | |
# TODO: Test built bundles and catalog based install |