Skip to content

CI/CD

CI/CD #2027

Workflow file for this run

name: CI/CD
on:
push:
schedule:
- cron: 37 0 * * *
jobs:
test:
name: Run CI Tests & Linters
runs-on: [ self-hosted, docker ]
steps:
- name: Checkout maintenance/v2 branch
if: github.event_name == 'schedule'
uses: actions/[email protected]
with:
ref: maintenance/v2
- name: Checkout code
if: github.event_name != 'schedule'
uses: actions/[email protected]
- uses: docker/[email protected]
with:
install: true
- name: Run integration tests
run: script/run-in-docker.sh make ci
- name: Notify Slack fail
if: startsWith(github.ref, 'refs/heads/maintenance/') && failure()
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
uses: voxmedia/github-action-slack-notify-build@v2
with:
channel_id: CNCH08G14 # development channel
status: FAILED
color: danger
# debug:
# needs: test
# runs-on: [self-hosted, docker]
# steps:
# - run: echo "$GITHUB_CONTEXT"
# env:
# GITHUB_CONTEXT: ${{ toJson(github) }}
# All of this Docker stuff copied from:
# https://github.com/marketplace/actions/build-and-push-docker-images#complete-workflow
docker:
runs-on: [ self-hosted, docker ]
needs: test
steps:
- name: Checkout maintenance/v2 branch
if: github.event_name == 'schedule'
uses: actions/[email protected]
with:
ref: maintenance/v2
- name: Checkout code
if: github.event_name != 'schedule'
uses: actions/[email protected]
- name: Prep Docker
id: prep
run: |
DOCKER_IMAGE=fluree/ledger
VERSION=none
if [[ $GITHUB_REF =~ ^refs/tags/v[[:digit:]]+ ]]; then
VERSION=${GITHUB_REF#refs/tags/v}
elif [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
elif [[ $GITHUB_REF == refs/heads/main ]]; then
VERSION=main
# Uncomment to tag every branch
#elif [[ $GITHUB_REF == refs/heads/* ]]; then
# VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g')
# Uncomment to tag every pr with pr-[num]
#elif [[ $GITHUB_REF == refs/pull/* ]]; then
# VERSION=pr-${{ github.event.number }}
fi
TAGS="${DOCKER_IMAGE}:${VERSION}"
# Tag with major version, minor version, and 'latest'
if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
MINOR=${VERSION%.*}
MAJOR=${MINOR%.*}
TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR},${DOCKER_IMAGE}:latest"
fi
# Tag with alpha, beta, or rc if present
if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-(alpha|beta|rc)[0-9]{1,3}$ ]]; then
TAGS="${TAGS},${DOCKER_IMAGE}:${BASH_REMATCH[1]}"
fi
#if [[ "${{ github.event_name }}" == "push" ]]; then
# TAGS="$TAGS,${DOCKER_IMAGE}:sha-${GITHUB_SHA::8}"
#fi
echo ::set-output name=version::${VERSION}
echo ::set-output name=tags::${TAGS}
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
- name: Setup QEMU
uses: docker/[email protected]
- name: Setup Docker buildx
uses: docker/[email protected]
- name: Login to DockerHub
if: github.event_name != 'pull_request'
uses: docker/[email protected]
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Cache Docker layers
uses: actions/[email protected]
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Build and push Docker image
id: docker_build
uses: docker/[email protected]
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' && steps.prep.outputs.tags != 'fluree/ledger:none' }}
tags: ${{ steps.prep.outputs.tags }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
secrets: |
GIT_AUTH_TOKEN=${{ github.token }}
labels: |
org.opencontainers.image.title=${{ github.event.repository.name }}
org.opencontainers.image.description=${{ github.event.repository.description }}
org.opencontainers.image.url=${{ github.event.repository.html_url }}
org.opencontainers.image.source=${{ github.event.repository.clone_url }}
org.opencontainers.image.version=${{ steps.prep.outputs.version }}
org.opencontainers.image.created=${{ steps.prep.outputs.created }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.licenses=${{ github.event.repository.license.spdx_id }}