Skip to content

Commit

Permalink
Single workflow with multiple jobs
Browse files Browse the repository at this point in the history
  • Loading branch information
andreev-io committed Jan 23, 2025
1 parent fa481eb commit 27d1bff
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 164 deletions.
77 changes: 0 additions & 77 deletions .github/workflows/go.yaml

This file was deleted.

30 changes: 0 additions & 30 deletions .github/workflows/golangci-lint.yml

This file was deleted.

56 changes: 0 additions & 56 deletions .github/workflows/helm.yaml

This file was deleted.

167 changes: 167 additions & 0 deletions .github/workflows/kubenetmon.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
name: Main workflow

on:
pull_request:
paths:
- '**'
push:
branches:
- main
paths:
- '**'

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: true
cache-dependency-path: go.sum
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: v1.60

test:
name: Test code
needs: golangci
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: true
cache-dependency-path: go.sum
- name: Run tests
run: |
make test
make integration-test
build-docker-image:
name: Build Docker image
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
permissions:
contents: read
packages: write
attestations: write
id-token: write
outputs:
image-tags: ${{ steps.meta.outputs.tags }}
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Build Docker image
id: build
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: false
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
load: true

- name: Save image as artifact
run: docker save ${{ steps.meta.outputs.tags }} -o image.tar

- name: Upload image artifact
uses: actions/upload-artifact@v4
with:
name: docker-image
path: image.tar

helm-test:
name: Test chart
runs-on: ubuntu-latest
needs: build-docker-image
steps:
- name: Check out code
uses: actions/checkout@v4

- name: Download Docker image
uses: actions/download-artifact@v4
with:
name: docker-image

- name: Load Docker image
run: docker load -i image.tar

- name: Install Helm
uses: azure/setup-helm@v4

- name: Set up chart-testing
uses: helm/[email protected]

- name: Run chart-testing (lint)
if: steps.list-changed.outputs.changed == 'true'
run: |
ct lint \
--config ct.yaml \
--target-branch ${{ github.event.repository.default_branch }} \
--chart-dirs deploy/helm --charts deploy/helm/kubenetmon-server,deploy/helm/kubenetmon-agent
- name: Create kind cluster
if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/main' }}
uses: helm/[email protected]
with:
config: ${{ github.workspace }}/src/test/kind-config.yaml

- name: Set up kubectl
if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/main' }}
uses: azure/setup-kubectl@v4

- name: Create required resources for test
if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/main' }}
run: |
kind load docker-image --name chart-testing ${{ needs.build-and-push-image.outputs.image-tags }}
kubectl create namespace kubenetmon-agent
kubectl create namespace kubenetmon-server
- name: Run chart-testing (install)
if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/main' || github.event.inputs.deploy_to_dev == 'true' || github.event.inputs.build_and_push == 'true' }}
run: |
cd src/kubenetmon/deploy/helm
ct install \
--config ../../../.github/workflows/configs/ct.yaml \
--target-branch ${{ github.event.repository.default_branch }} \
--chart-dirs . \
--charts kubenetmon-agent \
--namespace kubenetmon-agent \
--helm-extra-set-args "\
--set=image.repository=$(echo ${{ needs.build-and-push-image.outputs.image-tags }} | cut -d':' -f1) \
--set=image.tag=$(echo ${{ needs.build-and-push-image.outputs.image-tags }} | cut -d':' -f2) \
--set=configuration.skipConntrackSanityCheck=true \
--set=configuration.uptimeWaitDuration=1s"
ct install \
--config ../../../.github/workflows/configs/ct.yaml \
--target-branch ${{ github.event.repository.default_branch }} \
--chart-dirs . \
--charts kubenetmon-server \
--namespace kubenetmon-server \
--helm-extra-set-args "\
--set=image.repository=$(echo ${{ needs.build-and-push-image.outputs.image-tags }} | cut -d':' -f1) \
--set=image.tag=$(echo ${{ needs.build-and-push-image.outputs.image-tags }} | cut -d':' -f2) \
--set=inserter.skipPing=true \
--set=inserter.disableTLS=true \
--set=deployment.replicaCount=1 \
--set=cluster=default \
--set=region=europe-north1 \
--set=environment=development \
--set=cloud=gcp"
4 changes: 3 additions & 1 deletion test/test-kind.sh
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,14 @@ kind load docker-image --name kind local/kubenetmon:1.0.0
helm template kubenetmon-agent ./deploy/helm/kubenetmon-agent \
-f ./deploy/helm/kubenetmon-agent/values.yaml \
--set image.tag=1.0.0 \
--set configuration.collectionInterval=1s \
--namespace=kubenetmon-agent | kubectl apply -n kubenetmon-agent -f -
echo "Waiting for kubenetmon-agent pods to be ready..."
kubectl wait --namespace kubenetmon-agent --for=condition=ready pod -l app.kubernetes.io/name=kubenetmon-agent --timeout=180s

echo "Kind cluster setup complete. Run 'kubectl get pods --all-namespaces' to verify."
sleep 15
echo "Sleeping 30 seconds to let some traffic flow"
sleep 30

if ! go test ./integration -v -tags 'integration' -v; then
echo "Tests failed!"
Expand Down

0 comments on commit 27d1bff

Please sign in to comment.