CI/CD #2149
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/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 }} |