Skip to content
This repository has been archived by the owner on Oct 22, 2024. It is now read-only.

Fix PodDisruptionBudget apiVersion in demo #348

Fix PodDisruptionBudget apiVersion in demo

Fix PodDisruptionBudget apiVersion in demo #348

Workflow file for this run

name: 🚀 Project build
on:
push:
pull_request:
release:
types: [published]
env:
CARGO_TERM_COLOR: always
jobs:
# ------------------ COMMON JOBS ------------------
build-core:
name: 🔨 Build Core
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/cache@v2
with:
path: |
core/.cache
key: build-core-${{ github.event_name }}-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
- name: Build core in debug configuration
if: github.event_name != 'release'
run: make core-debug
- name: Build core in release configuration
if: github.event_name == 'release'
run: make core
- name: Fix permission for cache
run: sudo chmod -R 777 core/.cache
- uses: actions/upload-artifact@v2
with:
name: core-documentation
path: .artifacts/core-documentation
- uses: actions/upload-artifact@v2
with:
name: core-executable
path: .artifacts/core-executable
build-dashboard:
name: 🔨 Build Dashboard
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/setup-node@v2
with:
node-version: "14"
- name: Build dashboard
run: make dashboard
- uses: actions/upload-artifact@v2
with:
name: web-root
path: .artifacts/web-root
bundle-core:
name: 🐳 Push Core to GHCR
runs-on: ubuntu-latest
needs: [build-core, build-dashboard]
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: core-executable
path: .artifacts/core-executable
- uses: actions/download-artifact@v2
with:
name: web-root
path: .artifacts/web-root
- name: Prepare
id: prep
run: |
DOCKER_IMAGE=ghcr.io/tilblechschmidt/webgrid/core
TAGS="${DOCKER_IMAGE}:sha-${GITHUB_SHA::7}"
echo "tags=${TAGS}" >> $GITHUB_ENV
echo "created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV
chmod +x .artifacts/core-executable/webgrid
- name: Login to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GHCR_TOKEN }}
- name: Build and push webgrid/core Docker image
uses: docker/build-push-action@v2
with:
context: .
file: distribution/docker/images/core/Dockerfile
tags: ${{ env.tags }}
push: ${{ github.event_name != 'pull_request' }}
labels: |
org.opencontainers.image.source=${{ github.event.repository.html_url }}
org.opencontainers.image.created=${{ env.created }}
org.opencontainers.image.revision=${{ github.sha }}
- name: Export docker image as artifact
run: |
docker save ${{ env.tags }} | gzip > core.tar.gz
- uses: actions/upload-artifact@v2
with:
name: docker-core
path: core.tar.gz
bundle-node:
name: 🐳 Push Node to GHCR
runs-on: ubuntu-latest
needs: build-core
strategy:
matrix:
browser: ["chrome", "firefox"]
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: core-executable
path: .artifacts/core-executable
- name: Prepare
id: prep
run: |
DOCKER_IMAGE=ghcr.io/tilblechschmidt/webgrid/node-${{ matrix.browser }}
TAGS="${DOCKER_IMAGE}:sha-${GITHUB_SHA::7}"
echo "tags=${TAGS}" >> $GITHUB_ENV
echo "created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV
chmod +x .artifacts/core-executable/webgrid
- name: Login to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GHCR_TOKEN }}
- name: Build and push webgrid/node-${{ matrix.browser }} Docker image
uses: docker/build-push-action@v2
with:
context: .
file: distribution/docker/images/node/Dockerfile
build-args: browser=${{ matrix.browser }}
tags: ${{ env.tags }}
push: ${{ github.event_name != 'pull_request' }}
labels: |
org.opencontainers.image.source=${{ github.event.repository.html_url }}
org.opencontainers.image.created=${{ env.created }}
org.opencontainers.image.revision=${{ github.sha }}
- name: Export docker image as artifact
run: |
docker save ${{ env.tags }} | gzip > node-${{ matrix.browser }}.tar.gz
- uses: actions/upload-artifact@v2
with:
name: docker-node-${{ matrix.browser }}
path: node-${{ matrix.browser }}.tar.gz
docker-integration:
name: 🐳 Docker integration test
runs-on: ubuntu-latest
needs:
- bundle-core
- bundle-node
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: docker-core
path: ./
- uses: actions/download-artifact@v2
with:
name: docker-node-firefox
path: ./
- uses: actions/download-artifact@v2
with:
name: docker-node-chrome
path: ./
- name: Import docker images
run: |
docker load --input core.tar.gz
docker load --input node-firefox.tar.gz
docker load --input node-chrome.tar.gz
- name: Run integration test in Docker
run: |
export REPOSITORY=ghcr.io/tilblechschmidt/webgrid
export IMAGE_TAG="sha-${GITHUB_SHA::7}"
echo "Using $REPOSITORY/core:$IMAGE_TAG"
pip install selenium
make install
docker-compose -f distribution/docker/docker-compose.yml logs -f &
sleep 15
docker run --rm --network host -e ENDPOINT=http://localhost:8080 -e FORKS=2 -e BROWSER=firefox ghcr.io/tilblechschmidt/parallelseleniumtest:sha-fa30ad9
docker run --rm --network host -e ENDPOINT=http://localhost:8080 -e FORKS=2 -e BROWSER=chrome ghcr.io/tilblechschmidt/parallelseleniumtest:sha-fa30ad9
kubernetes-integration:
name: ☸️ Kubernetes integration test
runs-on: ubuntu-latest
needs:
- bundle-core
- bundle-node
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: docker-core
path: ./
- uses: actions/download-artifact@v2
with:
name: docker-node-firefox
path: ./
- uses: actions/download-artifact@v2
with:
name: docker-node-chrome
path: ./
- name: Import docker images
run: |
docker load --input core.tar.gz
docker load --input node-firefox.tar.gz
docker load --input node-chrome.tar.gz
- name: Install dependencies
run: |
curl -fLO https://github.com/stern/stern/releases/download/v1.28.0/stern_1.28.0_linux_amd64.tar.gz
tar xzf stern_1.28.0_linux_amd64.tar.gz
chmod +x stern
sudo mv stern /usr/local/bin/stern
pip install selenium
- name: Start K8s cluster
run: |
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.27.9+k3s1 K3S_KUBECONFIG_MODE=777 sh -s - --docker
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
- name: Deploy WebGrid instance
run: |
stern --color always test-webgrid* &
helm install test ./distribution/kubernetes/demo/charts/webgrid --wait --set image.repository=ghcr.io/tilblechschmidt/webgrid,image.tag=sha-${GITHUB_SHA::7},image.pullPolicy=IfNotPresent
kubectl apply -f test/node-port.yml
- name: Print debug information
if: always()
run: |
kubectl cluster-info
kubectl get nodes
kubectl get jobs
kubectl get pods
kubectl get services
echo "------------------------ DESCRIBE ON PODS ------------------------"
kubectl describe pods
- name: Run integration test
run: |
docker run --rm --network host -e ENDPOINT=http://localhost:30007 -e FORKS=2 -e BROWSER=firefox ghcr.io/tilblechschmidt/parallelseleniumtest:sha-fa30ad9
docker run --rm --network host -e ENDPOINT=http://localhost:30007 -e FORKS=2 -e BROWSER=chrome ghcr.io/tilblechschmidt/parallelseleniumtest:sha-fa30ad9
# ------------------ RELEASE ONLY JOBS ------------------
docker-hub:
if: github.event_name == 'release'
name: 🐳 Publish Images to DockerHub
runs-on: ubuntu-latest
needs:
- bundle-core
- bundle-node
- kubernetes-integration
- docker-integration
steps:
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: webgrid
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Prepare environment
run: |
echo "SRC_REPOSITORY=ghcr.io/tilblechschmidt/webgrid" >> $GITHUB_ENV
echo "SRC_TAG=sha-${GITHUB_SHA::7}" >> $GITHUB_ENV
echo "DST_REPOSITORY=webgrid" >> $GITHUB_ENV
echo "DST_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
- name: Cross-push core
run: |
SRC_IMAGE=${{ env.SRC_REPOSITORY }}/core:${{ env.SRC_TAG }}
DST_IMAGE=${{ env.DST_REPOSITORY }}/core:${{ env.DST_TAG }}
echo "Pushing $SRC_IMAGE to $DST_IMAGE"
docker pull $SRC_IMAGE
docker tag $SRC_IMAGE $DST_IMAGE
docker push $DST_IMAGE
- name: Cross-push node-firefox
run: |
SRC_IMAGE=${{ env.SRC_REPOSITORY }}/node-firefox:${{ env.SRC_TAG }}
DST_IMAGE=${{ env.DST_REPOSITORY }}/node-firefox:${{ env.DST_TAG }}
echo "Pushing $SRC_IMAGE to $DST_IMAGE"
docker pull $SRC_IMAGE
docker tag $SRC_IMAGE $DST_IMAGE
docker push $DST_IMAGE
- name: Cross-push node-chrome
run: |
SRC_IMAGE=${{ env.SRC_REPOSITORY }}/node-chrome:${{ env.SRC_TAG }}
DST_IMAGE=${{ env.DST_REPOSITORY }}/node-chrome:${{ env.DST_TAG }}
echo "Pushing $SRC_IMAGE to $DST_IMAGE"
docker pull $SRC_IMAGE
docker tag $SRC_IMAGE $DST_IMAGE
docker push $DST_IMAGE
publish-docs:
if: github.event_name == 'release'
name: 📚 Publish Docs to GitHub Pages
runs-on: ubuntu-latest
needs: [build-core, docker-hub]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: actions/download-artifact@v2
with:
name: core-documentation
path: .artifacts/core-documentation
- uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Install mkdocs theme & plugins
run: |
pip3 install --no-cache \
'mkdocs-git-revision-date-localized-plugin>=0.4' \
'mkdocs-material' \
'mkdocs-mermaid2-plugin' \
'mkdocs-codeinclude-plugin' \
'mkdocs-material-extensions' \
'mkdocs-simple-hooks' \
'git+http://github.com/TilBlechschmidt/mkdocs-helm'
- name: Build & deploy documentation
env:
HELM_USE_GIT_TAG: true
run: |
mkdocs --version
mkdocs gh-deploy --force
github-release:
if: github.event_name == 'release'
name: 🐙 Update GitHub Release
needs: [build-core]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: core-executable
path: .artifacts/core-executable
- name: Build release asset upload url
run: |
RELEASE_ID=$(jq --raw-output '.release.id' $GITHUB_EVENT_PATH)
if [[ -z "${RELEASE_ID}" ]]; then
echo "There was no release ID in the GitHub event."
exit 1
fi
RELEASE_ASSET_UPLOAD_URL="https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets"
echo "$RELEASE_ASSET_UPLOAD_URL"
echo "RELEASE_ASSET_UPLOAD_URL=$RELEASE_ASSET_UPLOAD_URL" >> $GITHUB_ENV
- name: Attach Core executable
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ env.RELEASE_ASSET_UPLOAD_URL }}?name=webgrid-core-linux
asset_path: .artifacts/core-executable/webgrid
asset_name: webgrid-core-linux
asset_content_type: application/octet-stream