0
0
镜像自地址 https://github.com/THZoria/NX_Firmware.git 已同步 2026-04-09 10:41:13 +00:00
文件
NX_Firmware/.github/workflows/firmware-autodl.yml
工作流配置文件无效。请检查您的配置文件:yaml: line 39: mapping values are not allowed in this context
Zoria e53232cb55 Update firmware auto downloader workflow to v21.0.0
Updated the firmware auto downloader workflow to include version 21.0.0, added new dependencies, and improved error handling.
2026-02-22 00:21:57 +01:00

122 行
4.5 KiB
YAML

name: 🎮 Firmware Auto Downloader (21.0.0+)
on:
schedule:
- cron: '0 * * * *' # Vérifie toutes les heures
workflow_dispatch: # Permet de lancer manuellement depuis l'onglet Actions
jobs:
download_and_release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: ⬇️ Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 🐍 Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: ⚙️ Install required Python modules
run: |
pip install requests anynet beautifulsoup4 pycryptodome
- name: ⬇️ Setup hactool-linux
run: |
if [ -f "hactool-linux" ]; then
cp hactool-linux hactool
else
echo "ERREUR: hactool-linux absent du dépôt"
exit 1
fi
chmod +x hactool
- name: 🔍 Check firmware version (Filter: 21.0.0+)
id: version_check
run: |
# 1. Récupérer le flux RSS de NinUpdates
RSS_FEED=$(curl -s 'https://yls8.mtheall.com/ninupdates/feed.php')
# 2. Extraire la version en ignorant explicitement 19.x et 20.x
# La regex '^([2-9][1-9]|[3-9][0-9])' impose un nombre >= 21
LATEST_VERSION=$(echo "$RSS_FEED" | \
grep -oP '<title>Switch \K[0-9.]+' | \
grep -E '^([2-9][1-9]|[3-9][0-9])\.' | \
head -n 1)
if [ -z "$LATEST_VERSION" ]; then
echo "INFO: Aucune nouvelle version majeure (>= 21.0.0) détectée."
echo "new_version=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "Version majeure détectée : $LATEST_VERSION"
# 3. Vérifier si cette version a déjà été publiée dans tes Releases
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://api.github.com/repos/${{ github.repository }}/releases/tags/$LATEST_VERSION")
if [ "$HTTP_STATUS" == "200" ]; then
echo "INFO: La release $LATEST_VERSION existe déjà."
echo "new_version=false" >> $GITHUB_OUTPUT
else
echo "INFO: NOUVELLE VERSION $LATEST_VERSION DETECTEE !"
echo "new_version=true" >> $GITHUB_OUTPUT
echo "latest_v=$LATEST_VERSION" >> $GITHUB_OUTPUT
fi
shell: bash
- name: 💻 Execute download script
id: download
if: steps.version_check.outputs.new_version == 'true'
run: |
# On lance le script avec la version détectée
python3 firmware_downloader.py "${{ steps.version_check.outputs.latest_v }}" | tee firmware_output.txt
# On récupère le nom exact du dossier créé
FIRMWARE_VERSION=$(grep 'Folder: Firmware ' firmware_output.txt | awk '{print $NF}' || echo "${{ steps.version_check.outputs.latest_v }}")
echo "firmware_version=$FIRMWARE_VERSION" >> $GITHUB_OUTPUT
# Extraction d'un mini log pour la description de la release
tail -n 15 firmware_output.txt > changelog_body.txt
- name: 🧹 Zip Firmware
if: steps.version_check.outputs.new_version == 'true'
run: |
VERSION="${{ steps.download.outputs.firmware_version }}"
# Trouve le dossier (ex: "Firmware 21.0.0")
DIR_NAME=$(ls -d Firmware*${VERSION}* | head -n 1)
if [ -d "$DIR_NAME" ]; then
zip -rj "Firmware_$VERSION.zip" "$DIR_NAME/"
else
echo "ERREUR: Dossier $DIR_NAME introuvable après téléchargement"
exit 1
fi
- name: 📦 Create Release on GitHub
if: steps.version_check.outputs.new_version == 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.download.outputs.firmware_version }}
name: Firmware ${{ steps.download.outputs.firmware_version }}
body: |
## 🎮 Nintendo Switch Firmware ${{ steps.download.outputs.firmware_version }}
Ce firmware a été automatiquement détecté et téléchargé depuis les serveurs officiels de Nintendo.
**Détails du téléchargement :**
```text
$(cat changelog_body.txt)
```
files: |
Firmware_${{ steps.download.outputs.firmware_version }}.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}