From d7daf851b9f566c9e5aa726c5532672e5f79d3bf Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner Date: Thu, 10 Apr 2025 15:25:34 +0200 Subject: [PATCH] Test new version wf --- .github/workflows/get-versions-from-gh.yaml | 76 +++++++++ .github/workflows/scripts/get-gh-release.sh | 39 +++++ .github/workflows/scripts/repos.txt | 168 ++++++++++++++++++++ 3 files changed, 283 insertions(+) create mode 100644 .github/workflows/get-versions-from-gh.yaml create mode 100644 .github/workflows/scripts/get-gh-release.sh create mode 100644 .github/workflows/scripts/repos.txt diff --git a/.github/workflows/get-versions-from-gh.yaml b/.github/workflows/get-versions-from-gh.yaml new file mode 100644 index 0000000..584688c --- /dev/null +++ b/.github/workflows/get-versions-from-gh.yaml @@ -0,0 +1,76 @@ +name: Crawl Versions from newreleases.io + +on: + workflow_dispatch: + schedule: + # Runs at 12:00 AM and 12:00 PM UTC + - cron: "0 0,12 * * *" + +permissions: + contents: write + pull-requests: write + +jobs: + crawl-versions: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + with: + repository: community-scripts/ProxmoxVED + ref: main + + - name: Generate a token + id: generate-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + + - name: Crawl from newreleases.io + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + scripts/get-gh-release.sh + + - name: Commit JSON + env: + GH_TOKEN: ${{ steps.generate-token.outputs.token }} + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "GitHub Actions[bot]" + git checkout -b update_versions || git checkout update_versions + git add frontend/public/json/versions.json + if git diff --cached --quiet; then + echo "No changes detected." + echo "changed=false" >> "$GITHUB_ENV" + exit 0 + else + echo "Changes detected:" + git diff --stat --cached + echo "changed=true" >> "$GITHUB_ENV" + fi + git commit -m "Update versions.json" + git push origin update_versions --force + gh pr create --title "[AUTOMATIC PR]Update versions.json" --body "Update versions.json, crawled from newreleases.io" --base main --head update_versions + + - name: Approve pull request + if: env.changed == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number') + if [ -n "$PR_NUMBER" ]; then + gh pr review $PR_NUMBER --approve + fi + + - name: Re-approve pull request after update + if: env.changed == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number') + if [ -n "$PR_NUMBER" ]; then + gh pr review $PR_NUMBER --approve + fi diff --git a/.github/workflows/scripts/get-gh-release.sh b/.github/workflows/scripts/get-gh-release.sh new file mode 100644 index 0000000..5062d8b --- /dev/null +++ b/.github/workflows/scripts/get-gh-release.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +INPUT_FILE="repos.txt" +OUTPUT_FILE="../../public/frontend/versions.json" +TMP_FILE="releases_tmp.json" + +if [ -f "$OUTPUT_FILE" ]; then + cp "$OUTPUT_FILE" "$TMP_FILE" +else + echo "[]" > "$TMP_FILE" +fi + +while IFS= read -r repo; do + echo "Checking $repo..." + + response=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${repo}/releases/latest") + tag=$(echo "$response" | jq -r .tag_name) + date=$(echo "$response" | jq -r .published_at) + + if [[ "$tag" == "null" || "$date" == "null" ]]; then + echo "No release found for $repo" + continue + fi + + existing_version=$(jq -r --arg name "$repo" '.[] | select(.name == $name) | .version' "$TMP_FILE") + + if [[ "$existing_version" != "$tag" ]]; then + echo "New release for $repo: $tag" + jq --arg name "$repo" 'del(.[] | select(.name == $name))' "$TMP_FILE" > "$TMP_FILE.tmp" && mv "$TMP_FILE.tmp" "$TMP_FILE" + + jq --arg name "$repo" --arg version "$tag" --arg date "$date" \ + '. += [{"name": $name, "version": $version, "date": $date}]' "$TMP_FILE" > "$TMP_FILE.tmp" && mv "$TMP_FILE.tmp" "$TMP_FILE" + else + echo "No change for $repo" + fi + +done < "$INPUT_FILE" + +mv "$TMP_FILE" "$OUTPUT_FILE" diff --git a/.github/workflows/scripts/repos.txt b/.github/workflows/scripts/repos.txt new file mode 100644 index 0000000..9cb0d65 --- /dev/null +++ b/.github/workflows/scripts/repos.txt @@ -0,0 +1,168 @@ +0xERR0R/blocky +aceberg/WatchYourLAN +actualbudget/actual-server +agl/jbig2enc +alexta69/metube +AlexxIT/go2rtc +apache/tika +ArtifexSoftware/ghostpdl-downloads +Athou/commafeed +authelia/authelia +azukaar/Cosmos-Server +bastienwirtz/homer +benjaminjonard/koillection +benzino77/tasmocompiler +blakeblackshear/frigate +bluenviron/mediamtx +BookStackApp/BookStack +browserless/chrome +Bubka/2FAuth +caddyserver/xcaddy +clusterzx/paperless-ai +cockpit-project/cockpit +community-scripts/ProxmoxVE +CorentinTh/it-tools +dani-garcia/bw_web_builds +dani-garcia/vaultwarden +deepch/RTSPtoWeb +diced/zipline +docker/compose +docmost/docmost +documenso/documenso +Dolibarr/dolibarr +donaldzou/WGDashboard +Donkie/Spoolman +duplicati/duplicati +ellite/wallos +ErsatzTV/ErsatzTV +evcc-io/evcc +excalidraw/excalidraw +Fallenbagel/jellyseerr +firefly-iii/firefly-iii +FlareSolverr/FlareSolverr +Forceu/barcodebuddy +Forceu/Gokapi +FreshRSS/FreshRSS +FunkeyFlo/ps5-mqtt +gethomepage/homepage +glanceapp/glance +glpi-project/glpi +gnmyt/myspeed +go-gitea/gitea +google-coral/test_data +gotify/server +gotson/komga +gristlabs/grist-core +grocy/grocy +hansmi/prometheus-paperless-exporter +hargata/lubelog +heiher/hev-socks5-server +henrygd/beszel +hivemq/hivemq-community-edition +hoarder-app/hoarder +homarr-labs/homarr +hywax/mafl +ie13/jbig2enc +immich-app/immich +inspircd/inspircd +intel-iot-devkit/sample-videos +ipfs/kubo +Jackett/Jackett +janeczku/calibre-web +jhuckaby/Cronicle +juanfont/headscale +Kareadita/Kavita +keycloak/keycloak +kimai/kimai +knadh/listmonk +Koenkk/zigbee2mqtt +Kometa-Team/Kometa +Kozea/Radicale +leiweibau/Pi +libusb/libusb +linkwarden/linkwarden +linuxserver/docker-paperless-ngx +linuxserver/Heimdall +Lissy93/dashy +louislam/uptime-kuma +Luligu/matterbridge +MagicMirrorOrg/MagicMirror +matze/wastebin +maxmind/geoipupdate +MediaBrowser/Emby +meilisearch/meilisearch +mikefarah/yq +minio/minio +monicahq/monica +morpheus65535/bazarr +motioneye-project/motioneye +msgbyte/tianji +mylar3/mylar3 +navidrome/navidrome +netbox-community/netbox +NginxProxyManager/nginx-proxy-manager +NodeBB/NodeBB +ollama/ollama +Ombi-app/Ombi +openobserve/openobserve +openvinotoolkit/open_model_zoo +open-webui/open-webui +paperless-ngx/paperless-ngx +Part-DB/Part-DB-server +paymenter/paymenter +Pf2eToolsOrg/Pf2eTools +pgaskin/kepubify +phpipam/phpipam +pocketbase/pocketbase +pocket-id/pocket-id +PrivateBin/PrivateBin +projectsend/projectsend +prometheus/alertmanager +prometheus/prometheus +prometheus-pve/prometheus-pve-exporter +pymedusa/Medusa +rabbitmq/signing-keys +Requarks/wiki +revenz/Fenrus +rogerfar/rdt-client +rustdesk/rustdesk-server +sabnzbd/sabnzbd +sabre-io/baikal +sbondCo/Watcharr +schlagmichdoch/PairDrop +sct/overseerr +seanmorley15/AdventureLog +searxng/searxng +semaphoreui/semaphore +silverbulletmd/silverbullet +snipe/snipe-it +stackblitz-labs/bolt +Stirling-Tools/Stirling-PDF +stonith404/pingvin-share +Suwayomi/Suwayomi-Server +sysadminsmedia/homebox +TasmoAdmin/TasmoAdmin +Tautulli/Tautulli +thelounge/thelounge-deb +thomiceli/opengist +Threadfin/Threadfin +tobychui/zoraxy +toniebox-reverse-engineering/teddycloud +traccar/traccar +traefik/traefik +trapexit/mergerfs +TriliumNext/Notes +tteck/Proxmox +umami-software/umami +usememos/memos +vabene1111/recipes +ventoy/PXE +VictoriaMetrics/VictoriaMetrics +wavelog/wavelog +wger-project/wger +Y2Z/monolith +yt-dlp/yt-dlp +YuukanOO/seelf +zitadel/zitadel +znerol/prometheus-pve-exporter +zwave-js/zwave-js-ui