Release: v0.2 #210
Workflow file for this run
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: | |
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 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 }},${{ 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: Setup docs deploy | |
run: | | |
git config --global user.name "Docs Deployer" | |
git config --global user.email docs@greenmask.io | |
echo "TAGS=$(git log --tags --simplify-by-decoration --pretty='format:%d' --since=2024-04-30 | sed '/^$/d' | cut -d ':' -f 2 | cut -d ')' -f 1 | tac | tr '\n' ' ')" >> $GITHUB_ENV | |
- name: Build docs | |
run: | | |
for tag in ${{ env.TAGS }}; do | |
echo "### CHECKOUT TO ${tag} ###" | |
git checkout $tag | |
if [[ "$tag" == *"rc"* || "$tag" == *"dev"* || "$tag" == *"pre"* ]]; 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 |