chore(构建变动): 隔离WASM资源并完善构建
build.yaml / build (push) Successful in 45s

This commit is contained in:
xiaoqidun committed 2026-10-17 19:26:09 +08:00
1 parent eedfa72721
commit dc59aefeb7
5 files changed
+50 -21

No files matched your search

+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
set -e set -e
export TZ=Asia/Shanghai export TZ=Asia/Shanghai
GOOS=js GOARCH=wasm CGO_ENABLED=0 go build -o assets/webui/ofdgo.wasm -trimpath -ldflags "-s -w -buildid=" ./cmd/webui/wasm.go GOOS=js GOARCH=wasm CGO_ENABLED=0 go build -o assets/webui/wasm/ofdgo.wasm -trimpath -ldflags "-s -w -buildid=" ./cmd/webui/wasm.go
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o main -trimpath -ldflags "-s -w -buildid=" ./cmd/webui/webui.go GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o main -trimpath -ldflags "-s -w -buildid=" ./cmd/webui/webui.go
+1 -1
View File
@@ -53,7 +53,7 @@ docker run -d -p 80:80 ccr.ccs.tencentyun.com/xiaoqidun/ofdgo:latest
:: 1. 编译OFDGo WASM :: 1. 编译OFDGo WASM
set GOOS=js set GOOS=js
set GOARCH=wasm set GOARCH=wasm
go build -o assets/webui/ofdgo.wasm -trimpath -ldflags "-s -w -buildid=" ./cmd/webui/wasm.go go build -o assets/webui/wasm/ofdgo.wasm -trimpath -ldflags "-s -w -buildid=" ./cmd/webui/wasm.go
:: 2. 编译OFDGo WebUI :: 2. 编译OFDGo WebUI
set GOOS=windows set GOOS=windows
set GOARCH=amd64 set GOARCH=amd64
+2 -18
View File
@@ -14,30 +14,14 @@
package webuiassets package webuiassets
import ( import "embed"
"crypto/sha256"
"embed"
"encoding/hex"
)
// FS WebUI嵌入静态文件 // FS WebUI嵌入静态文件
// //
//go:embed index.html ofdgo.css ofdgo.ico ofdgo.js ofdgo.json ofdgo.png ofdgo.svg ofdgo.wasm ofdgo_edit.js ofdgo_font.js ofdgo_host.js ofdgo_wasm.js ofdgo_work.js wasm_exec.js //go:embed index.html ofdgo.css ofdgo.ico ofdgo.js ofdgo.json ofdgo.png ofdgo.svg ofdgo_edit.js ofdgo_font.js ofdgo_host.js ofdgo_wasm.js ofdgo_work.js wasm_exec.js
var FS embed.FS var FS embed.FS
// NativeFS WebView嵌入静态文件 // NativeFS WebView嵌入静态文件
// //
//go:embed index.html ofdgo.css ofdgo.ico ofdgo.js ofdgo.json ofdgo.png ofdgo.svg ofdgo_edit.js ofdgo_font.js ofdgo_host.js //go:embed index.html ofdgo.css ofdgo.ico ofdgo.js ofdgo.json ofdgo.png ofdgo.svg ofdgo_edit.js ofdgo_font.js ofdgo_host.js
var NativeFS embed.FS var NativeFS embed.FS
// Checksum 计算WebUI嵌入资源校验值
// 返回: string SHA-256十六进制校验值
func Checksum() string {
hash := sha256.New()
entries, _ := FS.ReadDir(".")
for _, entry := range entries {
data, _ := FS.ReadFile(entry.Name())
hash.Write(data)
}
return hex.EncodeToString(hash.Sum(nil))
}
+22
View File
@@ -0,0 +1,22 @@
// Copyright 2025-2026 肖其顿 (XIAO QI DUN)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package wasmassets
import "embed"
// FS WebUI嵌入WASM引擎
//
//go:embed ofdgo.wasm
var FS embed.FS
+24 -1
View File
@@ -18,6 +18,9 @@ package main
import ( import (
"bytes" "bytes"
"crypto/sha256"
"embed"
"encoding/hex"
"flag" "flag"
"fmt" "fmt"
"net/http" "net/http"
@@ -25,6 +28,7 @@ import (
"time" "time"
"github.com/xiaoqidun/ofdgo/assets/webui" "github.com/xiaoqidun/ofdgo/assets/webui"
"github.com/xiaoqidun/ofdgo/assets/webui/wasm"
) )
func main() { func main() {
@@ -39,12 +43,17 @@ func main() {
// 返回: http.Handler HTTP处理器 // 返回: http.Handler HTTP处理器
func serveWebUI() http.Handler { func serveWebUI() http.Handler {
files := http.FileServerFS(webuiassets.FS) files := http.FileServerFS(webuiassets.FS)
checksum := webuiassets.Checksum() wasm := http.FileServerFS(wasmassets.FS)
checksum := resourceChecksum()
serviceWorker, _ := webuiassets.FS.ReadFile("ofdgo_work.js") serviceWorker, _ := webuiassets.FS.ReadFile("ofdgo_work.js")
serviceWorker = append([]byte(fmt.Sprintf("const BUNDLE_CHECKSUM = %q;\n", checksum)), serviceWorker...) serviceWorker = append([]byte(fmt.Sprintf("const BUNDLE_CHECKSUM = %q;\n", checksum)), serviceWorker...)
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-store") w.Header().Set("Cache-Control", "no-store")
w.Header().Set("X-OFDGo-Checksum", checksum) w.Header().Set("X-OFDGo-Checksum", checksum)
if r.URL.Path == "/ofdgo.wasm" {
wasm.ServeHTTP(w, r)
return
}
if r.URL.Path == "/ofdgo_work.js" { if r.URL.Path == "/ofdgo_work.js" {
http.ServeContent(w, r, "ofdgo_work.js", time.Time{}, bytes.NewReader(serviceWorker)) http.ServeContent(w, r, "ofdgo_work.js", time.Time{}, bytes.NewReader(serviceWorker))
return return
@@ -52,3 +61,17 @@ func serveWebUI() http.Handler {
files.ServeHTTP(w, r) files.ServeHTTP(w, r)
}) })
} }
// resourceChecksum 计算WebUI界面与WASM引擎的资源校验值
// 返回: string SHA-256十六进制校验值
func resourceChecksum() string {
hash := sha256.New()
for _, resources := range []embed.FS{webuiassets.FS, wasmassets.FS} {
entries, _ := resources.ReadDir(".")
for _, entry := range entries {
data, _ := resources.ReadFile(entry.Name())
hash.Write(data)
}
}
return hex.EncodeToString(hash.Sum(nil))
}