Skip to content

Merge pull request #181 from GreenmaskIO/feat/database_subset_with_ci… #325

Merge pull request #181 from GreenmaskIO/feat/database_subset_with_ci…

Merge pull request #181 from GreenmaskIO/feat/database_subset_with_ci… #325

Workflow file for this run

name: ci
on:
workflow_dispatch:
push:
branches:
- 'main'
tags:
- 'v*'
pull_request:
paths-ignore:
- 'README.md'
- 'docs/**'
- 'LICENSE'
- 'getting_started.md'
env:
go-version: '1.21.5'
python-version: 'pypy3.10'
cmd-name: 'greenmask'
docker-registry: greenmask/greenmask
jobs:
unit-tests:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.go-version }}
- name: Echo Go version
run: go version
- name: Run tests
run: make tests
integration-tests:
runs-on: ubuntu-22.04
needs:
- unit-tests
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Run integration tests
run: |
docker compose -f docker-compose-integration.yml -p greenmask up \
--renew-anon-volumes --force-recreate --build --exit-code-from greenmask \
--abort-on-container-exit greenmask
build-binaries:
runs-on: ubuntu-22.04
needs:
- unit-tests
- integration-tests
strategy:
matrix:
platforms:
- 'windows/arm64'
- 'windows/amd64'
- 'darwin/amd64'
- 'darwin/arm64'
- 'linux/amd64'
- 'linux/arm64'
- 'linux/arm/v6'
- 'linux/arm/v7'
- 'linux/ppc64le'
- 'linux/riscv64'
- 'linux/s390x'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.go-version }}
- name: Build with different arch
run: |
export GOOS=$(echo ${{ matrix.platforms }} | cut -d '/' -f 1)
export GOARCH=$(echo ${{ matrix.platforms }} | cut -d '/' -f 2)
export GOARM=$(echo ${{ matrix.platforms }} | cut -d '/' -f 3 | cut -d 'v' -f 2)
if [[ "$GOOS" == "windows" ]]; then
make build CMD_NAME="builds/${{ env.cmd-name }}.exe"
else
make build CMD_NAME="builds/${{ env.cmd-name }}"
fi
- name: Create checksum
if: startsWith(github.ref, 'refs/tags/v')
working-directory: builds
run: |
find . -type f -exec shasum -a 256 -b {} + | sed 's# \*\./# *#' | while read sum file; do echo "$sum $file" > "${file#\*}".sha256; done
- name: Create archive
if: startsWith(github.ref, 'refs/tags/v')
run: |
export GOOS=$(echo ${{ matrix.platforms }} | cut -d '/' -f 1)
export GOARCH=$(echo ${{ matrix.platforms }} | cut -d '/' -f 2)
export GOARM=$(echo ${{ matrix.platforms }} | cut -d '/' -f 3 | cut -d 'v' -f 2)
export ARCHIVE_NAME=$(echo "${{ env.cmd-name }}-${GOOS}-${GOARCH}$(if [ -n "${GOARM}" ]; then echo v${GOARM}; fi).$(if [ "${GOOS}" = "windows" ]; then echo "zip"; else echo "tar.gz"; fi)")
cp LICENSE builds/
cd builds
if [[ "$GOOS" == "windows" ]]; then
zip "${ARCHIVE_NAME}" *
else
tar -czvf "${ARCHIVE_NAME}" *
fi
find . -maxdepth 1 -type f ! -name ${ARCHIVE_NAME} -exec rm -f {} +
- name: GitHub Release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
draft: true
files: builds/*
build-docker-images-and-push:
runs-on: ubuntu-22.04
needs:
- build-binaries
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Get Git tag
id: git_tag
run: echo "TAG=$(git tag --points-at HEAD)" >> $GITHUB_ENV
- name: Build docker image and push
uses: docker/build-push-action@v5
with:
file: docker/greenmask/Dockerfile
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ env.docker-registry }}:${{ env.TAG }}
- name: Build docker imaget with latest tag and push
uses: docker/build-push-action@v5
if: |
! contains(github.ref, 'rc') &&
! contains(github.ref, 'dev') &&
! contains(github.ref, 'pre') &&
! contains(github.ref, 'beta') &&
! contains(github.ref, 'b')
with:
file: docker/greenmask/Dockerfile
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ env.docker-registry }}:latest
deploy-docs:
runs-on: self-hosted
needs:
- build-binaries
- build-docker-images-and-push
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: ${{ env.python-version }}
- name: Install dependicies
run: pip install -r requirements.txt
- name: Get all tags
uses: octokit/request-action@v2.3.1
id: get_tags
with:
route: GET /repos/${{ github.repository }}/git/matching-refs/tags
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup docs deploy
run: |
git config --global user.name "Docs Deployer"
git config --global user.email docs@greenmask.io
echo "Get tags from JSON output"
export TAGS=$(echo '${{ steps.get_tags.outputs.data }}' | jq ".[].ref")
echo "Remove substring from tag name"
export TAGS=($(echo "${TAGS[@]}" | sed 's/"//g' | cut -d '/' -f 3))
echo "Find index of start tag"
export TAG_INDEX=$(echo "${TAGS[@]/v0.1.13//}" | cut -d/ -f1 | wc -w | tr -d ' ')
echo "Get last index of array"
export LAST_INDEX=$((${#TAGS[@]} - 1))
echo "Export sorted tags to GITHUB_ENV variable"
echo "TAGS="${TAGS[@]:${TAG_INDEX}:${LAST_INDEX}}"" >> $GITHUB_ENV
- name: Build docs
run: |
export TAGS="${{ env.TAGS }}"
git fetch --prune --unshallow --tags --force
for tag in ${{ env.TAGS }}; do
echo "### CHECKOUT TO ${tag} ###"
git checkout ${tag}
if [[ "$tag" == *"rc"* || "$tag" == *"dev"* || "$tag" == *"pre"* || "$tag" == *"beta"* || "$tag" == *"b"* ]]; then
mike deploy $tag
else
mike deploy --update-aliases $tag latest
fi
done
- name: Set latest version as default
run: mike set-default latest
- name: Change branch to get html files
run: git checkout gh-pages
- name: Remove old folder
run: sudo rm -rf ${{ secrets.DOCS_DEPLOY_DIR }}/html
- name: Create docs directory
run: sudo mkdir -p ${{ secrets.DOCS_DEPLOY_DIR }}/html
- name: Move html files to docs directory
run: sudo cp -r * ${{ secrets.DOCS_DEPLOY_DIR }}/html
- name: Restart web service
run: sudo systemctl restart nginx