Skip to content

CI

CI #1620

Workflow file for this run

name: CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
merge_group:
types: [checks_requested]
env:
GO_VERSION: '1.23'
DOCKER_BUILDX_PLATFORMS: linux/amd64,linux/arm64
jobs:
changes:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
outputs:
charts: ${{ steps.changes.outputs.charts }}
chartyaml: ${{ steps.changes.outputs.chartyaml }}
go: ${{ steps.changes.outputs.go }}
tag: ${{ steps.changes.outputs.tag }}
tests: ${{ steps.changes.outputs.tests }}
make: ${{ steps.changes.outputs.make }}
steps:
- uses: actions/checkout@v3
- uses: "./.github/actions/changes"
id: changes
# Make sure that Kubebuilder autogenerated files are up to date.
kubebuilder-diff:
name: Kubebuilder Diff
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- name: Generate manifests
run: make manifests
- name: Fail if there are uncommited manifest changes
run: |
git diff --exit-code
git diff --cached --exit-code
build-images:
name: Build Images
needs:
- changes
- kubebuilder-diff
if: needs.changes.outputs.go == 'true'
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- id: buildx-setup
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
platforms: ${{ env.DOCKER_BUILDX_PLATFORMS }}
- name: Build
uses: docker/build-push-action@v3
with:
context: .
platforms: ${{ steps.buildx-setup.outputs.platforms }}
push: false
tags: ngrok/ngrok-operator:latest
go-mod-tidy:
name: Go Mod Tidy Check
runs-on: ubuntu-latest
needs:
- changes
if: |
(needs.changes.outputs.go == 'true')
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- run: go mod tidy
- run: git diff --exit-code go.mod
- run: git diff --exit-code go.sum
build-and-test:
runs-on: ubuntu-latest
needs:
- changes
- kubebuilder-diff
if: |
(github.event_name == 'push' && github.ref_name == 'main')
||
(
(needs.changes.outputs.go == 'true') ||
(needs.changes.outputs.charts == 'true') ||
(needs.changes.outputs.chartyaml == 'true') ||
(needs.changes.outputs.tests == 'true') ||
(needs.changes.outputs.make == 'true')
)
permissions:
contents: read
pull-requests: read
steps:
- uses: actions/checkout@v3
- uses: "./.github/actions/build-and-test"
with:
# this workflow is for incoming PRs, so we want to skip e2e tests
# and deploy the demo mode because our api keys are not available
# on contributor's forks
run-e2e: false
go-version: ${{ env.GO_VERSION }}
helm:
runs-on: ubuntu-latest
timeout-minutes: 15
needs: [changes]
if: needs.changes.outputs.charts == 'true'
steps:
- uses: actions/checkout@v3
- uses: azure/setup-helm@v3
with:
version: v3.10.0
- name: Lint Helm Chart
run: make helm-lint
- name: Helm Unit Tests
run: make helm-test
e2e:
runs-on: ubuntu-latest
needs:
- changes
- kubebuilder-diff
# Only run one e2e test at a time to avoid stomping on each other
concurrency:
group: e2e
cancel-in-progress: false
timeout-minutes: 20
# Only run the e2e tests if on the main branch or in a merge queue and
# files have changed that require e2e tests
if: |
(github.repository == 'ngrok/ngrok-operator') &&
(
(github.event_name == 'push' && github.ref_name == 'main') ||
(github.event_name == 'merge_group')
) &&
(
(needs.changes.outputs.go == 'true') ||
(needs.changes.outputs.charts == 'true') ||
(needs.changes.outputs.chartyaml == 'true') ||
(needs.changes.outputs.tests == 'true') ||
(needs.changes.outputs.make == 'true')
)
steps:
- uses: actions/checkout@v3
- uses: "./.github/actions/build-and-test"
with:
run-e2e: true
go-version: ${{ env.GO_VERSION }}
ngrok-api-key: ${{ secrets.NGROK_CI_API_KEY }}
ngrok-authtoken: ${{ secrets.NGROK_CI_AUTHTOKEN }}