Skip to content

ci

ci #1

Workflow file for this run

name: ci
on:
push:
branches:
- master
- dev
tags:
- '*'
pull_request:
branches:
- master
- dev
types:
- opened
- edited
- reopened
- synchronize
- ready_for_review
- unlocked
- review_requested
workflow_dispatch:
env:
DOCKER_REGISTRY_REPOSITORY: sysflowtelemetry/sf-processor
PLUGIN_BUILDER_DOCKER_REGISTRY_REPOSITORY: sysflowtelemetry/plugin-builder
GH_ORGANIZATION: sysflow-telemetry
jobs:
lint-core:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: 1.19
- name: Lint core module
uses: golangci/golangci-lint-action@v3
with:
version: v1.51.1
working-directory: core
args: --disable=errcheck --build-tags=flatrecord
lint-driver:
needs: lint-core
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: 1.19
- name: Lint driver module
uses: golangci/golangci-lint-action@v3
with:
version: v1.51.1
working-directory: driver
args: --disable=errcheck
docker:
needs: lint-driver
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Read manifest
shell: bash
run: |
echo "UBI_VERSION=$(awk -F'=' '/UBI_VERSION/{print $2}' makefile.manifest.inc)" >> $GITHUB_ENV
- name: Docker meta
id: meta_builder
uses: docker/metadata-action@v4
with:
images: |
${{ env.PLUGIN_BUILDER_DOCKER_REGISTRY_REPOSITORY }}
ghcr.io/${{ env.GH_ORGANIZATION }}/plugin-builder
tags: |
type=edge,branch=master
type=ref,event=branch
type=match,pattern=^\d.\d.\d$
type=ref,event=pr
type=sha,prefix=
type=sha,format=long,prefix=
labels: |
org.opencontainers.image.documentation=https://sysflow.readthedocs.io/
org.opencontainers.image.vendor=SysFlow
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKER_REGISTRY_REPOSITORY }}
ghcr.io/${{ github.repository }}
tags: |
type=edge,branch=master
type=ref,event=branch
type=match,pattern=^\d.\d.\d$
type=ref,event=pr
type=sha,prefix=
type=sha,format=long,prefix=
labels: |
org.opencontainers.image.documentation=https://sysflow.readthedocs.io/
org.opencontainers.image.vendor=SysFlow
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
if: ${{ github.event_name != 'pull_request' }}
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
if: ${{ github.event_name != 'pull_request' }}
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set build args
id: args
shell: bash
run: |
echo "UBI_VERSION=$(awk -F'=' '/UBI_VERSION/{print $2}' makefile.manifest.inc)" >> $GITHUB_ENV
echo "BRANCH=$(echo ${GITHUB_REF##refs/*/})" >> $GITHUB_ENV
echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Build and push plugin builder image
id: docker_plugin_builder
uses: docker/build-push-action@v3
with:
push: ${{ github.event_name != 'pull_request' }}
target: base
tags: "${{ steps.meta_builder.outputs.tags }}"
labels: "${{ steps.meta_builder.outputs.labels }}"
build-args: |
BUILD_NUMBER=${{ env.SHA_SHORT }}
VERSION=${{ env.BRANCH }}
RELEASE=${{ env.SHA_SHORT }}
UBI_VER=${{ env.UBI_VERSION }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v3
with:
push: ${{ github.event_name != 'pull_request' }}
tags: "${{ steps.meta.outputs.tags }}"
labels: "${{ steps.meta.outputs.labels }}"
cache-from: type=registry,ref=ghcr.io/${{ env.GH_ORGANIZATION }}/plugin-builder:${{ env.SHA_SHORT }}
build-args: |
BUILD_NUMBER=${{ env.SHA_SHORT }}
VERSION=${{ env.BRANCH }}
RELEASE=${{ env.SHA_SHORT }}
UBI_VER=${{ env.UBI_VERSION }}
- name: push README to Dockerhub
uses: christian-korneck/update-container-description-action@v1
if: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request' }}
env:
DOCKER_USER: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKER_PASS: ${{ secrets.DOCKERHUB_TOKEN }}
with:
destination_container_repo: ${{ env.DOCKER_REGISTRY_REPOSITORY }}
provider: dockerhub
readme_file: "README.md"
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
release:
needs: docker
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Setup cmake
uses: jwlawson/[email protected]
with:
cmake-version: '3.16.x'
- name: Get version from tag
id: tag_name
shell: bash
run: |
GHREF=${GITHUB_REF#refs/tags/}; echo "CURRENT_VERSION=${GHREF%%-*}" >> $GITHUB_ENV
echo "CURRENT_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Build Release Assets
id: build_release_assets
shell: bash
run: |
docker pull ${{ env.DOCKER_REGISTRY_REPOSITORY }}:${{ env.SHA_SHORT }}
docker tag ${{ env.DOCKER_REGISTRY_REPOSITORY }}:${{ env.SHA_SHORT }} ${{ env.DOCKER_REGISTRY_REPOSITORY }}:${{ env.CURRENT_TAG }}
make package
echo "DEB=$(ls ${{ github.workspace }}/scripts/cpack/*.deb)" >> $GITHUB_ENV
echo "RPM=$(ls ${{ github.workspace }}/scripts/cpack/*.rpm)" >> $GITHUB_ENV
echo "TARGZ=$(ls ${{ github.workspace }}/scripts/cpack/*.tar.gz)" >> $GITHUB_ENV
- name: Get Changelog Entry
id: changelog_reader
uses: mindsers/changelog-reader-action@v2
with:
version: ${{ env.CURRENT_VERSION }}
path: ./CHANGELOG.md
- name: Release
uses: softprops/action-gh-release@v1
with:
body: ${{ steps.changelog_reader.outputs.changes }}
token: ${{ secrets.GITHUB_TOKEN }}
prerelease: ( contains(env.CURRENT_VERSION, '-rc') || contains(env.CURRENT_VERSION, '-alpha') || contains(env.CURRENT_VERSION, '-beta') )
draft: true
files: |
${{ env.DEB }}
${{ env.RPM }}
${{ env.TARGZ }}