ci: upload OTA package directly via package registry

This commit is contained in:
Hermes
2026-08-29 18:24:36 -05:00
parent 827dbc31ef
commit b856d82acd

View File

@@ -1,5 +1,9 @@
name: OTA build
permissions:
contents: read
packages: write
on:
push:
branches:
@@ -27,20 +31,49 @@ jobs:
- name: Build filesystem-aware OTA package
run: python scripts/build_ota_package.py
- name: Collect OTA artifacts
- name: Prepare direct OTA files
run: |
set -eu
mkdir -p dist/ota
find dist -maxdepth 1 -type f -name '*.tslpkg' -exec cp {} dist/ota/ \;
find .pio/build -type f \( -name 'firmware.bin' -o -name 'littlefs.bin' \) -exec cp {} dist/ota/ \;
if ! find dist/ota -maxdepth 1 -type f -name '*.tslpkg' | grep -q .; then
count=0
for file in dist/*.tslpkg; do
[ -f "$file" ] || continue
cp "$file" dist/ota/
count=$((count+1))
done
if [ "$count" -eq 0 ]; then
echo 'No .tslpkg OTA package was produced.' >&2
exit 1
fi
find dist/ota -maxdepth 1 -type f | sort
- name: Upload OTA artifacts
uses: actions/upload-artifact@v3
with:
name: ota-package
path: dist/ota/*
if-no-files-found: error
- name: Upload direct OTA files to Gitea Packages
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
set -eu
package_name="$(printf '%s' "${GITHUB_REPOSITORY#*/}" | tr '[:upper:]' '[:lower:]')-ota"
package_version="${GITHUB_SHA}"
base_url="${GITHUB_SERVER_URL}/api/packages/${GITHUB_REPOSITORY_OWNER}/generic/${package_name}/${package_version}"
for file in dist/ota/*; do
[ -f "$file" ] || continue
curl --fail --silent --show-error --user "${GITHUB_ACTOR}:${GITEA_TOKEN}" --upload-file "$file" "${base_url}/$(basename "$file")"
echo "Uploaded $(basename "$file")"
done
- name: Verify uploaded OTA files
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
set -eu
package_name="$(printf '%s' "${GITHUB_REPOSITORY#*/}" | tr '[:upper:]' '[:lower:]')-ota"
package_version="${GITHUB_SHA}"
curl --fail --silent --show-error --user "${GITHUB_ACTOR}:${GITEA_TOKEN}" "${GITHUB_SERVER_URL}/api/v1/packages/${GITHUB_REPOSITORY_OWNER}/generic/${package_name}/${package_version}/files" > /tmp/package-files.json
python3 - <<'PY'
import json
from pathlib import Path
files=json.loads(Path('/tmp/package-files.json').read_text())
assert files, 'no package files returned'
for item in files:
print(item.get('name') or item.get('file_name') or item)
PY