build(release): docker and release corrections
Some checks failed
Build and Push LST Docker Image / docker (push) Has been cancelled

This commit is contained in:
2026-04-08 16:12:54 -05:00
parent beeccc6e8d
commit 103ae77e9f
2 changed files with 88 additions and 11 deletions

View File

@@ -9,6 +9,18 @@ jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
# Internal/origin Gitea URL. Do NOT use the Cloudflare fronted URL here.
# Examples:
# http://gitea.internal.lan:3000
# https://gitea-origin.yourdomain.local
GITEA_INTERNAL_URL: "https://git.tuffraid.net"
# Internal/origin registry host. Usually same host as above, but without protocol.
# Example:
# gitea.internal:3000
REGISTRY_HOST: "git.tuffraid.net"
steps: steps:
- name: Check out repository - name: Check out repository
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -16,12 +28,11 @@ jobs:
- name: Prepare release metadata - name: Prepare release metadata
shell: bash shell: bash
run: | run: |
set -euo pipefail
TAG="${GITHUB_REF_NAME:-${GITHUB_REF##refs/tags/}}" TAG="${GITHUB_REF_NAME:-${GITHUB_REF##refs/tags/}}"
VERSION="${TAG#v}" VERSION="${TAG#v}"
IMAGE_REGISTRY="${{ gitea.server_url }}" IMAGE_NAME="${REGISTRY_HOST}/${{ gitea.repository }}"
IMAGE_REGISTRY="${IMAGE_REGISTRY#http://}"
IMAGE_REGISTRY="${IMAGE_REGISTRY#https://}"
IMAGE_NAME="${IMAGE_REGISTRY}/${{ gitea.repository }}"
echo "TAG=$TAG" >> "$GITHUB_ENV" echo "TAG=$TAG" >> "$GITHUB_ENV"
echo "VERSION=$VERSION" >> "$GITHUB_ENV" echo "VERSION=$VERSION" >> "$GITHUB_ENV"
@@ -33,17 +44,23 @@ jobs:
echo "PRERELEASE=false" >> "$GITHUB_ENV" echo "PRERELEASE=false" >> "$GITHUB_ENV"
fi fi
echo "Resolved TAG=$TAG"
echo "Resolved VERSION=$VERSION"
echo "Resolved IMAGE_NAME=$IMAGE_NAME"
- name: Log in to Gitea container registry - name: Log in to Gitea container registry
shell: bash shell: bash
env: env:
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }} REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_TOKEN: ${{ secrets.RELEASE_TOKEN }} REGISTRY_TOKEN: ${{ secrets.RELEASE_TOKEN }}
run: | run: |
echo "$REGISTRY_TOKEN" | docker login "${IMAGE_NAME%%/*}" -u "$REGISTRY_USERNAME" --password-stdin set -euo pipefail
echo "$REGISTRY_TOKEN" | docker login "$REGISTRY_HOST" -u "$REGISTRY_USERNAME" --password-stdin
- name: Build Docker image - name: Build Docker image
shell: bash shell: bash
run: | run: |
set -euo pipefail
docker build \ docker build \
-t "$IMAGE_NAME:$TAG" \ -t "$IMAGE_NAME:$TAG" \
-t "$IMAGE_NAME:latest" \ -t "$IMAGE_NAME:latest" \
@@ -52,26 +69,37 @@ jobs:
- name: Push version tag - name: Push version tag
shell: bash shell: bash
run: | run: |
set -euo pipefail
docker push "$IMAGE_NAME:$TAG" docker push "$IMAGE_NAME:$TAG"
- name: Push latest tag - name: Push latest tag
if: ${{ !contains(env.TAG, '-') }} if: ${{ !contains(env.TAG, '-') }}
shell: bash shell: bash
run: | run: |
set -euo pipefail
docker push "$IMAGE_NAME:latest" docker push "$IMAGE_NAME:latest"
- name: Push prerelease channel tag - name: Push prerelease channel tag
if: ${{ contains(env.TAG, '-') }} if: ${{ contains(env.TAG, '-') }}
shell: bash shell: bash
env:
TAG: ${{ env.TAG }}
run: | run: |
set -euo pipefail
CHANNEL="${TAG#*-}" CHANNEL="${TAG#*-}"
CHANNEL="${CHANNEL%%.*}" CHANNEL="${CHANNEL%%.*}"
echo "Resolved prerelease channel: $CHANNEL"
docker tag "$IMAGE_NAME:$TAG" "$IMAGE_NAME:$CHANNEL" docker tag "$IMAGE_NAME:$TAG" "$IMAGE_NAME:$CHANNEL"
docker push "$IMAGE_NAME:$CHANNEL" docker push "$IMAGE_NAME:$CHANNEL"
- name: Extract matching CHANGELOG section - name: Extract matching CHANGELOG section
shell: bash shell: bash
env:
VERSION: ${{ env.VERSION }}
run: | run: |
set -euo pipefail
python3 - <<'PY' python3 - <<'PY'
import os import os
import re import re
@@ -86,8 +114,12 @@ jobs:
text = changelog_path.read_text(encoding="utf-8") text = changelog_path.read_text(encoding="utf-8")
# Matches headings like:
# ## [0.1.0]
# ## 0.1.0
# ## [0.1.0-alpha.1]
pattern = re.compile( pattern = re.compile(
rf"^##\s+\[?{re.escape(version)}\]?[^\n]*\n(.*?)(?=^##\s+\[?[0-9]|\Z)", rf"^##\s+\[?{re.escape(version)}\]?[^\n]*\n(.*?)(?=^##\s+\[?[^\n]+|\Z)",
re.MULTILINE | re.DOTALL, re.MULTILINE | re.DOTALL,
) )
@@ -101,16 +133,21 @@ jobs:
body = f"Release {version}" body = f"Release {version}"
Path("release_body.md").write_text(body + "\n", encoding="utf-8") Path("release_body.md").write_text(body + "\n", encoding="utf-8")
print("----- release_body.md -----")
print(body) print(body)
print("---------------------------")
PY PY
- name: Create Gitea release - name: Create Gitea release
shell: bash
env: env:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
GITEA_SERVER_URL: ${{ gitea.server_url }}
GITEA_REPOSITORY: ${{ gitea.repository }} GITEA_REPOSITORY: ${{ gitea.repository }}
shell: bash GITEA_INTERNAL_URL: ${{ env.GITEA_INTERNAL_URL }}
TAG: ${{ env.TAG }}
PRERELEASE: ${{ env.PRERELEASE }}
run: | run: |
set -euo pipefail
python3 - <<'PY' python3 - <<'PY'
import json import json
import os import os
@@ -120,13 +157,35 @@ jobs:
tag = os.environ["TAG"] tag = os.environ["TAG"]
prerelease = os.environ["PRERELEASE"].lower() == "true" prerelease = os.environ["PRERELEASE"].lower() == "true"
server_url = os.environ["GITEA_SERVER_URL"].rstrip("/") server_url = os.environ["GITEA_INTERNAL_URL"].rstrip("/")
repo = os.environ["GITEA_REPOSITORY"] repo = os.environ["GITEA_REPOSITORY"]
token = os.environ["RELEASE_TOKEN"] token = os.environ["RELEASE_TOKEN"]
body = Path("release_body.md").read_text(encoding="utf-8").strip() body = Path("release_body.md").read_text(encoding="utf-8").strip()
url = f"{server_url}/api/v1/repos/{repo}/releases" # Check if the release already exists for this tag
get_url = f"{server_url}/api/v1/repos/{repo}/releases/tags/{tag}"
get_req = urllib.request.Request(
get_url,
method="GET",
headers={
"Authorization": f"token {token}",
"Accept": "application/json",
"User-Agent": "lst-release-workflow/1.0",
},
)
existing_release = None
try:
with urllib.request.urlopen(get_req) as resp:
existing_release = json.loads(resp.read().decode("utf-8"))
except urllib.error.HTTPError as e:
if e.code != 404:
details = e.read().decode("utf-8", errors="replace")
print("Failed checking existing release:")
print(details)
raise
payload = { payload = {
"tag_name": tag, "tag_name": tag,
"name": tag, "name": tag,
@@ -136,14 +195,26 @@ jobs:
} }
data = json.dumps(payload).encode("utf-8") data = json.dumps(payload).encode("utf-8")
if existing_release:
release_id = existing_release["id"]
url = f"{server_url}/api/v1/repos/{repo}/releases/{release_id}"
method = "PATCH"
print(f"Release already exists for tag {tag}, updating release id {release_id}")
else:
url = f"{server_url}/api/v1/repos/{repo}/releases"
method = "POST"
print(f"No release exists for tag {tag}, creating a new one")
req = urllib.request.Request( req = urllib.request.Request(
url, url,
data=data, data=data,
method="POST", method=method,
headers={ headers={
"Authorization": f"token {token}", "Authorization": f"token {token}",
"Content-Type": "application/json", "Content-Type": "application/json",
"Accept": "application/json", "Accept": "application/json",
"User-Agent": "lst-release-workflow/1.0",
}, },
) )
@@ -152,6 +223,7 @@ jobs:
print(resp.read().decode("utf-8")) print(resp.read().decode("utf-8"))
except urllib.error.HTTPError as e: except urllib.error.HTTPError as e:
details = e.read().decode("utf-8", errors="replace") details = e.read().decode("utf-8", errors="replace")
print("Release create/update failed:")
print(details) print(details)
raise raise
PY PY

View File

@@ -11,6 +11,11 @@ services:
ports: ports:
#- "${VITE_PORT:-4200}:4200" #- "${VITE_PORT:-4200}:4200"
- "3600:3000" - "3600:3000"
dns:
- 10.193.9.250
- 10.193.9.251 # your internal DNS server
dns_search:
- alpla.net # or your internal search suffix
environment: environment:
- NODE_ENV=production - NODE_ENV=production
- LOG_LEVEL=info - LOG_LEVEL=info