ci(gitea): automate development delivery and manual releases
This commit is contained in:
1 parent
0d1e63b212
commit
0eb1b4696a
5 files changed
+283
-352
No files matched your search
@@ -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。此文件为发布草稿,产物是否可用以完整正式发布为准。
|
||||
@@ -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"
|
||||
Reference in new issue
Block a user