Skip to content

Deploy

Deploy #1403

Workflow file for this run

name: Deploy all runners
on:
push:
branches: [main]
schedule:
- cron: "0 15 * * *"
workflow_dispatch:
env:
AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}
REGISTRY_NAME: swiftfiddle.azurecr.io
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
CLUSTER_NAME: swiftfiddle
RESOURCE_GROUP: swiftfiddle
SERVICE_NAME: runner
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
jobs:
matrix:
runs-on: ubuntu-latest
outputs:
versionGroup: ${{ steps.set-matrix.outputs.versionGroup }}
steps:
- uses: actions/checkout@v4
- id: set-matrix
run: |
versionGroup=$(cat versions.json | jq '.[] | map("\\\"" + . + "\\\"") | join(",")' | jq -s | tr -d "\n")
echo "versionGroup=$versionGroup" >> $GITHUB_OUTPUT
build:
runs-on: ubuntu-latest
needs: matrix
strategy:
fail-fast: false
matrix:
versionGroup: ${{ fromJson(needs.matrix.outputs.versionGroup) }}
steps:
- uses: actions/checkout@v4
- uses: azure/docker-login@v1
with:
login-server: ${{ env.REGISTRY_NAME }}
username: ${{ env.REGISTRY_USERNAME }}
password: ${{ env.REGISTRY_PASSWORD }}
- name: Build and Push Docker Images
run: |
set -ex
versionGroup="[${{ matrix.versionGroup }}]"
version=$(echo $versionGroup | jq -r '.[0]')
versions=$(echo $versionGroup | jq -r 'join(" ")')
IMAGE_TAG=${{ env.REGISTRY_NAME }}/${{ env.RESOURCE_GROUP }}/${{ env.SERVICE_NAME }}:$version-init
docker build --rm \
--build-arg username="${{ env.DOCKER_HUB_USERNAME}}" \
--build-arg access_token="${{ env.DOCKER_HUB_ACCESS_TOKEN}}" \
--build-arg versions="$versions" \
--tag ${IMAGE_TAG} -f ./k8s/init_container/Dockerfile ./k8s/init_container
docker push ${IMAGE_TAG}
IMAGE_TAG=${{ env.REGISTRY_NAME }}/${{ env.RESOURCE_GROUP }}/${{ env.SERVICE_NAME }}:$version
docker build --rm --tag ${IMAGE_TAG} .
docker push ${IMAGE_TAG}
deploy:
runs-on: ubuntu-latest
needs:
- matrix
- build
strategy:
fail-fast: false
matrix:
versionGroup: ${{ fromJson(needs.matrix.outputs.versionGroup) }}
max-parallel: 1
steps:
- uses: actions/checkout@v4
- uses: azure/setup-kubectl@v4
- uses: azure/login@v2
with:
creds: ${{ env.AZURE_CREDENTIALS }}
- uses: azure/aks-set-context@v4
with:
resource-group: ${{ env.RESOURCE_GROUP }}
cluster-name: ${{ env.CLUSTER_NAME }}
- name: Deploy
run: |
set -ex
version=$(echo [${{ matrix.versionGroup }}] | jq -r '.[0]')
name="runner-v$(sed 's/\.//g' <<<"$version")"
timestamp=$(date +%s%3N)
/bin/bash k8s/pod.yaml.sh "$version" "$name" "$timestamp" | kubectl apply -f -
kubectl rollout status deployment/$name
kubectl get services -o wide