diff --git a/.forgejo/workflows/package-check.yml b/.forgejo/workflows/package-check.yml index 2df5694..1d3bf5e 100644 --- a/.forgejo/workflows/package-check.yml +++ b/.forgejo/workflows/package-check.yml @@ -5,82 +5,67 @@ on: schedule: - cron: '0 1 * * *' +env: + PACKAGE: curl + jobs: build: runs-on: dind steps: - - name: Install dependencies for other steps - shell: sh - run: | - apk add --no-cache git nodejs npm bash sed curl + - name: Install dependencies + run: apk add --no-cache git nodejs npm bash sed curl - - name: Checkout repo - uses: actions/checkout@v3 + - uses: actions/checkout@v3 - - name: Check for latest package version + - name: Get latest package version id: check - shell: sh run: | - PACKAGE="curl" LATEST=$(apk policy "$PACKAGE" | awk '/^[[:space:]]*[0-9]/ { gsub(":", "", $1); print $1; exit }') - echo "Extracted version: $LATEST" echo "LATEST_VERSION=$LATEST" >> $GITHUB_ENV echo "latest_version=$LATEST" >> $GITHUB_OUTPUT - - name: Compare with last known version or if last rebuild was longer then 3 days ago - shell: sh + - name: Determine if update is needed run: | - FILE=".last_version" - [ -f "$FILE" ] && LAST=$(cat "$FILE") || LAST="none" - echo "Last known version: $LAST" - echo "Current version: $LATEST_VERSION" - if [ "$LAST" != "$LATEST_VERSION" ]; then - echo "UPDATE=true" >> $GITHUB_ENV - else - echo "UPDATE=false" >> $GITHUB_ENV + last_version_file=".last_version" + last_rebuild_file=".last_rebuild" + + last_version=$(cat $last_version_file 2>/dev/null || echo "none") + last_rebuild=$(cat $last_rebuild_file 2>/dev/null || echo 0) + current_day=$(( $(date +%s) / 86400 )) + + update="false" + if [ "$last_version" != "$LATEST_VERSION" ] || [ $((current_day - last_rebuild)) -gt 3 ]; then + update="true" fi - FILE=".last_rebuild" - [ -f "$FILE" ] && LAST=$(cat "$FILE") || LAST="0" - echo "Last rebuild: $LAST" - if [ $(( $(date +%s) / 86400 - $LAST )) -gt 3 ]; then - echo "UPDATE=true" >> "$GITHUB_ENV" - fi + echo "UPDATE=$update" >> $GITHUB_ENV - - - name: Start dockerd + - name: Start Docker daemon if: env.UPDATE == 'true' - shell: sh run: | dockerd-entrypoint.sh & - timeout=30 - while ! docker info >/dev/null 2>&1; do - if [ $timeout -le 0 ]; then - echo "Docker daemon failed to start." - exit 1 - fi + for i in {1..10}; do + docker info && break echo "Waiting for Docker daemon..." sleep 3 - timeout=$((timeout - 3)) done + docker info || { echo "Docker daemon failed to start."; exit 1; } - name: Build and push Docker image if: env.UPDATE == 'true' - shell: sh run: | docker build -t git.shork.ch/melody/docker-test:latest -t git.shork.ch/melody/docker-test:$LATEST_VERSION . echo "${{ secrets.DOCKER_PASSWORD }}" | docker login git.shork.ch -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - docker push git.shork.ch/melody/docker-test:latest + docker push git.shork.ch/melody/docker-$PACKAGE:latest echo "$LATEST_VERSION" > .last_version echo $(( $(date +%s) / 86400 )) > .last_rebuild - - name: Commit updated version file + - name: Commit updated metadata if: env.UPDATE == 'true' - shell: sh run: | git config user.name "forgejo-runner" - git config user.email "runner@forgejo.local" + git config user.email "runner@shork.ch" git add .last_version .last_rebuild - git commit -m "Update build metdata" + git commit -m "Update build metadata" git push