From 215bfc7081295721a24ff712e70b5093255b696b Mon Sep 17 00:00:00 2001 From: Nico Koprowski Date: Wed, 29 May 2024 12:56:07 +0800 Subject: [PATCH] cicd: perform helm test now on current code base instead of remote images - split helm test and helm lint as they have different purposes - introduce reusable workflows for building and caching docker images from current code base - add documentation for that change --- .github/workflows/app-test-charts.yaml | 183 ++++++++++++++++++ .github/workflows/build-docker-all.yaml | 4 - .github/workflows/chart-test-lint.yaml | 67 +++++++ .../workflows/docker-build-and-cache-all.yaml | 43 ++++ .github/workflows/docker-build-and-cache.yaml | 63 ++++++ .github/workflows/helm-chart-lint.yaml | 108 ----------- docs/developer/README.md | 15 ++ 7 files changed, 371 insertions(+), 112 deletions(-) create mode 100644 .github/workflows/app-test-charts.yaml create mode 100644 .github/workflows/chart-test-lint.yaml create mode 100644 .github/workflows/docker-build-and-cache-all.yaml create mode 100644 .github/workflows/docker-build-and-cache.yaml delete mode 100644 .github/workflows/helm-chart-lint.yaml diff --git a/.github/workflows/app-test-charts.yaml b/.github/workflows/app-test-charts.yaml new file mode 100644 index 000000000..9ff703500 --- /dev/null +++ b/.github/workflows/app-test-charts.yaml @@ -0,0 +1,183 @@ +################################################################################ +# Copyright (c) 2021,2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License, Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 +################################################################################ + +name: Perform Chart Tests +on: + workflow_call: + inputs: + node_image: + description: 'kindest/node image for k8s kind cluster' + default: 'kindest/node:v1.27.3' + required: false + type: string + upgrade_from: + description: 'chart version to upgrade from' + required: false + type: string + helm_version: + description: 'helm version to test (default = latest)' + default: 'latest' + required: false + type: string + workflow_dispatch: + inputs: + node_image: + description: 'kindest/node image for k8s kind cluster' + # k8s version from 3.1 release as default + default: 'kindest/node:v1.27.3' + required: false + type: string + upgrade_from: + description: 'chart version to upgrade from' + required: false + type: string + helm_version: + description: 'helm version to test (default = latest)' + default: 'latest' + required: false + type: string + pull_request: + branches: + - main + - release/** +jobs: + build-apps: + uses: ./.github/workflows/docker-build-and-cache-all.yaml + + execute-tests: + needs: build-apps + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Kubernetes KinD Cluster + uses: container-tools/kind-action@v2 + with: + version: v0.20.0 + node_image: ${{ github.event.inputs.node_image || 'kindest/node:v1.27.3' }} + + - name: Set up Helm + uses: azure/setup-helm@v4 + with: + version: ${{ github.event.inputs.helm_version || 'latest' }} + + - uses: actions/setup-python@v5 + with: + python-version: '3.9' + check-latest: true + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.6.1 + + - name: Download Pool Image + uses: actions/download-artifact@v4 + with: + name: bpdm-pool-docker + path: /tmp + + - name: Download Gate Image + uses: actions/download-artifact@v4 + with: + name: bpdm-gate-docker + path: /tmp + + - name: Download Orchestrator Image + uses: actions/download-artifact@v4 + with: + name: bpdm-orchestrator-docker + path: /tmp + + - name: Download Cleaning Service Dummy Image + uses: actions/download-artifact@v4 + with: + name: bpdm-cleaning-service-dummy-docker + path: /tmp + + - name: Push Pool Image to Kind + run: | + docker load --input /tmp/bpdm-pool.tar + docker image tag bpdm-pool:test kind-registry:5000/bpdm-pool:test + docker push kind-registry:5000/bpdm-pool:test + + - name: Push Gate Image to Kind + run: | + docker load --input /tmp/bpdm-gate.tar + docker image tag bpdm-gate:test kind-registry:5000/bpdm-gate:test + docker push kind-registry:5000/bpdm-gate:test + + - name: Push Orchestrator Image to Kind + run: | + docker load --input /tmp/bpdm-orchestrator.tar + docker image tag bpdm-orchestrator:test kind-registry:5000/bpdm-orchestrator:test + docker push kind-registry:5000/bpdm-orchestrator:test + + - name: Push Cleaning Service Dummy Image to Kind + run: | + docker load --input /tmp/bpdm-cleaning-service-dummy.tar + docker image tag bpdm-cleaning-service-dummy:test kind-registry:5000/bpdm-cleaning-service-dummy:test + docker push kind-registry:5000/bpdm-cleaning-service-dummy:test + + - name: Create Test Values + run: | + mkdir charts/bpdm/ci + cat < charts/bpdm/ci/test-values.yaml + bpdm-pool: + image: + registry: kind-registry:5000 + repository: bpdm-pool + tag: test + bpdm-gate: + image: + registry: kind-registry:5000 + repository: bpdm-gate + tag: test + bpdm-orchestrator: + image: + registry: kind-registry:5000 + repository: bpdm-orchestrator + tag: test + bpdm-cleaning-service-dummy: + image: + registry: kind-registry:5000 + repository: bpdm-cleaning-service-dummy + tag: test + EOF + echo "cat charts/bpdm/ci/test-values.yaml" + cat charts/bpdm/ci/test-values.yaml + - name: Create Chart-Testing Config + run: | + cat < .chart-testing-config.yaml + chart-repos: + - bitnami=https://charts.bitnami.com/bitnami + helm-extra-args: --timeout 600s + EOF + echo "cat .chart-testing-config.yaml" + cat .chart-testing-config.yaml + - name: Run chart-testing (install) + run: ct install --charts charts/bpdm --config .chart-testing-config.yaml + + - name: Run helm upgrade + run: | + helm repo add bitnami https://charts.bitnami.com/bitnami + helm repo add tractusx-dev https://eclipse-tractusx.github.io/charts/dev + helm install bpdm-test tractusx-dev/bpdm ${{ github.event.inputs.upgrade_from && '--version github.event.inputs.upgrade_from' || '' }} + helm dependency update charts/bpdm + helm upgrade bpdm-test charts/bpdm + diff --git a/.github/workflows/build-docker-all.yaml b/.github/workflows/build-docker-all.yaml index 1cb164381..b3440d472 100644 --- a/.github/workflows/build-docker-all.yaml +++ b/.github/workflows/build-docker-all.yaml @@ -37,10 +37,6 @@ on: branches: - main - rc/** - pull_request: - branches: - - main - - rc/** jobs: build-docker-pool: uses: ./.github/workflows/build-docker.yaml diff --git a/.github/workflows/chart-test-lint.yaml b/.github/workflows/chart-test-lint.yaml new file mode 100644 index 000000000..fc6d06e36 --- /dev/null +++ b/.github/workflows/chart-test-lint.yaml @@ -0,0 +1,67 @@ +################################################################################ +# Copyright (c) 2021,2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License, Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 +################################################################################ + +name: Lint Charts + +on: + pull_request: + workflow_call: + inputs: + helm_version: + description: 'helm version to test (default = latest)' + default: 'latest' + required: false + type: string + workflow_dispatch: + inputs: + helm_version: + description: 'helm version to test (default = latest)' + default: 'latest' + required: false + type: string + +jobs: + lint-test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Helm + uses: azure/setup-helm@v4 + with: + version: ${{ github.event.inputs.helm_version || 'latest' }} + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.6.1 + + - name: Create Chart-Testing Config + run: | + cat < .chart-testing-config.yaml + validate-maintainers: false + chart-repos: + - bitnami=https://charts.bitnami.com/bitnami + EOF + echo "cat .chart-testing-config.yaml" + cat .chart-testing-config.yaml + + - name: Run chart-testing (lint) + run: ct lint --target-branch ${{ github.event.repository.default_branch }} --config .chart-testing-config.yaml diff --git a/.github/workflows/docker-build-and-cache-all.yaml b/.github/workflows/docker-build-and-cache-all.yaml new file mode 100644 index 000000000..2a9cab5e9 --- /dev/null +++ b/.github/workflows/docker-build-and-cache-all.yaml @@ -0,0 +1,43 @@ +################################################################################ +# Copyright (c) 2021,2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License, Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 +################################################################################ + +name: 'Build and Cache All Docker Images' +on: + workflow_dispatch: + workflow_call: +jobs: + build-pool: + uses: ./.github/workflows/docker-build-and-cache.yaml + with: + app: pool + + build-gate: + uses: ./.github/workflows/docker-build-and-cache.yaml + with: + app: gate + + build-orchestrator: + uses: ./.github/workflows/docker-build-and-cache.yaml + with: + app: orchestrator + + build-cleaning-service-dummy: + uses: ./.github/workflows/docker-build-and-cache.yaml + with: + app: cleaning-service-dummy diff --git a/.github/workflows/docker-build-and-cache.yaml b/.github/workflows/docker-build-and-cache.yaml new file mode 100644 index 000000000..13badb767 --- /dev/null +++ b/.github/workflows/docker-build-and-cache.yaml @@ -0,0 +1,63 @@ +################################################################################ +# Copyright (c) 2021,2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License, Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 +################################################################################ + +name: 'Build and Cache Docker Image' +on: + workflow_dispatch: + inputs: + app: + description: 'The name of the BPDM app to build' + type: choice + required: true + options: + - pool + - gate + - orchestrator + - cleaning-service-dummy + workflow_call: + inputs: + app: + description: 'The name of the BPDM app to build' + type: string + required: true + +jobs: + build-image-and-upload: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Pool Image + uses: docker/build-push-action@v5 + with: + context: . + file: docker/${{ inputs.app }}/Dockerfile + tags: bpdm-${{ inputs.app }}:test + outputs: type=docker,dest=/tmp/bpdm-${{ inputs.app }}.tar + + - name: Upload Pool Image + uses: actions/upload-artifact@v4 + with: + name: bpdm-${{ inputs.app }}-docker + path: /tmp/bpdm-${{ inputs.app }}.tar + diff --git a/.github/workflows/helm-chart-lint.yaml b/.github/workflows/helm-chart-lint.yaml deleted file mode 100644 index f80c7582a..000000000 --- a/.github/workflows/helm-chart-lint.yaml +++ /dev/null @@ -1,108 +0,0 @@ -################################################################################ -# Copyright (c) 2021,2024 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License, Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0. -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# -# SPDX-License-Identifier: Apache-2.0 -################################################################################ - -name: Lint and Test Charts - -on: - pull_request: - workflow_dispatch: - inputs: - node_image: - description: 'kindest/node image for k8s kind cluster' - # k8s version from 3.1 release as default - default: 'kindest/node:v1.27.3' - required: false - type: string - upgrade_from: - description: 'chart version to upgrade from' - # chart version from 3.1 release as default - default: '4.0.4' - required: false - type: string - helm_version: - description: 'helm version to test (default = latest)' - default: 'latest' - required: false - type: string - -jobs: - lint-test: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Kubernetes KinD Cluster - uses: container-tools/kind-action@v2 - with: - # upgrade version, default (v0.17.0) uses node image v1.21.1 and doesn't work with more recent node image versions - version: v0.20.0 - # default value for event_name != workflow_dispatch - node_image: ${{ github.event.inputs.node_image || 'kindest/node:v1.27.3' }} - - - name: Set up Helm - uses: azure/setup-helm@v4 - with: - version: ${{ github.event.inputs.helm_version || 'latest' }} - - - uses: actions/setup-python@v5 - with: - python-version: '3.9' - check-latest: true - - name: Set up chart-testing - uses: helm/chart-testing-action@v2.6.1 - - - name: Run chart-testing (list-changed) - id: list-changed - run: | - changed=$(ct list-changed --target-branch ${{ github.event.repository.default_branch }}) - if [[ -n "$changed" ]]; then - echo "changed=true" >> $GITHUB_OUTPUT - fi - - - name: Create Chart-Testing Config - run: | - cat < .chart-testing-config.yaml - validate-maintainers: false - chart-repos: - - bitnami=https://charts.bitnami.com/bitnami - helm-extra-args: --timeout 600s - EOF - echo "cat .chart-testing-config.yaml" - cat .chart-testing-config.yaml - - - - name: Run chart-testing (lint) - run: ct lint --target-branch ${{ github.event.repository.default_branch }} --config .chart-testing-config.yaml - - name: Run chart-testing (install) - run: ct install --charts charts/bpdm --config .chart-testing-config.yaml - if: github.event_name != 'pull_request' || steps.list-changed.outputs.changed == 'true' - - # Upgrade the released chart version with the locally available chart - # default value for event_name != workflow_dispatch - - name: Run helm upgrade - run: | - helm repo add bitnami https://charts.bitnami.com/bitnami - helm repo add tractusx-dev https://eclipse-tractusx.github.io/charts/dev - helm install bpdm-test tractusx-dev/bpdm --version ${{ github.event.inputs.upgrade_from || '4.0.4' }} - helm dependency update charts/bpdm - helm upgrade bpdm-test charts/bpdm - if: github.event_name != 'pull_request' || steps.list-changed.outputs.changed == 'true' diff --git a/docs/developer/README.md b/docs/developer/README.md index c79c2ee74..f840ad7bc 100644 --- a/docs/developer/README.md +++ b/docs/developer/README.md @@ -2,6 +2,21 @@ Documentation here concerns developers who want to contribute to this repository. +## Apps and Charts + +The CICD pipeline tests new code contributions by deploying them in the current version of the BPDM chart. +In this way we can perform system tests in an environment that get close to actual productive environments as possible. +As a result, the BPDM charts always should be up-to-date with the newest code contributions. +If a breaking change of an app feature would lead to incompatibility with the current charts, the charts need to be updated. +You can say that changing the chart accordingly is also part of any app feature or fix. This has the following advantages and disadvantages. + +Advantages: +- The whole code base is always up-to-date and compatible with each other +- Allows for more sophisticated testing leading to lower errors on the main branch + +Disadvantages: +- Changes in the apps have direct impact on the charts (Leading to potentially bigger and more complicated pull requests) + ## License Check Licenses of all maven dependencies need to be approved by eclipse.