diff --git a/.gitea/workflows/build-release.yml b/.gitea/workflows/build-release.yml index b357293..ac90ff9 100644 --- a/.gitea/workflows/build-release.yml +++ b/.gitea/workflows/build-release.yml @@ -10,6 +10,7 @@ on: permissions: contents: write + packages: write jobs: build-and-release: @@ -87,7 +88,7 @@ jobs: cp ".pio/build/${PIO_ENV}/firmware.bin" "dist/OpenMQTTGateway-${PIO_ENV}-${TAG_NAME}.bin" ls -lA dist - - name: Create Gitea Release and Upload Binaries + - name: Create Gitea Release and Publish Package env: GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }} PIO_ENV: ${{ steps.prep.outputs.pio_env }} @@ -103,6 +104,7 @@ jobs: server_url = os.environ["GITHUB_SERVER_URL"].rstrip("/") repo = os.environ["GITHUB_REPOSITORY"] + owner, repo_name = repo.split("/", 1) token = os.environ["GITEA_TOKEN"] tag_name = os.environ["TAG_NAME"] sha = os.environ["GITHUB_SHA"] @@ -153,7 +155,10 @@ jobs: release_id = data["id"] print(f"Created release ID {release_id} for tag {tag_name}") - # Upload firmware binaries in dist/ + # Upload firmware binary to Release and Gitea Package Registry + package_name = f"{repo_name}-{pio_env}" + pkg_base = f"{server_url}/api/v1/packages/{owner}/generic/{package_name}/{tag_name}" + for filename in sorted(os.listdir("dist")): if filename in existing_assets: del_req = urllib.request.Request( @@ -163,12 +168,33 @@ jobs: ) urllib.request.urlopen(del_req).close() filepath = os.path.join("dist", filename) - print(f"Uploading {filename}...") + print(f"Uploading {filename} to Release...") subprocess.run([ "curl", "--fail", "-sS", "-X", "POST", "-H", f"Authorization: token {token}", "-F", f"attachment=@{filepath}", f"{api_base}/releases/{release_id}/assets?name={filename}" ], check=True) - print(f"Uploaded {filename} successfully.") + print(f"Uploaded {filename} to Release successfully.") + + # Publish to Gitea Generic Package Registry (delete existing file first if re-running) + pkg_file_url = f"{pkg_base}/{filename}" + try: + del_pkg_req = urllib.request.Request( + pkg_file_url, + headers={"Authorization": f"token {token}"}, + method="DELETE", + ) + urllib.request.urlopen(del_pkg_req).close() + except urllib.error.HTTPError as e: + if e.code != 404: + raise + print(f"Publishing {filename} to Gitea Package {package_name}/{tag_name}...") + subprocess.run([ + "curl", "--fail", "-sS", "-X", "PUT", + "-H", f"Authorization: token {token}", + "--upload-file", filepath, + pkg_file_url, + ], check=True) + print(f"Published {filename} to Gitea Package Registry successfully.") EOF