Skip to content

Schedule build

Schedule build #188

Workflow file for this run

name: Schedule build
on:
schedule:
- cron: "5 0 * * *"
workflow_dispatch:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
target:
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- name: Check latest kwok
run: |
echo "KWOK_VERSION=$(gh api /repos/kubernetes-sigs/kwok/releases/latest | jq -r .tag_name)" >> $GITHUB_ENV
- name: Check latest k8s
env:
REPO: "${{ github.repository }}"
GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
run: |
# get latest patch version for each minor release
declare -A latest_patch
while IFS= read -r line; do
IFS='.' read -ra arr <<<"$line"
release="${arr[1]}"
patch="${arr[2]}"
if [[ -z "${latest_patch[${release}]}" || "${patch}" -gt "${latest_patch[$release]}" ]]; then
latest_patch["${release}"]="${patch}"
fi
done < <(gh api '/repos/kubernetes/kubernetes/releases?per_page=100&page=1' --jq '.[] | select( .tag_name | contains("-") | not ) | .tag_name')
# get releases
releases=()
for release in "${!latest_patch[@]}"; do
releases+=("${release}")
done
# sort releases by version
mapfile -t releases < <(printf '%s\n' "${releases[@]}" | sort --version-sort)
# trigger build
for release in "${releases[@]}"; do
if ! skopeo inspect --raw docker://ghcr.io/kwok-ci/cluster:${KWOK_VERSION}-k8s.v1.${release}.${latest_patch[${release}]} >/dev/null 2>&1; then
echo "Trigger build ${KWOK_VERSION}-k8s.v1.${release}.${latest_patch[${release}]}"
gh -R "${REPO}" workflow run build.yaml -F tag=v1.${release}.${latest_patch[${release}]} -F kwok-tag=${KWOK_VERSION}
# sleep 30 seconds to avoid rate limit
sleep 30
else
echo "Skip ${KWOK_VERSION}-k8s.v1.${release}.${latest_patch[${release}]}"
fi
done