ci #1
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 | |
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/#-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/#-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/actions-setup-cmake@v1.12 | |
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 }} |