CI Workflow #3321
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: CI Workflow | |
on: | |
push: | |
branches: | |
- main | |
schedule: | |
- cron: "5 0 * * *" # TODO: Run every 4 hours to soak test, should be less frequent before merge (weekly/daily/???) | |
workflow_dispatch: | |
env: | |
IMAGE_NAME: cluster-api-provider-packet | |
GHCR_REGISTRY: ghcr.io/${{ github.repository_owner }} | |
DOCKER_REGISTRY: ${{ secrets.DOCKER_ORG }} | |
QUAY_REGISTRY: quay.io/${{ secrets.QUAY_ORG }} | |
REGISTRY: quay.io/${{ secrets.QUAY_ORG }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
jobs: | |
validate: | |
name: "Validate ${{ matrix.target }}" | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
target: ["verify", "lint", "test"] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: "./go.mod" | |
- name: ${{ matrix.target }} | |
run: make ${{ matrix.target }} | |
build-image: | |
name: Build and Push Image | |
runs-on: ubuntu-latest | |
permissions: | |
packages: write # needed to push docker image to ghcr.io | |
pull-requests: write # needed to create and update comments in PRs | |
steps: | |
- name: Checkout git repo | |
uses: actions/checkout@v4 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to ghcr.io registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Log into DockerHub | |
uses: docker/login-action@v3 | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
if: ${{ env.DOCKER_USERNAME != '' }} | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Log into quay.io | |
uses: docker/login-action@v3 | |
env: | |
QUAY_USERNAME: ${{ secrets.QUAY_USERNAME }} | |
if: ${{ env.QUAY_USERNAME != '' }} | |
with: | |
registry: quay.io | |
username: ${{ secrets.QUAY_USERNAME }} | |
password: ${{ secrets.QUAY_PASSWORD }} | |
- name: Docker meta | |
id: docker_meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
${{ env.QUAY_REGISTRY }}/${{ env.IMAGE_NAME }} | |
${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }} | |
${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }} | |
flavor: | | |
latest=false | |
tags: | | |
type=semver,pattern={{version}} | |
type=edge | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=sha,priority=1001 | |
- name: Docker Build and Push | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
tags: ${{ steps.docker_meta.outputs.tags }} | |
labels: ${{ steps.docker_meta.outputs.labels }} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
platforms: linux/amd64, linux/arm64 | |
# If PR, put image tags in the PR comments | |
# from https://github.com/marketplace/actions/create-or-update-comment | |
- name: Find comment for image tags | |
uses: peter-evans/find-comment@v3 | |
if: github.event_name == 'pull_request' | |
id: fc | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: "github-actions[bot]" | |
body-includes: Docker image tag(s) pushed | |
# If PR, put image tags in the PR comments | |
- name: Create or update comment for image tags | |
uses: peter-evans/create-or-update-comment@v4 | |
if: github.event_name == 'pull_request' | |
with: | |
comment-id: ${{ steps.fc.outputs.comment-id }} | |
issue-number: ${{ github.event.pull_request.number }} | |
body: | | |
Docker image tag(s) pushed: | |
```text | |
${{ steps.docker_meta.outputs.tags }} | |
``` | |
Labels added to images: | |
```text | |
${{ steps.docker_meta.outputs.labels }} | |
``` | |
edit-mode: replace | |
outputs: | |
image-tag: "${{ steps.docker_meta.outputs.version }}" | |
release-manifests: | |
name: Make Release Manifests | |
runs-on: ubuntu-latest | |
needs: [build-image] | |
env: | |
TAG: ${{ needs.build-image.outputs.image-tag }} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: "./go.mod" | |
- name: Make Release | |
run: make release | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: release-manifests | |
path: out/release | |
e2e-quickstart: | |
name: "E2E quickstart" | |
concurrency: ci-${{ github.ref }}-e2e-quickstart | |
runs-on: ubuntu-latest | |
needs: [build-image, release-manifests] | |
env: | |
TAG: ${{ needs.build-image.outputs.image-tag }} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: "./go.mod" | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: release-manifests | |
path: out/release | |
- name: Prepull the pre-built image | |
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG} | |
- name: "e2e-quickstart" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }} | |
PROJECT_ID: ${{ secrets.PROJECT_ID }} | |
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml" | |
SKIP_IMAGE_BUILD: "1" | |
MANIFEST_PATH: "../../../out/release" | |
METRO: da | |
CONTROLPLANE_NODE_TYPE: c3.medium.x86 | |
WORKER_NODE_TYPE: c3.medium.x86 | |
GINKGO_NODES: "1" | |
run: ./scripts/ci-e2e-capi-quickstart.sh | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
if: ${{ always() }} | |
with: | |
name: e2e-quickstart | |
path: _artifacts | |
e2e: | |
name: "E2E" | |
concurrency: ci-${{ github.ref }}-e2e | |
runs-on: ubuntu-latest | |
needs: [build-image, release-manifests] | |
env: | |
TAG: ${{ needs.build-image.outputs.image-tag }} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: "./go.mod" | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: release-manifests | |
path: out/release | |
- name: Prepull the pre-built image | |
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG} | |
- name: "e2e" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }} | |
PROJECT_ID: ${{ secrets.PROJECT_ID }} | |
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml" | |
SKIP_IMAGE_BUILD: "1" | |
MANIFEST_PATH: "../../../out/release" | |
METRO: da | |
CONTROLPLANE_NODE_TYPE: c3.medium.x86 | |
WORKER_NODE_TYPE: c3.medium.x86 | |
GINKGO_NODES: "1" | |
run: ./scripts/ci-e2e-capi.sh | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
if: ${{ always() }} | |
with: | |
name: e2e | |
path: _artifacts | |
e2e-conformance: | |
name: "E2E conformance" | |
concurrency: ci-${{ github.ref }}-e2e-conformance | |
runs-on: ubuntu-latest | |
needs: [build-image, release-manifests] | |
env: | |
TAG: ${{ needs.build-image.outputs.image-tag }} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: "./go.mod" | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: release-manifests | |
path: out/release | |
- name: Prepull the pre-built image | |
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG} | |
- name: "e2e-conformance" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }} | |
PROJECT_ID: ${{ secrets.PROJECT_ID }} | |
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml" | |
SKIP_IMAGE_BUILD: "1" | |
MANIFEST_PATH: "../../../out/release" | |
METRO: da | |
CONTROLPLANE_NODE_TYPE: c3.medium.x86 | |
WORKER_NODE_TYPE: c3.medium.x86 | |
GINKGO_NODES: "1" | |
run: ./scripts/ci-e2e-capi-conformance.sh | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
if: ${{ always() }} | |
with: | |
name: e2e-conformance | |
path: _artifacts | |
e2e-workload-upgrade: | |
name: "E2E Workload-Upgrade" | |
concurrency: ci-${{ github.ref }}-e2e-workload-upgrade | |
runs-on: ubuntu-latest | |
needs: [build-image, release-manifests] | |
env: | |
TAG: ${{ needs.build-image.outputs.image-tag }} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: "./go.mod" | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: release-manifests | |
path: out/release | |
- name: Prepull the pre-built image | |
run: docker pull ${REGISTRY}/${IMAGE_NAME}:${TAG} | |
- name: "e2e-workload-upgrade" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PACKET_API_KEY: ${{ secrets.PACKET_API_TOKEN }} | |
PROJECT_ID: ${{ secrets.PROJECT_ID }} | |
E2E_CONF_FILE_SOURCE: "${{ github.workspace }}/test/e2e/config/packet-ci-actions.yaml" | |
SKIP_IMAGE_BUILD: "1" | |
MANIFEST_PATH: "../../../out/release" | |
METRO: da | |
CONTROLPLANE_NODE_TYPE: c3.medium.x86 | |
WORKER_NODE_TYPE: c3.medium.x86 | |
GINKGO_NODES: "1" | |
run: ./scripts/ci-e2e-capi-workload-upgrade.sh | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
if: ${{ always() }} | |
with: | |
name: e2e-workload-upgrade | |
path: _artifacts |