name: Alpine Package Auto-Rebuild on: workflow_dispatch: schedule: - cron: '0 1 * * *' # Daily at 1:00 AM UTC jobs: build: runs-on: dind steps: - name: Install dependencies for other steps shell: sh run: | apk add --no-cache git nodejs npm bash sed - name: Checkout repo uses: actions/checkout@v3 - name: Check for latest package version id: check shell: sh run: | PACKAGE="curl" LATEST=$(apk policy "$PACKAGE" | sed -n '2p' | sed 's/^[[:space:]]*//; s/[[:space:]:]*$//') echo "LATEST_VERSION=$LATEST" >> $GITHUB_ENV echo "latest_version=$LATEST" >> $GITHUB_OUTPUT - name: Compare with last known version shell: sh 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 fi - name: Start dockerd 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 echo "Waiting for Docker daemon..." sleep 3 timeout=$((timeout - 3)) done - name: Build and push Docker image if: env.UPDATE == 'true' shell: sh run: | docker build -t git.shork.ch/melody/docker-test:latest . echo "${{ secrets.DOCKER_PASSWORD }}" | docker login git.shork.ch -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin docker push git.shork.ch/melody/docker-test:latest echo "$LATEST_VERSION" > .last_version - name: Commit updated version file if: env.UPDATE == 'true' shell: sh run: | git config user.name "forgejo-runner" git config user.email "runner@forgejo.local" git add .last_version git commit -m "Update tracked version to $LATEST_VERSION" git push