Use Python release publisher to bypass Node 16 Headers reference error in runner
Release Binaries / release (push) Successful in 3m3s
Release Binaries / release (push) Successful in 3m3s
This commit is contained in:
@@ -27,9 +27,10 @@ jobs:
|
|||||||
python3 package_dist.py
|
python3 package_dist.py
|
||||||
|
|
||||||
- name: Publish Release
|
- name: Publish Release
|
||||||
uses: https://gitea.com/actions/gitea-release-action@v1
|
env:
|
||||||
with:
|
GITEA_TOKEN: ${{ secrets.TAG_TOKEN || github.token }}
|
||||||
files: |
|
GITEA_SERVER_URL: ${{ github.server_url }}
|
||||||
dist/*
|
GITEA_REPOSITORY: ${{ github.repository }}
|
||||||
api_key: ${{ secrets.TAG_TOKEN || github.token }}
|
GITEA_REF_NAME: ${{ github.ref_name }}
|
||||||
token: ${{ secrets.TAG_TOKEN || github.token }}
|
run: |
|
||||||
|
python3 upload_release.py --skip-build
|
||||||
|
|||||||
+39
-9
@@ -7,13 +7,38 @@ import urllib.parse
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import package_dist
|
import package_dist
|
||||||
|
|
||||||
DEFAULT_GITEA_URL = "https://gitea.eibl.tech"
|
DEFAULT_GITEA_URL = os.environ.get("GITEA_SERVER_URL", "https://gitea.eibl.tech")
|
||||||
DEFAULT_REPO = "me0nline/LOGAR"
|
DEFAULT_REPO = os.environ.get("GITEA_REPOSITORY", "me0nline/LOGAR")
|
||||||
|
|
||||||
|
def get_existing_assets(base_url, repo, release_id, token):
|
||||||
|
url = f"{base_url}/api/v1/repos/{repo}/releases/{release_id}/assets"
|
||||||
|
req = urllib.request.Request(url, headers={"Authorization": f"token {token}", "Accept": "application/json"})
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(req) as resp:
|
||||||
|
return json.loads(resp.read().decode("utf-8"))
|
||||||
|
except Exception:
|
||||||
|
return []
|
||||||
|
|
||||||
|
def delete_asset(base_url, repo, release_id, asset_id, token):
|
||||||
|
url = f"{base_url}/api/v1/repos/{repo}/releases/{release_id}/assets/{asset_id}"
|
||||||
|
req = urllib.request.Request(url, method="DELETE", headers={"Authorization": f"token {token}"})
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(req) as resp:
|
||||||
|
pass
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
def upload_file_to_release(base_url, repo, release_id, token, file_path):
|
def upload_file_to_release(base_url, repo, release_id, token, file_path):
|
||||||
filename = os.path.basename(file_path)
|
filename = os.path.basename(file_path)
|
||||||
url = f"{base_url}/api/v1/repos/{repo}/releases/{release_id}/assets?name={urllib.parse.quote(filename)}"
|
|
||||||
|
|
||||||
|
# Clean up existing asset with same name if already present
|
||||||
|
existing_assets = get_existing_assets(base_url, repo, release_id, token)
|
||||||
|
for asset in existing_assets:
|
||||||
|
if asset.get("name") == filename:
|
||||||
|
print(f"[*] Removing existing asset '{filename}' (ID: {asset['id']})...")
|
||||||
|
delete_asset(base_url, repo, release_id, asset["id"], token)
|
||||||
|
|
||||||
|
url = f"{base_url}/api/v1/repos/{repo}/releases/{release_id}/assets?name={urllib.parse.quote(filename)}"
|
||||||
with open(file_path, "rb") as f:
|
with open(file_path, "rb") as f:
|
||||||
file_bytes = f.read()
|
file_bytes = f.read()
|
||||||
|
|
||||||
@@ -67,18 +92,23 @@ def create_or_get_release(base_url, repo, tag, token, title=None, notes=None):
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(description="Upload LOGAR compiled binaries directly to Gitea Release")
|
parser = argparse.ArgumentParser(description="Upload LOGAR compiled binaries directly to Gitea Release")
|
||||||
parser.add_argument("--tag", required=True, help="Release tag name (e.g. v1.0.0)")
|
parser.add_argument("--tag", default=os.environ.get("GITEA_REF_NAME"), help="Release tag name (e.g. v1.0.0)")
|
||||||
parser.add_argument("--token", default=os.environ.get("GITEA_TOKEN"), help="Gitea Personal Access Token (or set GITEA_TOKEN env var)")
|
parser.add_argument("--token", default=os.environ.get("GITEA_TOKEN"), help="Gitea Personal Access Token (or set GITEA_TOKEN env var)")
|
||||||
parser.add_argument("--url", default=DEFAULT_GITEA_URL, help="Base Gitea instance URL")
|
parser.add_argument("--url", default=DEFAULT_GITEA_URL, help="Base Gitea instance URL")
|
||||||
parser.add_argument("--repo", default=DEFAULT_REPO, help="Repository owner/name")
|
parser.add_argument("--repo", default=DEFAULT_REPO, help="Repository owner/name")
|
||||||
parser.add_argument("--skip-build", action="store_true", help="Skip running package_dist.py before upload")
|
parser.add_argument("--skip-build", action="store_true", help="Skip running package_dist.py before upload")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
tag = args.tag
|
||||||
|
if not tag:
|
||||||
|
tag = input("Enter tag name (e.g. v1.0.0): ").strip()
|
||||||
|
|
||||||
token = args.token
|
token = args.token
|
||||||
if not token:
|
if not token:
|
||||||
token = input("Enter Gitea Personal Access Token: ").strip()
|
token = input("Enter Gitea Token: ").strip()
|
||||||
if not token:
|
|
||||||
print("[!] Token is required.")
|
if not tag or not token:
|
||||||
|
print("[!] Tag and Token are required.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if not args.skip_build:
|
if not args.skip_build:
|
||||||
@@ -91,7 +121,7 @@ def main():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
print(f"[*] Connecting to Gitea: {args.url} (repo: {args.repo})...")
|
print(f"[*] Connecting to Gitea: {args.url} (repo: {args.repo})...")
|
||||||
release_id = create_or_get_release(args.url, args.repo, args.tag, token)
|
release_id = create_or_get_release(args.url, args.repo, tag, token)
|
||||||
|
|
||||||
print(f"[*] Uploading binary assets from '{dist_dir}'...")
|
print(f"[*] Uploading binary assets from '{dist_dir}'...")
|
||||||
for f in sorted(os.listdir(dist_dir)):
|
for f in sorted(os.listdir(dist_dir)):
|
||||||
@@ -99,7 +129,7 @@ def main():
|
|||||||
if os.path.isfile(fpath):
|
if os.path.isfile(fpath):
|
||||||
upload_file_to_release(args.url, args.repo, release_id, token, fpath)
|
upload_file_to_release(args.url, args.repo, release_id, token, fpath)
|
||||||
|
|
||||||
print(f"\n[+] Release successfully published with binary assets: {args.url}/{args.repo}/releases/tag/{args.tag}")
|
print(f"\n[+] Release successfully published with binary assets: {args.url}/{args.repo}/releases/tag/{tag}")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
Reference in New Issue
Block a user