name: Build and Push Docker Image on: push: branches: - main workflow_dispatch: schedule: - cron: '0 * * * *' # Every hour jobs: check-version: runs-on: ubuntu-latest outputs: should_build: ${{ steps.compare.outputs.should_build }} latest_version: ${{ steps.get_version.outputs.version }} steps: - name: Get latest Nicotine+ version from PyPI id: get_version run: | VERSION=$(curl -s https://pypi.org/pypi/nicotine-plus/json | jq -r '.info.version') echo "version=$VERSION" >> $GITHUB_OUTPUT echo "Latest Nicotine+ version: $VERSION" - name: Get current built version id: current_version run: | CURRENT=$(curl -s https://git.nicola.sh/api/v1/repos/public/nicotine-less/releases/latest 2>/dev/null | jq -r '.tag_name // "none"') echo "current=$CURRENT" >> $GITHUB_OUTPUT echo "Current built version: $CURRENT" - name: Compare versions id: compare run: | if [ "${{ steps.get_version.outputs.version }}" != "${{ steps.current_version.outputs.current }}" ]; then echo "should_build=true" >> $GITHUB_OUTPUT echo "New version detected, will build" else echo "should_build=false" >> $GITHUB_OUTPUT echo "Already up to date" fi build: needs: check-version if: needs.check-version.outputs.should_build == 'true' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: git.nicola.sh username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build and push uses: docker/build-push-action@v5 with: context: . platforms: linux/amd64,linux/arm64 push: true tags: | git.nicola.sh/public/nicotine-less:latest git.nicola.sh/public/nicotine-less:${{ needs.check-version.outputs.latest_version }} cache-from: type=registry,ref=git.nicola.sh/public/nicotine-less:buildcache cache-to: type=registry,ref=git.nicola.sh/public/nicotine-less:buildcache,mode=max - name: Create release if: needs.check-version.outputs.should_build == 'true' run: | curl -X POST "https://git.nicola.sh/api/v1/repos/public/nicotine-less/releases" \ -H "Authorization: token ${{ secrets.TOKEN }}" \ -H "Content-Type: application/json" \ -d "{ \"tag_name\": \"${{ needs.check-version.outputs.latest_version }}\", \"name\": \"Nicotine+ ${{ needs.check-version.outputs.latest_version }}\", \"body\": \"Automated build with Nicotine+ version ${{ needs.check-version.outputs.latest_version }}\" }"