Replace runner workflow with direct binary release publisher via Gitea API
This commit is contained in:
@@ -1,36 +0,0 @@
|
|||||||
name: Release Binaries
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout Code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: '3.12'
|
|
||||||
|
|
||||||
- name: Install Build Dependencies
|
|
||||||
run: |
|
|
||||||
python -m pip install --upgrade pip
|
|
||||||
pip install pyinstaller -r requirements.txt
|
|
||||||
|
|
||||||
- name: Compile Standalone Binaries
|
|
||||||
run: |
|
|
||||||
python package_dist.py
|
|
||||||
|
|
||||||
- name: Publish Release (Binaries Only)
|
|
||||||
uses: https://gitea.com/actions/gitea-release-action@v1
|
|
||||||
with:
|
|
||||||
files: |
|
|
||||||
dist/*
|
|
||||||
api_key: ${{ secrets.TAG_TOKEN || github.token }}
|
|
||||||
token: ${{ secrets.TAG_TOKEN || github.token }}
|
|
||||||
@@ -266,18 +266,22 @@ This tests invalid token rejection, encrypted socket streaming, database persist
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Automated Releases via Gitea Actions
|
## Publishing Releases (Direct Binary Upload to Gitea)
|
||||||
|
|
||||||
The repository includes a automated Gitea workflow at [`.gitea/workflows/release.yml`](.gitea/workflows/release.yml) and a local packaging utility [`package_dist.py`](package_dist.py).
|
Since Gitea does not have active action runners, you can compile and upload releases directly from your workstation using [`upload_release.py`](upload_release.py):
|
||||||
|
|
||||||
### How to Trigger a Release
|
### One-Command Release Publishing
|
||||||
1. Ensure your Gitea repository has `TAG_TOKEN` configured under **Repository Settings $\rightarrow$ Actions $\rightarrow$ Secrets**.
|
|
||||||
2. Tag a release version and push it:
|
|
||||||
```bash
|
```bash
|
||||||
git tag v1.0.0
|
python upload_release.py --tag v1.0.0 --token <YOUR_GITEA_TOKEN>
|
||||||
git push origin v1.0.0
|
|
||||||
```
|
```
|
||||||
3. Gitea Actions will automatically:
|
*(Or set `set GITEA_TOKEN=...` in your terminal and simply run `python upload_release.py --tag v1.0.0`)*
|
||||||
- Run `package_dist.py` to package server, Windows client, and Linux client into `dist/`.
|
|
||||||
- Compute SHA-256 checksums (`SHA256SUMS.txt`).
|
### What It Does:
|
||||||
- Use `gitea-release-action` to publish the release with all attachments.
|
1. Calls `package_dist.py` to compile native binaries:
|
||||||
|
- `Win_Client.exe`
|
||||||
|
- `Server.exe`
|
||||||
|
- `Linux_Client.bin`
|
||||||
|
- `SHA256SUMS.txt`
|
||||||
|
2. Connects to `https://gitea.eibl.tech/api/v1/repos/me0nline/LOGAR`.
|
||||||
|
3. Creates the Gitea release for `v1.0.0` (or updates an existing release).
|
||||||
|
4. Uploads only the compiled binary assets as downloadable attachments.
|
||||||
|
|||||||
+10
-3
@@ -68,12 +68,19 @@ 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", required=True, help="Release tag name (e.g. v1.0.0)")
|
||||||
parser.add_argument("--token", required=True, help="Gitea Personal Access Token")
|
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()
|
||||||
|
|
||||||
|
token = args.token
|
||||||
|
if not token:
|
||||||
|
token = input("Enter Gitea Personal Access Token: ").strip()
|
||||||
|
if not token:
|
||||||
|
print("[!] Token is required.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if not args.skip_build:
|
if not args.skip_build:
|
||||||
print("[*] Assembling compiled binaries...")
|
print("[*] Assembling compiled binaries...")
|
||||||
package_dist.main()
|
package_dist.main()
|
||||||
@@ -84,13 +91,13 @@ 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, args.token)
|
release_id = create_or_get_release(args.url, args.repo, args.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)):
|
||||||
fpath = os.path.join(dist_dir, f)
|
fpath = os.path.join(dist_dir, f)
|
||||||
if os.path.isfile(fpath):
|
if os.path.isfile(fpath):
|
||||||
upload_file_to_release(args.url, args.repo, release_id, args.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/{args.tag}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user