From 4af6a0ca92c0f98672af0ff08efd0f309b8e4883 Mon Sep 17 00:00:00 2001 From: Wang Defa <61809431+wangdefaa@users.noreply.github.com> Date: Thu, 9 Jul 2026 19:29:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E7=89=88=E6=B3=A8=E5=85=A5=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=8E=E6=9E=84=E5=BB=BA=E6=97=B6=E9=97=B4=EF=BC=8C?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=20oci-go-sdk=2065.120.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/release.yml | 5 +++++ .github/workflows/release.yml | 7 +++++++ CHANGELOG.md | 1 - Dockerfile | 7 +++++-- README.md | 6 ++++-- go.mod | 8 ++++---- go.sum | 13 +++++++++++-- 7 files changed, 36 insertions(+), 11 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 616efd2..92f1e71 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -21,6 +21,7 @@ jobs: REGISTRY=$(echo "${{ gitea.server_url }}" | sed 's|https\?://||') echo "REGISTRY=${REGISTRY}" >> "$GITHUB_ENV" echo "IMAGE=${REGISTRY}/${{ gitea.repository }}" >> "$GITHUB_ENV" + echo "BUILD_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_ENV" - name: 下载前端最新 dist.zip 解压进嵌入目录 env: @@ -38,6 +39,8 @@ jobs: run: | docker buildx build --pull \ --platform linux/amd64,linux/arm64 \ + --build-arg VERSION=${{ gitea.ref_name }} \ + --build-arg BUILD_TIME=${BUILD_TIME} \ --target artifact \ --output type=local,dest=./output . mkdir -p assets @@ -51,6 +54,8 @@ jobs: echo "${TOKEN}" | docker login "${REGISTRY}" -u "${{ gitea.repository_owner }}" --password-stdin docker buildx build --pull \ --platform linux/amd64,linux/arm64 \ + --build-arg VERSION=${{ gitea.ref_name }} \ + --build-arg BUILD_TIME=${BUILD_TIME} \ -t "${IMAGE}:${{ gitea.ref_name }}" -t "${IMAGE}:latest" \ --push . diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f31363f..a7029df 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,8 +30,12 @@ jobs: - name: 构建双架构二进制(artifact stage 导出) run: | + BUILD_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ) + echo "BUILD_TIME=${BUILD_TIME}" >> "$GITHUB_ENV" docker buildx build --pull \ --platform linux/amd64,linux/arm64 \ + --build-arg VERSION=${{ github.ref_name }} \ + --build-arg BUILD_TIME=${BUILD_TIME} \ --target artifact \ --output type=local,dest=./output . mkdir -p assets @@ -67,6 +71,9 @@ jobs: platforms: linux/amd64,linux/arm64 push: true provenance: false + build-args: | + VERSION=${{ github.ref_name }} + BUILD_TIME=${{ env.BUILD_TIME }} tags: | ${{ env.IMAGE }}:${{ github.ref_name }} ${{ env.IMAGE }}:latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 95e9887..b497338 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,4 +16,3 @@ - 日志回传:OCI Audit 事件经 Connector Hub → Notifications HTTPS 订阅入库,一键创建链路 - 租户治理:IAM 用户/MFA/API Key、密码策略、SAML 身份提供商、通知收件人 - 登录安全:JWT + bcrypt、TOTP、OIDC/GitHub 外部登录、登录锁定、IP 限速、操作审计;Telegram 模板化通知 -- 交付形态:前端产物 go:embed 单文件、SQLite 默认(MySQL/PostgreSQL experimental)、Swagger 文档、Docker/Compose、多架构(amd64/arm64)Release 流水线 diff --git a/Dockerfile b/Dockerfile index 9f38bf7..66c0dcb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,9 +13,12 @@ WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . ./ -ARG TARGETOS TARGETARCH +# VERSION/BUILD_TIME 由 release 流程 --build-arg 传入,注入「设置·关于」页;本地构建缺省 dev +ARG TARGETOS TARGETARCH VERSION=dev BUILD_TIME="" RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH \ - go build -trimpath -ldflags "-s -w" -o /oci-portal-server ./cmd/server + go build -trimpath \ + -ldflags "-s -w -X oci-portal/internal/api.buildVersion=${VERSION} -X oci-portal/internal/api.buildTime=${BUILD_TIME}" \ + -o /oci-portal-server ./cmd/server # artifact: 仅承载二进制,供 buildx --output type=local 导出(release 流程用) FROM scratch AS artifact diff --git a/README.md b/README.md index 80d35ec..f450613 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,10 @@ DATA_KEY=$(openssl rand -hex 32) JWT_SECRET=$(openssl rand -hex 32) ADMIN_PASSWO # 1. 获取前端产物:从前端仓库 Release 下载 dist.zip(或本地 npm run build 后拷入) curl -fL -o dist.zip https://github.com/wangdefaa/oci-portal-dash/releases/latest/download/dist.zip rm -rf internal/webui/dist && mkdir -p internal/webui/dist && unzip -q dist.zip -d internal/webui/dist -# 2. 编译(免 CGO,可交叉编译) -CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o bin/oci-portal-server ./cmd/server +# 2. 编译(免 CGO,可交叉编译;-X 两项注入「设置·关于」页的版本与构建时间,可省略,省略则显示 dev) +CGO_ENABLED=0 go build -trimpath \ + -ldflags "-s -w -X oci-portal/internal/api.buildVersion=v0.0.1 -X oci-portal/internal/api.buildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ + -o bin/oci-portal-server ./cmd/server ``` > 注意:上述解压会覆盖仓库占位文件 `internal/webui/dist/index.html`,提交代码前勿把真实产物带入版本库。 diff --git a/go.mod b/go.mod index 87b3db2..44cfd3b 100644 --- a/go.mod +++ b/go.mod @@ -8,9 +8,12 @@ require ( github.com/glebarez/sqlite v1.11.0 github.com/golang-jwt/jwt/v5 v5.3.1 github.com/gorilla/websocket v1.5.3 - github.com/oracle/oci-go-sdk/v65 v65.119.0 + github.com/oracle/oci-go-sdk/v65 v65.120.0 github.com/pquerna/otp v1.5.0 github.com/robfig/cron/v3 v3.0.1 + github.com/swaggo/files v1.0.1 + github.com/swaggo/gin-swagger v1.6.1 + github.com/swaggo/swag v1.16.6 golang.org/x/crypto v0.53.0 golang.org/x/net v0.56.0 golang.org/x/oauth2 v0.36.0 @@ -69,9 +72,6 @@ require ( github.com/russross/blackfriday/v2 v2.0.1 // indirect github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect github.com/sony/gobreaker/v2 v2.4.0 // indirect - github.com/swaggo/files v1.0.1 // indirect - github.com/swaggo/gin-swagger v1.6.1 // indirect - github.com/swaggo/swag v1.16.6 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.3.1 // indirect github.com/urfave/cli/v2 v2.3.0 // indirect diff --git a/go.sum b/go.sum index b72b897..9f97458 100644 --- a/go.sum +++ b/go.sum @@ -29,6 +29,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw= github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= +github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= github.com/gin-gonic/gin v1.12.0 h1:b3YAbrZtnf8N//yjKeU2+MQsh2mY5htkZidOM7O0wG8= @@ -95,8 +97,11 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= @@ -114,8 +119,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/oracle/oci-go-sdk/v65 v65.119.0 h1:0u9ujtEACjk3Sr72bnbTyJlCquhJiiEceIyMDhN9zcs= -github.com/oracle/oci-go-sdk/v65 v65.119.0/go.mod h1:nv7HqsLpM/5aH66gu6JD1oqMftTxGfxo3ow1eYKPSmI= +github.com/oracle/oci-go-sdk/v65 v65.120.0 h1:qpGdts2Yleg6TdmtxXkL8MAnsASO+SOG+iG/Nd8wUGk= +github.com/oracle/oci-go-sdk/v65 v65.120.0/go.mod h1:Pzy+BpgkDesvGZXEHgslwhIYobHCPHg6wRta1mWnlqQ= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -131,6 +136,8 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= @@ -227,6 +234,8 @@ google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=