From e3ec193c945c8d2de85c115f6169372ef1e7835d Mon Sep 17 00:00:00 2001 From: David Zager Date: Tue, 15 Aug 2023 10:39:47 -0400 Subject: [PATCH] :seedling: gate PRs to main (#256) Update the install-tackle script to handle installing the konveyor operator using OLM via provided bundle image. With this, we should be able to test...at a minimum ... that our operator installs as part of PR checks. Fixes #130 Signed-off-by: David Zager --- .github/actions/install-tackle/action.yml | 45 ++++--- .github/workflows/pr-checks.yml | 39 ++++++ .github/workflows/verifyPR.yml | 18 --- Makefile | 4 +- hack/install-tackle.sh | 140 ++++++++++------------ 5 files changed, 124 insertions(+), 122 deletions(-) create mode 100644 .github/workflows/pr-checks.yml delete mode 100644 .github/workflows/verifyPR.yml diff --git a/.github/actions/install-tackle/action.yml b/.github/actions/install-tackle/action.yml index 6469ddbdc7d..f750ba884cd 100644 --- a/.github/actions/install-tackle/action.yml +++ b/.github/actions/install-tackle/action.yml @@ -2,47 +2,42 @@ name: Install tackle operator description: | Install Tackle Operator. inputs: - tackle-operator-index-image: - description: "image url for operator index" + operator-bundle-image: + description: "image url for operator bundle container image" required: false - default: "quay.io/konveyor/tackle2-operator-index:latest" - tackle-hub-image: + default: "quay.io/konveyor/tackle2-operator-bundle:latest" + hub-image: description: "image url for tackle-hub" required: false default: "quay.io/konveyor/tackle2-hub:latest" - tackle-pathfinder-image: + pathfinder-image: description: "image url for pathfinder image" required: false default: "quay.io/konveyor/tackle-pathfinder:1.3.0-native" - tackle-ui-image: + ui-image: description: "image url for tackle-ui" required: false default: "quay.io/konveyor/tackle2-ui:latest" - tackle-addon-admin-image: + addon-admin-image: description: "image urd for admin addon" required: false default: "quay.io/konveyor/tackle2-addon:latest" - tackle-addon-analyzer-image: + addon-analyzer-image: description: "image url for analyzer addon" required: false default: "quay.io/konveyor/tackle2-addon-analyzer:latest" - tackle-image-pull-policy: + image-pull-policy: description: "Image Pull Policy" required: false default: "Always" - tackle-analyzer-container-cpu: + analyzer-container-cpu: description: "The CPU request value for the analyzer task containers" required: false default: 0 - tackle-analyzer-container-memory: + analyzer-container-memory: description: "The memory request value for the analyzer task containers" required: false default: 0 - # TODO(djzager): uncomment when supported - # tackle-operator-container-image: - # description: "image url for operator container" - # required: false - # default: "quay.io/konveyor/tackle2-operator:latest" runs: using: "composite" steps: @@ -50,15 +45,15 @@ runs: # or maybe just installing manager via kustomize. - name: Install tackle run: | - export TACKLE_OPERATOR_INDEX_IMAGE="${{ inputs.tackle-operator-index-image }}" - export TACKLE_HUB_IMAGE="${{ inputs.tackle-hub-image }}" - export TACKLE_PATHFINDER_IMAGE="${{ inputs.tackle-pathfinder-image }}" - export TACKLE_UI_IMAGE="${{ inputs.tackle-ui-image }}" - export TACKLE_ADDON_ADMIN_IMAGE="${{ inputs.tackle-addon-admin-image }}" - export TACKLE_ADDON_ANALYZER_IMAGE="${{ inputs.tackle-addon-analyzer-image }}" - export TACKLE_IMAGE_PULL_POLICY="${{ inputs.tackle-image-pull-policy }}" - export TACKLE_ANALYZER_CONTAINER_REQUESTS_MEMORY="${{ inputs.tackle-analyzer-container-memory }}" - export TACKLE_ANALYZER_CONTAINER_REQUESTS_CPU="${{ inputs.tackle-analyzer-container-cpu }}" + export OPERATOR_BUNDLE_IMAGE="${{ inputs.operator-bundle-image }}" + export HUB_IMAGE="${{ inputs.hub-image }}" + export PATHFINDER_IMAGE="${{ inputs.pathfinder-image }}" + export UI_IMAGE="${{ inputs.ui-image }}" + export ADDON_ADMIN_IMAGE="${{ inputs.addon-admin-image }}" + export ADDON_ANALYZER_IMAGE="${{ inputs.addon-analyzer-image }}" + export IMAGE_PULL_POLICY="${{ inputs.image-pull-policy }}" + export ANALYZER_CONTAINER_REQUESTS_MEMORY="${{ inputs.analyzer-container-memory }}" + export ANALYZER_CONTAINER_REQUESTS_CPU="${{ inputs.analyzer-container-cpu }}" make install-tackle working-directory: ${{ github.action_path }}/../../.. shell: bash diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml new file mode 100644 index 00000000000..9b8c2babee1 --- /dev/null +++ b/.github/workflows/pr-checks.yml @@ -0,0 +1,39 @@ +name: PR Checks + +on: + pull_request: + branches: + - main + - 'release-*.*' + +env: + IMG: ttl.sh/konveyor-operator-${{ github.sha }}:1h + BUNDLE_IMG: ttl.sh/konveyor-operator-bundle-${{ github.sha }}:1h + +jobs: + check-title: + runs-on: ubuntu-latest + steps: + - uses: konveyor/release-tools/cmd/verify-pr@main + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + + build-operator: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: make docker-build docker-push + + build-bundle: + needs: build-operator + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: make bundle bundle-build bundle-push + + operator-install: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: make start-minikube + - run: OPERATOR_BUNDLE_IMAGE="${BUNDLE_IMG}" make install-tackle diff --git a/.github/workflows/verifyPR.yml b/.github/workflows/verifyPR.yml deleted file mode 100644 index 9771323e445..00000000000 --- a/.github/workflows/verifyPR.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: PR Checks - -on: - pull_request_target: - types: [opened, edited, reopened, synchronize] - -jobs: - verify: - runs-on: ubuntu-latest - name: Verify PR contents - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Check Title - id: verifier - uses: konveyor/release-tools/cmd/verify-pr@main - with: - github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/Makefile b/Makefile index ef96e8e39c4..23acddd5de6 100644 --- a/Makefile +++ b/Makefile @@ -271,8 +271,8 @@ catalog-push: ## Push a catalog image. .PHONY: start-minikube start-minikube: - export PATH=$(shell pwd)/bin:$$PATH; $(shell pwd)/hack/start-minikube.sh + $(shell pwd)/hack/start-minikube.sh .PHONY: install-tackle install-tackle: - export PATH=$(shell pwd)/bin:$$PATH; $(shell pwd)/hack/install-tackle.sh + $(shell pwd)/hack/install-tackle.sh diff --git a/hack/install-tackle.sh b/hack/install-tackle.sh index 902c8943285..fe8d5af218d 100755 --- a/hack/install-tackle.sh +++ b/hack/install-tackle.sh @@ -3,79 +3,65 @@ set -e set -x -TACKLE_OPERATOR_INDEX_IMAGE="${TACKLE_OPERATOR_INDEX_IMAGE:-quay.io/konveyor/tackle2-operator-index:latest}" -TACKLE_HUB_IMAGE="${TACKLE_HUB_IMAGE:-quay.io/konveyor/tackle2-hub:latest}" -TACKLE_PATHFINDER_IMAGE="${TACKLE_PATHFINDER_IMAGE:-quay.io/konveyor/tackle-pathfinder:1.3.0-native}" -TACKLE_UI_IMAGE="${TACKLE_UI_IMAGE:-quay.io/konveyor/tackle2-ui:latest}" -TACKLE_UI_INGRESS_CLASS_NAME="${TACKLE_UI_INGRESS_CLASS_NAME:-nginx}" -TACKLE_ADDON_ADMIN_IMAGE="${TACKLE_ADDON_ADMIN_IMAGE:-quay.io/konveyor/tackle2-addon:latest}" -TACKLE_ADDON_ANALYZER_IMAGE="${TACKLE_ADDON_ANALYZER_IMAGE:-quay.io/konveyor/tackle2-addon-analyzer:latest}" -TACKLE_IMAGE_PULL_POLICY="${TACKLE_IMAGE_PULL_POLICY:-Always}" -TACKLE_ANALYZER_CONTAINER_REQUESTS_MEMORY="${TACKLE_ANALYZER_CONTAINER_REQUESTS_MEMORY:-0}" -TACKLE_ANALYZER_CONTAINER_REQUESTS_CPU="${TACKLE_ANALYZER_CONTAINER_REQUESTS_CPU:-0}" +# Figure out where we are being run from. +# This relies on script being run from: +# - ${PROJECT_ROOT}/hack/install-tackle.sh +# - ${PROJECT_ROOT}/bin/install-tackle.sh +__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +__root="$(cd "$(dirname "${__dir}")" && pwd)" +__repo="$(basename "${__root}")" +__bin_dir="${__root}/bin" +__os="$(uname -s | tr '[:upper:]' '[:lower:]')" +__arch="$(uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')" -TACKLE_FEATURE_AUTH_REQUIRED="${TACKLE_FEATURE_AUTH_REQUIRED:-false}" +# Update PATH for execution of this script +export PATH="${__bin_dir}:${PATH}" + +NAMESPACE="${NAMESPACE:-konveyor-tackle}" +OPERATOR_BUNDLE_IMAGE="${OPERATOR_BUNDLE_IMAGE:-quay.io/konveyor/tackle2-operator-bundle:latest}" +HUB_IMAGE="${HUB_IMAGE:-quay.io/konveyor/tackle2-hub:latest}" +PATHFINDER_IMAGE="${PATHFINDER_IMAGE:-quay.io/konveyor/tackle-pathfinder:1.3.0-native}" +UI_IMAGE="${UI_IMAGE:-quay.io/konveyor/tackle2-ui:latest}" +UI_INGRESS_CLASS_NAME="${UI_INGRESS_CLASS_NAME:-nginx}" +ADDON_ADMIN_IMAGE="${ADDON_ADMIN_IMAGE:-quay.io/konveyor/tackle2-addon:latest}" +ADDON_ANALYZER_IMAGE="${ADDON_ANALYZER_IMAGE:-quay.io/konveyor/tackle2-addon-analyzer:latest}" +IMAGE_PULL_POLICY="${IMAGE_PULL_POLICY:-Always}" +ANALYZER_CONTAINER_REQUESTS_MEMORY="${ANALYZER_CONTAINER_REQUESTS_MEMORY:-0}" +ANALYZER_CONTAINER_REQUESTS_CPU="${ANALYZER_CONTAINER_REQUESTS_CPU:-0}" +FEATURE_AUTH_REQUIRED="${FEATURE_AUTH_REQUIRED:-false}" if ! command -v kubectl >/dev/null 2>&1; then - echo "Please install kubectl" - exit 1 + kubectl_bin="${__bin_dir}/kubectl" + mkdir -p "${__bin_dir}" + curl -Lo "${kubectl_bin}" "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/${__os}/${__arch}/kubectl" + chmod +x "${kubectl_bin}" fi -# Create namespace -cat << EOF | kubectl apply -f - -apiVersion: v1 -kind: Namespace -metadata: - name: konveyor-tackle -EOF +if ! command -v operator-sdk1 >/dev/null 2>&1; then + operator_sdk_bin="${__bin_dir}/operator-sdk" + mkdir -p "${__bin_dir}" -# Create catalogsource -cat << EOF | kubectl apply -f - -apiVersion: operators.coreos.com/v1alpha1 -kind: CatalogSource -metadata: - name: konveyor-tackle - namespace: konveyor-tackle -spec: - displayName: Konveyor Operator - publisher: Konveyor - sourceType: grpc - image: ${TACKLE_OPERATOR_INDEX_IMAGE} -EOF + version=$(curl --silent "https://api.github.com/repos/operator-framework/operator-sdk/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + curl -Lo "${operator_sdk_bin}" "https://github.com/operator-framework/operator-sdk/releases/download/${version}/operator-sdk_${__os}_${__arch}" + chmod +x "${operator_sdk_bin}" +fi -# Create operatorgroup -cat << EOF | kubectl apply -f - -apiVersion: operators.coreos.com/v1 -kind: OperatorGroup -metadata: - name: konveyor-tackle - namespace: konveyor-tackle -spec: - targetNamespaces: - - konveyor-tackle -EOF +install_operator() { + kubectl auth can-i create namespace --all-namespaces + kubectl create namespace ${NAMESPACE} || true + operator-sdk run bundle ${OPERATOR_BUNDLE_IMAGE} --namespace ${NAMESPACE} + + # If on MacOS, need to install `brew install coreutils` to get `timeout` + timeout 600s bash -c 'until kubectl get customresourcedefinitions.apiextensions.k8s.io tackles.tackle.konveyor.io; do sleep 30; done' \ + || kubectl get subscription --namespace ${NAMESPACE} -o yaml konveyor-operator # Print subscription details when timed out +} + +kubectl get customresourcedefinitions.apiextensions.k8s.io tackles.tackle.konveyor.io || install_operator -# Create, and wait for, subscription -cat << EOF | kubectl apply -f - -apiVersion: operators.coreos.com/v1alpha1 -kind: Subscription -metadata: - name: konveyor-operator - namespace: konveyor-tackle -spec: - channel: development - installPlanApproval: Automatic - name: konveyor-operator - source: konveyor-tackle - sourceNamespace: konveyor-tackle -EOF -# If on MacOS, need to install `brew install coreutils` to get `timeout` -timeout 600s bash -c 'until kubectl get customresourcedefinitions.apiextensions.k8s.io tackles.tackle.konveyor.io; do sleep 30; done' \ -|| kubectl get subscription --namespace konveyor-tackle -o yaml konveyor-operator # Print subscription details when timed out # Create, and wait for, tackle kubectl wait \ - --namespace konveyor-tackle \ + --namespace ${NAMESPACE} \ --for=condition=established \ customresourcedefinitions.apiextensions.k8s.io/tackles.tackle.konveyor.io cat <