chore: cut GitHub, make vrcx Gitea-only
- relink README/CHANGELOG/pyproject to git.engelgardt23.ru; drop github build badge - update-check + clone URL point to Gitea; rename GITHUB_REPO -> REPO - port CI to .gitea/workflows (self-contained, publishes Gitea release) - remove .github (workflow + issue templates)
This commit is contained in:
@@ -8,24 +8,30 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
|
# Self-contained: no external (GitHub-hosted) actions. Runs on a self-hosted
|
||||||
|
# Windows runner (label `windows`) that already has Python 3.12 on PATH.
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: windows-latest
|
runs-on: windows
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Checkout repository at tag
|
||||||
|
shell: pwsh
|
||||||
- name: Set up Python
|
env:
|
||||||
uses: actions/setup-python@v5
|
TOKEN: ${{ github.token }}
|
||||||
with:
|
run: |
|
||||||
python-version: '3.12'
|
$base = "${{ github.server_url }}" -replace '^https://', ''
|
||||||
|
$url = "https://oauth2:$env:TOKEN@$base/${{ github.repository }}.git"
|
||||||
|
git clone --depth 1 --branch "$env:GITHUB_REF_NAME" $url .
|
||||||
|
|
||||||
- name: Install build dependencies
|
- name: Install build dependencies
|
||||||
run: python -m pip install --upgrade pip pyinstaller rich paramiko
|
run: python -m pip install --upgrade pip pyinstaller rich paramiko
|
||||||
|
|
||||||
- name: Resolve version from tag
|
- name: Resolve version from tag
|
||||||
id: ver
|
id: ver
|
||||||
shell: bash
|
shell: pwsh
|
||||||
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
run: |
|
||||||
|
$v = "$env:GITHUB_REF_NAME" -replace '^v', ''
|
||||||
|
"version=$v" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
|
||||||
|
|
||||||
- name: Build executable
|
- name: Build executable
|
||||||
run: python -m PyInstaller --onefile --console --name vrcx --icon dev/assets/icon.ico --paths dev/src dev/vrcx-launcher.py
|
run: python -m PyInstaller --onefile --console --name vrcx --icon dev/assets/icon.ico --paths dev/src dev/vrcx-launcher.py
|
||||||
@@ -75,10 +81,19 @@ jobs:
|
|||||||
"$hash $zip" | Out-File -FilePath "$zip.sha256" -Encoding ASCII -NoNewline
|
"$hash $zip" | Out-File -FilePath "$zip.sha256" -Encoding ASCII -NoNewline
|
||||||
Get-Content "$zip.sha256"
|
Get-Content "$zip.sha256"
|
||||||
|
|
||||||
- name: Create release
|
- name: Publish Gitea release
|
||||||
uses: softprops/action-gh-release@v2
|
shell: pwsh
|
||||||
with:
|
env:
|
||||||
files: |
|
TOKEN: ${{ github.token }}
|
||||||
vrcx-portable-v${{ steps.ver.outputs.version }}.zip
|
run: |
|
||||||
vrcx-portable-v${{ steps.ver.outputs.version }}.zip.sha256
|
$ver = '${{ steps.ver.outputs.version }}'
|
||||||
generate_release_notes: true
|
$tag = "v$ver"
|
||||||
|
$api = "${{ github.server_url }}/api/v1/repos/${{ github.repository }}"
|
||||||
|
$hdr = @{ Authorization = "token $env:TOKEN" }
|
||||||
|
$body = @{ tag_name = $tag; name = $tag; draft = $false; prerelease = $false } | ConvertTo-Json
|
||||||
|
$rel = Invoke-RestMethod -Method Post -Uri "$api/releases" -Headers $hdr -ContentType 'application/json' -Body $body
|
||||||
|
$rid = $rel.id
|
||||||
|
foreach ($f in @("vrcx-portable-v$ver.zip", "vrcx-portable-v$ver.zip.sha256")) {
|
||||||
|
curl.exe -s -H "Authorization: token $env:TOKEN" -F "attachment=@$f" "$api/releases/$rid/assets?name=$f" | Out-Null
|
||||||
|
Write-Host "uploaded $f"
|
||||||
|
}
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
name: Bug report
|
|
||||||
description: Something doesn't work as expected
|
|
||||||
labels: ["bug"]
|
|
||||||
body:
|
|
||||||
- type: input
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: Version
|
|
||||||
description: Visible in the startup banner.
|
|
||||||
placeholder: v0.1.0
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: steps
|
|
||||||
attributes:
|
|
||||||
label: Steps to reproduce
|
|
||||||
placeholder: |
|
|
||||||
1. ...
|
|
||||||
2. ...
|
|
||||||
3. ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: expected
|
|
||||||
attributes:
|
|
||||||
label: What you expected to happen
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: actual
|
|
||||||
attributes:
|
|
||||||
label: What actually happened
|
|
||||||
description: Paste any error output verbatim. Screenshots are welcome.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: bmc_fw
|
|
||||||
attributes:
|
|
||||||
label: BMC firmware version (if relevant)
|
|
||||||
placeholder: e.g. YADRO VEGMAN Sx20 BMC Firmware v1.8r1389cd
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: extra
|
|
||||||
attributes:
|
|
||||||
label: Anything else?
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Security vulnerability
|
|
||||||
url: https://github.com/Engelgardt23/vrcx/security/advisories/new
|
|
||||||
about: Please report security issues privately via GitHub Security Advisories — not as a public issue.
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
name: Feature request
|
|
||||||
description: Suggest a new feature or an improvement
|
|
||||||
labels: ["enhancement"]
|
|
||||||
body:
|
|
||||||
- type: textarea
|
|
||||||
id: motivation
|
|
||||||
attributes:
|
|
||||||
label: What's the use case?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: proposal
|
|
||||||
attributes:
|
|
||||||
label: Proposed solution
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: alternatives
|
|
||||||
attributes:
|
|
||||||
label: Alternatives considered
|
|
||||||
+3
-3
@@ -29,8 +29,8 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and
|
|||||||
- Multi-BMC parallel collection over SSH, with the YADRO BMC CLI command set + raw shell + `cat` + `journalctl` + Redfish.
|
- Multi-BMC parallel collection over SSH, with the YADRO BMC CLI command set + raw shell + `cat` + `journalctl` + Redfish.
|
||||||
- Output structure 1:1 with VRC v1.1b — same per-host `<serial>_bmcdump_<datetime>` layout inside a single session `tar.gz`.
|
- Output structure 1:1 with VRC v1.1b — same per-host `<serial>_bmcdump_<datetime>` layout inside a single session `tar.gz`.
|
||||||
- Full-screen rich-based TUI: per-host progress table + rolling events panel.
|
- Full-screen rich-based TUI: per-host progress table + rolling events panel.
|
||||||
- Auto-update check on startup against GitHub `/releases/latest`.
|
- Auto-update check on startup against the Gitea instance `/releases/latest`.
|
||||||
- MIT licensed.
|
- MIT licensed.
|
||||||
|
|
||||||
[Unreleased]: https://github.com/Engelgardt23/vrcx/compare/v0.1.0...HEAD
|
[Unreleased]: https://git.engelgardt23.ru/engel/vrcx/compare/v0.1.0...HEAD
|
||||||
[0.1.0]: https://github.com/Engelgardt23/vrcx/releases/tag/v0.1.0
|
[0.1.0]: https://git.engelgardt23.ru/engel/vrcx/releases/tag/v0.1.0
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# vrcx
|
# vrcx
|
||||||
|
|
||||||
[](https://github.com/Engelgardt23/vrcx/releases/latest)
|
[](https://git.engelgardt23.ru/engel/vrcx/releases/latest)
|
||||||
[](https://github.com/Engelgardt23/vrcx/actions)
|
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](#)
|
[](#)
|
||||||
|
|
||||||
@@ -22,7 +21,7 @@ The original VRC only touches the BMC. In real incidents support almost always a
|
|||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
Grab the latest release: [**releases page**](https://github.com/Engelgardt23/vrcx/releases/latest).
|
Grab the latest release: [**releases page**](https://git.engelgardt23.ru/engel/vrcx/releases/latest).
|
||||||
The asset is `vrcx-portable-vX.Y.Z.zip`.
|
The asset is `vrcx-portable-vX.Y.Z.zip`.
|
||||||
|
|
||||||
## Run
|
## Run
|
||||||
@@ -86,7 +85,7 @@ Adding a new artefact = one line in the relevant table.
|
|||||||
## Build from source
|
## Build from source
|
||||||
|
|
||||||
```
|
```
|
||||||
git clone https://github.com/Engelgardt23/vrcx.git
|
git clone https://git.engelgardt23.ru/engel/vrcx.git
|
||||||
cd vrcx
|
cd vrcx
|
||||||
python -m pip install rich paramiko pyinstaller
|
python -m pip install rich paramiko pyinstaller
|
||||||
python -m PyInstaller --onefile --console --name vrcx --icon dev/assets/icon.ico --paths dev/src dev/vrcx-launcher.py
|
python -m PyInstaller --onefile --console --name vrcx --icon dev/assets/icon.ico --paths dev/src dev/vrcx-launcher.py
|
||||||
|
|||||||
+3
-4
@@ -1,7 +1,6 @@
|
|||||||
# vrcx
|
# vrcx
|
||||||
|
|
||||||
[](https://github.com/Engelgardt23/vrcx/releases/latest)
|
[](https://git.engelgardt23.ru/engel/vrcx/releases/latest)
|
||||||
[](https://github.com/Engelgardt23/vrcx/actions)
|
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](#)
|
[](#)
|
||||||
|
|
||||||
@@ -22,7 +21,7 @@
|
|||||||
|
|
||||||
## Скачать
|
## Скачать
|
||||||
|
|
||||||
Последний релиз: [**страница релизов**](https://github.com/Engelgardt23/vrcx/releases/latest).
|
Последний релиз: [**страница релизов**](https://git.engelgardt23.ru/engel/vrcx/releases/latest).
|
||||||
Архив: `vrcx-portable-vX.Y.Z.zip`.
|
Архив: `vrcx-portable-vX.Y.Z.zip`.
|
||||||
|
|
||||||
## Запуск
|
## Запуск
|
||||||
@@ -86,7 +85,7 @@ out/<ДДММГГГГ_ЧЧММСС>.tar.gz ← готовый бандл дл
|
|||||||
## Сборка из исходников
|
## Сборка из исходников
|
||||||
|
|
||||||
```
|
```
|
||||||
git clone https://github.com/Engelgardt23/vrcx.git
|
git clone https://git.engelgardt23.ru/engel/vrcx.git
|
||||||
cd vrcx
|
cd vrcx
|
||||||
python -m pip install rich paramiko pyinstaller
|
python -m pip install rich paramiko pyinstaller
|
||||||
python -m PyInstaller --onefile --console --name vrcx --icon dev/assets/icon.ico --paths dev/src dev/vrcx-launcher.py
|
python -m PyInstaller --onefile --console --name vrcx --icon dev/assets/icon.ico --paths dev/src dev/vrcx-launcher.py
|
||||||
|
|||||||
+2
-2
@@ -13,8 +13,8 @@ dependencies = ["rich>=13", "paramiko>=3"]
|
|||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
Homepage = "https://github.com/Engelgardt23/vrcx"
|
Homepage = "https://git.engelgardt23.ru/engel/vrcx"
|
||||||
Issues = "https://github.com/Engelgardt23/vrcx/issues"
|
Issues = "https://git.engelgardt23.ru/engel/vrcx/issues"
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
vrcx = "vrcx.app:main"
|
vrcx = "vrcx.app:main"
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ The single source of truth for the project version. Bump this before tagging
|
|||||||
a release; CI reads the tag, the code reads this constant."""
|
a release; CI reads the tag, the code reads this constant."""
|
||||||
|
|
||||||
__version__ = "0.2.0-dev"
|
__version__ = "0.2.0-dev"
|
||||||
GITHUB_REPO = "engel/vrcx" # на Forgejo (git.engelgardt23.ru)
|
REPO = "engel/vrcx" # self-hosted Gitea (git.engelgardt23.ru)
|
||||||
|
|||||||
+2
-2
@@ -19,7 +19,7 @@ from rich.console import Console
|
|||||||
from rich.prompt import Confirm, Prompt
|
from rich.prompt import Confirm, Prompt
|
||||||
from rich.table import Table
|
from rich.table import Table
|
||||||
|
|
||||||
from . import __version__, GITHUB_REPO
|
from . import __version__, REPO
|
||||||
from .bmc import BmcSession
|
from .bmc import BmcSession
|
||||||
from .collector import collect_host
|
from .collector import collect_host
|
||||||
from .config import load_config, Config
|
from .config import load_config, Config
|
||||||
@@ -170,7 +170,7 @@ def _print_header(console: Console) -> None:
|
|||||||
title = f"[bold cyan]vrcx v{__version__}[/] {t('tagline')}"
|
title = f"[bold cyan]vrcx v{__version__}[/] {t('tagline')}"
|
||||||
latest = check_for_update()
|
latest = check_for_update()
|
||||||
if latest:
|
if latest:
|
||||||
release_url = f"https://git.engelgardt23.ru/{GITHUB_REPO}/releases/latest"
|
release_url = f"https://git.engelgardt23.ru/{REPO}/releases/latest"
|
||||||
notice = t("update_available", tag=latest)
|
notice = t("update_available", tag=latest)
|
||||||
header = Table.grid(expand=True)
|
header = Table.grid(expand=True)
|
||||||
header.add_column(justify="left", ratio=1)
|
header.add_column(justify="left", ratio=1)
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
"""
|
"""
|
||||||
Auto-update check.
|
Auto-update check.
|
||||||
|
|
||||||
On startup, ask GitHub for the latest release tag. If it's newer than the
|
On startup, ask the Gitea instance for the latest release tag. If it's newer
|
||||||
local `__version__`, return the tag string — the caller renders a clickable
|
than the local `__version__`, return the tag string — the caller renders a
|
||||||
hint next to the title. Silent on any error (offline, rate-limit, etc.).
|
clickable hint next to the title. Silent on any error (offline, rate-limit, etc.).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
import json
|
import json
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
from . import __version__, GITHUB_REPO
|
from . import __version__, REPO
|
||||||
|
|
||||||
|
|
||||||
def _parse_version(s: str) -> tuple[int, int, int]:
|
def _parse_version(s: str) -> tuple[int, int, int]:
|
||||||
@@ -29,7 +29,7 @@ def check_for_update() -> str | None:
|
|||||||
the currently running version. Returns None when up-to-date, offline,
|
the currently running version. Returns None when up-to-date, offline,
|
||||||
rate-limited or on any error — caller decides how to render."""
|
rate-limited or on any error — caller decides how to render."""
|
||||||
try:
|
try:
|
||||||
url = f"https://git.engelgardt23.ru/api/v1/repos/{GITHUB_REPO}/releases/latest"
|
url = f"https://git.engelgardt23.ru/api/v1/repos/{REPO}/releases/latest"
|
||||||
req = urllib.request.Request(url, headers={
|
req = urllib.request.Request(url, headers={
|
||||||
"User-Agent": f"vrcx/{__version__}",
|
"User-Agent": f"vrcx/{__version__}",
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user