to be removed, shorten test pipelines #245
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: | |
workflow_dispatch: | |
push: | |
pull_request: | |
schedule: | |
- cron: '0 0 * * *' # every day at midnight | |
#Global vars | |
env: | |
BUILD_DOCKER_FILE_UBUNTU_FOCAL: ci/Dockerfile-ubuntu-focal-for-pmacct | |
BUILD_DOCKER_TAG_UBUNTU_FOCAL: builder_ubuntu_focal | |
BUILD_DOCKER_FILE_UBUNTU_JAMMY: ci/Dockerfile-ubuntu-jammy-for-pmacct | |
BUILD_DOCKER_TAG_UBUNTU_JAMMY: builder_ubuntu_jammy | |
BUILD_DOCKER_FILE_ROCKYLINUX_8: ci/Dockerfile-rockylinux-8-for-pmacct | |
BUILD_DOCKER_TAG_ROCKYLINUX_8: builder_rockylinux8 | |
BUILD_DOCKER_FILE_ROCKYLINUX_9: ci/Dockerfile-rockylinux-9-for-pmacct | |
BUILD_DOCKER_TAG_ROCKYLINUX_9: builder_rockylinux9 | |
DAEMONS: "pmacctd nfacctd sfacctd uacctd pmbgpd pmbmpd pmtelemetryd" | |
jobs: | |
### Step 3: official docker image generation | |
pmacct-docker: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout pmacct | |
uses: actions/checkout@v1 #Don't use v2 messes everything | |
with: | |
path: pmacct | |
- name: Build containers | |
run: | | |
git config --global --add safe.directory $GITHUB_WORKSPACE | |
git config --global --add safe.directory $GITHUB_WORKSPACE/src/external_libs/libcdada | |
git rev-parse HEAD | |
echo "Fix mess with tags in actions/checkout..." | |
git fetch -f && git fetch -f --tags | |
echo "Deducing PMACCT_VERSION..." | |
PMACCT_VERSION=$(git describe --abbrev=0 --match="v*") | |
echo "PMACCT_VERSION=$PMACCT_VERSION" | |
echo "Building the base container..." | |
docker build --build-arg NUM_WORKERS=$CI_NUM_WORKERS --build-arg DEPS_DONT_CHECK_CERTIFICATE=$CI_DEPS_DONT_CHECK_CERTIFICATE -f docker/base/Dockerfile -t base:_build . | |
echo "Building daemon containers..." | |
for DAEMON in ${DAEMONS}; do | |
docker build -f docker/${DAEMON}/Dockerfile -t ${DAEMON}:_build . | |
done | |
echo "Saving images as artifacts..." | |
mkdir -p /tmp/docker/ | |
docker save -o /tmp/docker/pmacct_docker_images.tar base:_build | |
for DAEMON in ${DAEMONS}; do | |
docker save -o /tmp/docker/pmacct_docker_images.tar ${DAEMON}:_build | |
done | |
- name: Docker (compose) smoke test | |
run: | | |
echo "Running smoke test using docker-compose..." | |
TAG=_build docker-compose -f ci/smoke-test/docker-compose.yml up -d | |
sleep 10 | |
echo "Check that all containers are up and running, without restarts ..." | |
if [[ "$(docker inspect `docker ps -aq` | grep RestartCount | grep -v '\"RestartCount\": 0')" != "" ]]; then | |
echo "Some containers restarted!" && docker inspect `docker ps -aq` && /bin/false | |
fi | |
echo "Stopping containers..." | |
TAG=_build docker-compose -f ci/smoke-test/docker-compose.yml down | |
- name: Export pmacct docker images as an artifact | |
uses: actions/[email protected] | |
with: | |
name: pmacct_docker_images | |
retention-days: 1 | |
path: | | |
/tmp/docker | |
### Step 4: Upload images to dockerhub (bleeding-edge, latest and releases) | |
publish-dockerhub: | |
needs: [pmacct-docker] | |
runs-on: ubuntu-22.04 | |
if: github.event_name != 'pull_request' | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
steps: | |
- uses: actions/download-artifact@v2 | |
with: | |
name: pmacct_docker_images | |
path: /tmp/docker | |
- name: Import pmacct docker images in the local registry | |
run: | | |
docker load -i /tmp/docker/pmacct_docker_images.tar | |
- name: Checkout pmacct | |
uses: actions/checkout@v1 #Don't use v2 messes everything | |
with: | |
path: pmacct | |
- name: Build and upload containers | |
run: | | |
echo "Fix mess with tags in actions/checkout..." | |
git fetch -f && git fetch -f --tags | |
echo "Deducing PMACCT_VERSION..." | |
PMACCT_VERSION=$(git describe --abbrev=0 --match="v*") | |
echo "PMACCT_VERSION=$PMACCT_VERSION" | |
echo "Uploading to dockerhub ..."; | |
echo ${DOCKER_PASSWORD} | docker login -u ${DOCKER_USERNAME} --password-stdin; | |
#Always push bleeding-edge when pushed to master | |
GIT_IS_BLEEDING_EDGE=$( (git branch --all --contains HEAD | grep master ) || echo "") | |
echo "GIT_IS_BLEEDING_EDGE=$GIT_IS_BLEEDING_EDGE" | |
if [ "$GIT_IS_BLEEDING_EDGE" != "" ]; then | |
echo "Uploading 'bleeding-edge' tag for `git describe`..."; | |
docker tag base:_build ${DOCKER_USERNAME}/base:bleeding-edge; | |
docker push ${DOCKER_USERNAME}/base:bleeding-edge; | |
docker tag pmacctd:_build ${DOCKER_USERNAME}/pmacctd:bleeding-edge; | |
docker push ${DOCKER_USERNAME}/pmacctd:bleeding-edge; | |
docker tag nfacctd:_build ${DOCKER_USERNAME}/nfacctd:bleeding-edge; | |
docker push ${DOCKER_USERNAME}/nfacctd:bleeding-edge; | |
docker tag sfacctd:_build ${DOCKER_USERNAME}/sfacctd:bleeding-edge; | |
docker push ${DOCKER_USERNAME}/sfacctd:bleeding-edge; | |
docker tag uacctd:_build ${DOCKER_USERNAME}/uacctd:bleeding-edge; | |
docker push ${DOCKER_USERNAME}/uacctd:bleeding-edge; | |
docker tag pmbgpd:_build ${DOCKER_USERNAME}/pmbgpd:bleeding-edge; | |
docker push ${DOCKER_USERNAME}/pmbgpd:bleeding-edge; | |
docker tag pmbmpd:_build ${DOCKER_USERNAME}/pmbmpd:bleeding-edge; | |
docker push ${DOCKER_USERNAME}/pmbmpd:bleeding-edge; | |
docker tag pmtelemetryd:_build ${DOCKER_USERNAME}/pmtelemetryd:bleeding-edge; | |
docker push ${DOCKER_USERNAME}/pmtelemetryd:bleeding-edge; | |
fi | |
#Upload vX.Y.Z only of it's a release commit | |
GIT_RELEASE_TAG=$(git describe --exact-match --match "v*" || echo "") | |
echo "GIT_RELEASE_TAG=$GIT_RELEASE_TAG" | |
if [ "$GIT_RELEASE_TAG" != "" ]; then | |
echo "Uploading '$PMACCT_VERSION' tag for `git describe`..."; | |
docker tag base:_build ${DOCKER_USERNAME}/base:${PMACCT_VERSION}; | |
docker push ${DOCKER_USERNAME}/base:${PMACCT_VERSION}; | |
docker tag pmacctd:_build ${DOCKER_USERNAME}/pmacctd:${PMACCT_VERSION}; | |
docker push ${DOCKER_USERNAME}/pmacctd:${PMACCT_VERSION}; | |
docker tag nfacctd:_build ${DOCKER_USERNAME}/nfacctd:${PMACCT_VERSION}; | |
docker push ${DOCKER_USERNAME}/nfacctd:${PMACCT_VERSION}; | |
docker tag sfacctd:_build ${DOCKER_USERNAME}/sfacctd:${PMACCT_VERSION}; | |
docker push ${DOCKER_USERNAME}/sfacctd:${PMACCT_VERSION}; | |
docker tag uacctd:_build ${DOCKER_USERNAME}/uacctd:${PMACCT_VERSION}; | |
docker push ${DOCKER_USERNAME}/uacctd:${PMACCT_VERSION}; | |
docker tag pmbgpd:_build ${DOCKER_USERNAME}/pmbgpd:${PMACCT_VERSION}; | |
docker push ${DOCKER_USERNAME}/pmbgpd:${PMACCT_VERSION}; | |
docker tag pmbmpd:_build ${DOCKER_USERNAME}/pmbmpd:${PMACCT_VERSION}; | |
docker push ${DOCKER_USERNAME}/pmbmpd:${PMACCT_VERSION}; | |
docker tag pmtelemetryd:_build ${DOCKER_USERNAME}/pmtelemetryd:${PMACCT_VERSION}; | |
docker push ${DOCKER_USERNAME}/pmtelemetryd:${PMACCT_VERSION}; | |
fi | |
#Upload "latest" if the release version is the highest | |
if [ "$GIT_RELEASE_TAG" != "" ]; then | |
GIT_LAST_TAG=$(git tag --sort=v:refname | tail -n 1); | |
echo "GIT_LAST_TAG=$GIT_LAST_TAG" | |
if [ "$GIT_RELEASE_TAG" == "$GIT_LAST_TAG" ]; then | |
echo "Uploading 'latest' tag for `git describe`..."; | |
docker tag base:_build ${DOCKER_USERNAME}/base:latest; | |
docker push ${DOCKER_USERNAME}/base:latest; | |
docker tag pmacctd:_build ${DOCKER_USERNAME}/pmacctd:latest; | |
docker push ${DOCKER_USERNAME}/pmacctd:latest; | |
docker tag nfacctd:_build ${DOCKER_USERNAME}/nfacctd:latest; | |
docker push ${DOCKER_USERNAME}/nfacctd:latest; | |
docker tag sfacctd:_build ${DOCKER_USERNAME}/sfacctd:latest; | |
docker push ${DOCKER_USERNAME}/sfacctd:latest; | |
docker tag uacctd:_build ${DOCKER_USERNAME}/uacctd:latest; | |
docker push ${DOCKER_USERNAME}/uacctd:latest; | |
docker tag pmbgpd:_build ${DOCKER_USERNAME}/pmbgpd:latest; | |
docker push ${DOCKER_USERNAME}/pmbgpd:latest; | |
docker tag pmbmpd:_build ${DOCKER_USERNAME}/pmbmpd:latest; | |
docker push ${DOCKER_USERNAME}/pmbmpd:latest; | |
docker tag pmtelemetryd:_build ${DOCKER_USERNAME}/pmtelemetryd:latest; | |
docker push ${DOCKER_USERNAME}/pmtelemetryd:latest; | |
fi | |
fi |