From cb207e6177a5a9c6f52b159c1ebdbcd0c892f294 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 19 Oct 2025 20:45:43 +0200 Subject: [PATCH] Add automatic Nicotine+ version checking and building MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Workflow checks PyPI hourly for new Nicotine+ versions - Automatically builds and pushes new images when updates are available - Creates Gitea releases tagged with Nicotine+ version - Supports manual trigger and push events 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .gitea/workflows/build.yml | 49 +++++++++++++++++++++++++++++++++++++- README.md | 18 +++++++------- 2 files changed, 58 insertions(+), 9 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index f65518b..af0b752 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -5,9 +5,44 @@ on: 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 @@ -31,6 +66,18 @@ jobs: push: true tags: | git.nicola.sh/public/nicotine-less:latest - git.nicola.sh/public/nicotine-less:${{ github.sha }} + 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.GITEA_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 }}\" + }" diff --git a/README.md b/README.md index 7d6fe99..130b313 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,16 @@ docker exec -it nicotine-less nicotine ## Updates -To update Nicotine+ to the latest version, rebuild the container: +**Automatic updates**: The container image is automatically rebuilt every hour when a new Nicotine+ version is released on PyPI. + +To update to the latest version, pull the new image: + +```bash +docker compose pull +docker compose up -d +``` + +Or rebuild locally: ```bash docker compose down @@ -103,13 +112,6 @@ docker compose build --no-cache docker compose up -d ``` -Or pull the pre-built image from the registry: - -```bash -docker compose pull -docker compose up -d -``` - ## License This project is provided "as-is" without warranties.