ci(gitea): automate development delivery and manual releases

This commit is contained in:
eezd committed 2026-10-27 20:17:30 +08:00
1 parent 0d1e63b212
commit 0eb1b4696a
5 files changed
+283 -352

No files matched your search

+3 -3
View File
@@ -12,7 +12,7 @@ Native downloads now cover five platforms:
- Platform-specific disk space queries, temporary storage and restore-record publication support Windows backup/restore.
- Windows paths reject device names, alternate data streams and filename aliases at note/import/backup boundaries.
- One release workflow tests each program on a native runner before packaging. Docker remains Linux amd64/arm64 and uses those tested programs.
- One Gitea release workflow checks the project and cross-builds all five targets. Linux amd64 runs native lifecycle tests; Windows, macOS and Linux arm64 remain unverified at runtime. Docker remains Linux amd64/arm64 and uses the same packaged programs.
- Archives contain the CLI web server and licenses; no desktop GUI, installer or code signing is included. macOS may require manual approval for the unsigned download.
### Try or install
@@ -22,8 +22,8 @@ Native downloads now cover five platforms:
- Verify downloads using `SHA256SUMS`, then follow the [deployment guide](https://github.com/eezd/RawMark/blob/v0.1.1/docs/deployment.md).
- [English README](https://github.com/eezd/RawMark/blob/v0.1.1/README.md) · [中文说明](https://github.com/eezd/RawMark/blob/v0.1.1/README.zh-CN.md).
Preserve your complete data directory and mount configuration when upgrading, and back up first. No database migration or cleanup SQL is required. Existing v0.1.0 downloads remain available.
Preserve your complete data directory and mount configuration when upgrading, and back up first. No historical cleanup SQL is required. This file is a release draft; availability depends on a completed formal release.
---
新增 Windows amd64、macOS Apple Silicon 和 Intel 原生程序,保留 Linux 双架构程序与 Docker 镜像。五个平台均在各自原生 runner 测试后打包,由同一个发布工作流完成。原生程序是网页服务端,不含桌面窗口、安装器或签名;macOS 首次运行可能需要手动允许。请先核对 SHA256SUMS,再参考部署指南。升级前备份并保留完整数据目录;无需执行数据库迁移或历史清理,v0.1.0 附件保持不变。
新增 Windows amd64、macOS Apple Silicon 和 Intel 原生程序,保留 Linux 双架构程序与 Docker 镜像。同一个 Gitea 发布工作流完成检查与交叉构建;Linux amd64 执行原生生命周期测试,Windows、macOS 和 Linux arm64 尚未完成原生运行验收。原生程序是网页服务端,不含桌面窗口、安装器或签名;macOS 首次运行可能需要手动允许。请先核对 SHA256SUMS,再参考部署指南。升级前备份并保留完整数据目录,不重跑历史清理 SQL。此文件为发布草稿,产物是否可用以完整正式发布为准。
-232
View File
@@ -1,232 +0,0 @@
name: Release
on:
push:
tags: ['v*']
permissions:
contents: read
concurrency:
group: rawmark-release
cancel-in-progress: false
jobs:
check:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Validate release tag
env:
RELEASE_TAG: ${{ github.ref_name }}
run: |
version="$(cat VERSION)"
[[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]
test "$RELEASE_TAG" = "v$version"
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: '24'
- name: Install frontend dependencies
run: |
corepack enable
corepack prepare [email protected] --activate
pnpm -C web install --frozen-lockfile --registry=https://registry.npmjs.org
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version-file: go.mod
- name: Check and build
run: |
pnpm -C web lint:check
pnpm -C web typecheck
pnpm -C web test
pnpm -C web build
pnpm -C web build:demo
go vet -tags dev ./...
go test ./internal/...
go test -tags dev ./web ./cmd/rawmark
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: frontend
path: web/dist
if-no-files-found: error
retention-days: 3
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
path: web/dist-demo
native:
needs: check
strategy:
fail-fast: false
max-parallel: 2
matrix:
include:
- os: linux
arch: amd64
runner: ubuntu-24.04
extension: ''
- os: linux
arch: arm64
runner: ubuntu-24.04-arm
extension: ''
- os: windows
arch: amd64
runner: windows-2025
extension: '.exe'
- os: darwin
arch: arm64
runner: macos-15
extension: ''
- os: darwin
arch: amd64
runner: macos-15-intel
extension: ''
runs-on: ${{ matrix.runner }}
timeout-minutes: 30
defaults:
run:
shell: bash
env:
CGO_ENABLED: '0'
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version-file: go.mod
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
name: frontend
path: web/dist
- name: Build and smoke-test native binary
env:
EXE: ${{ matrix.extension }}
run: |
mkdir -p package/licenses
go build -trimpath -ldflags="-s -w -X main.releaseVersion=$(cat VERSION)" -o "package/rawmark$EXE" ./cmd/rawmark
go vet ./...
go test ./internal/... ./cmd/rawmark ./web
python scripts/smoke-release.py "package/rawmark$EXE"
- name: Package download
env:
ARCH: ${{ matrix.arch }}
TARGET_OS: ${{ matrix.os }}
run: |
cp LICENSE package/
cp web/LICENSE package/licenses/vue3-starter-MIT.txt
cp web/src/common/appearance/fonts/*-OFL.txt package/licenses/
cp web/src/common/appearance/fonts/maple/LICENSE.txt package/licenses/Maple-Mono-OFL.txt
mkdir downloads
python scripts/package-release.py "$TARGET_OS" "$ARCH"
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: native-${{ matrix.os }}-${{ matrix.arch }}
path: downloads/*
if-no-files-found: error
retention-days: 3
image:
needs: native
runs-on: ubuntu-24.04
timeout-minutes: 20
permissions:
contents: read
packages: write
outputs:
digest: ${{ steps.build.outputs.digest }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
pattern: native-linux-*
path: downloads
merge-multiple: true
- name: Prepare tested binaries
run: |
mkdir -p image/linux/amd64 image/linux/arm64 image/data
for arch in amd64 arm64; do
tar -xzf "downloads/rawmark_$(cat VERSION)_linux_$arch.tar.gz" -C "image/linux/$arch"
done
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
- uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Publish version image
id: build
uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
with:
context: image
file: deploy/Dockerfile.release
platforms: linux/amd64,linux/arm64
push: true
tags: ghcr.io/eezd/rawmark:${{ github.ref_name }}
labels: |
org.opencontainers.image.source=https://github.com/eezd/RawMark
org.opencontainers.image.version=${{ github.ref_name }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.licenses=MIT
- name: Smoke-test packaged image
env:
RELEASE_TAG: ${{ github.ref_name }}
run: |
image="ghcr.io/eezd/rawmark:$RELEASE_TAG"
test "$(docker run --rm "$image" --version)" = "RawMark $(cat VERSION)"
trap 'docker rm -f rawmark-smoke; docker volume rm rawmark-smoke-data' EXIT
docker run -d --name rawmark-smoke -v rawmark-smoke-data:/data -p 127.0.0.1:21876:8080 "$image"
for attempt in {1..60}; do
status="$(docker inspect --format '{{.State.Health.Status}}' rawmark-smoke)"
if [ "$status" = healthy ]; then break; fi
if [ "$status" = unhealthy ]; then docker logs rawmark-smoke; exit 1; fi
sleep 1
done
test "$status" = healthy
test "$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:21876/api/v1/tree)" = 401
docker exec rawmark-smoke /rawmark healthcheck
pages:
needs: image
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
- uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1
id: deployment
release:
needs: [image, pages]
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
contents: write
packages: write
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
pattern: native-*
path: downloads
merge-multiple: true
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
- uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Publish release and stable image tags
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ github.ref_name }}
IMAGE_DIGEST: ${{ needs.image.outputs.digest }}
run: |
(cd downloads && sha256sum *.tar.gz *.zip > SHA256SUMS)
gh release create "$RELEASE_TAG" downloads/* --verify-tag --title "RawMark $RELEASE_TAG" --notes-file .github/release-notes.md --latest
docker buildx imagetools create --tag "ghcr.io/eezd/rawmark:$(cat VERSION)" --tag ghcr.io/eezd/rawmark:latest "ghcr.io/eezd/rawmark@$IMAGE_DIGEST"