Skip to content

Make minor README changes and properly package images and charts on tagged commits in main #38

Make minor README changes and properly package images and charts on tagged commits in main

Make minor README changes and properly package images and charts on tagged commits in main #38

Workflow file for this run

name: Main workflow
on:
pull_request:
paths:
- '**'
push:
branches:
- main
tags:
- 'v*'
paths:
- '**'
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
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 integration-test
make test
build-docker-image:
name: Build Docker image
runs-on: ubuntu-latest
outputs:
image-tags: ${{ steps.meta.outputs.tags }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Determine Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/clickhouse/kubenetmon
tags: |
type=sha
type=ref,event=tag
- name: Build Docker image
id: build
uses: docker/build-push-action@v5
with:
context: .
push: false
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
load: true
- name: Save image as artifact
run: docker save -o image.tar ${{ steps.meta.outputs.tags }}
- name: Upload image artifact
uses: actions/upload-artifact@v4
with:
name: docker-image
path: image.tar
helm-test:
name: Test chart
needs: build-docker-image
runs-on: ubuntu-latest
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)
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
uses: helm/[email protected]
with:
config: ${{ github.workspace }}/test/kind-config.yaml
- name: Set up kubectl
uses: azure/setup-kubectl@v4
- name: Create required resources for test
run: |
kind load docker-image --name chart-testing ${{ needs.build-docker-image.outputs.image-tags }}
kubectl create namespace kubenetmon-agent
kubectl create namespace kubenetmon-server
- name: Run chart-testing (install)
run: |
cd deploy/helm
ct install \
--config ../../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-docker-image.outputs.image-tags }} | cut -d':' -f1) \
--set=image.tag=$(echo ${{ needs.build-docker-image.outputs.image-tags }} | cut -d':' -f2) \
--set=configuration.skipConntrackSanityCheck=true \
--set=configuration.uptimeWaitDuration=1s"
ct install \
--config ../../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-docker-image.outputs.image-tags }} | cut -d':' -f1) \
--set=image.tag=$(echo ${{ needs.build-docker-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"
docker-publish:
name: Publish Docker image
needs: [golangci, test, build-docker-image, helm-test]
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
steps:
- name: Checkout 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: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate Version
id: version
run: |
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
VERSION="${{ github.ref_name }}"
else
VERSION=$(git describe --tags --always 2>/dev/null || echo "0.1.0-$(git rev-parse --short HEAD)")
fi
echo "VERSION=$VERSION" >> $GITHUB_ENV
- name: Push to GitHub Container Registry
run: |
docker tag ${{ needs.build-docker-image.outputs.image-tags }} ghcr.io/clickhouse/kubenetmon:$VERSION
docker tag ${{ needs.build-docker-image.outputs.image-tags }} ghcr.io/clickhouse/kubenetmon:latest
docker push ghcr.io/clickhouse/kubenetmon:$VERSION
docker push ghcr.io/clickhouse/kubenetmon:latest
helm-publish:
name: Package and publish Helm charts
needs: [golangci, test, build-docker-image, helm-test]
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "[email protected]"
- name: Update chart version and app version
run: |
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
VERSION="${{ github.ref_name }}"
STRIPPED_VERSION="${VERSION#v}"
sed -i "s/^version:.*/version: $STRIPPED_VERSION/" deploy/helm/*/Chart.yaml
sed -i "s/^appVersion:.*/appVersion: $VERSION/" deploy/helm/*/Chart.yaml
else
sed -i "s/^appVersion:.*/appVersion: ${{ github.sha }}/" deploy/helm/*/Chart.yaml
fi
- name: Run chart-releaser
uses: helm/[email protected]
with:
charts_dir: deploy/helm
mark_as_latest: true
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
CR_GENERATE_RELEASE_NOTES: true