chore: add build test for windows

This commit is contained in:
garethgeorge
2024-02-16 01:56:23 -08:00
parent 93828dcbe1
commit 6aaec5423e
14 changed files with 169 additions and 55 deletions
+26 -4
View File
@@ -11,7 +11,7 @@ on:
workflow_dispatch:
jobs:
build:
build-nix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@@ -26,9 +26,6 @@ jobs:
with:
node-version: "20"
- name: Install Deps
run: ./scripts/install-deps.sh
- name: Build
uses: goreleaser/goreleaser-action@v5
with:
@@ -38,3 +35,28 @@ jobs:
- name: Test
run: PATH=$(pwd):$PATH go test ./...
build-win:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: "1.21"
- name: Setup NodeJS
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Generate
run: cd webui && npm install && npm run build-windows-devel
- name: Build
run: go build ./...
- name: Targeted Test
run: |
go test ./internal/api
+1 -1
View File
@@ -7,7 +7,7 @@ permissions:
contents: write
pull-requests: write
name: release-please
name: Release Please
jobs:
release-please:
+1 -1
View File
@@ -1,4 +1,4 @@
name: "tagged-release"
name: Tagged Release
on:
push:
+8
View File
@@ -6,6 +6,7 @@ import (
"fmt"
"os"
"path"
"runtime"
"slices"
"testing"
"time"
@@ -221,6 +222,10 @@ func TestMultipleBackup(t *testing.T) {
}
func TestHookExecution(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("skipping test on windows")
}
dir := t.TempDir()
hookOutputBefore := path.Join(dir, "before.txt")
@@ -410,6 +415,9 @@ func createSystemUnderTest(t *testing.T, config config.ConfigStore) systemUnderT
if err != nil {
t.Fatalf("Failed to create oplog: %v", err)
}
t.Cleanup(func() {
oplog.Close()
})
logStore := rotatinglog.NewRotatingLog(dir+"/log", 10)
orch, err := orchestrator.NewOrchestrator(
resticBin, cfg, oplog, logStore,
-18
View File
@@ -1,18 +0,0 @@
#! /bin/sh
(cd webui && npm i && npm run build)
for bin in backrest-*; do
rm -f $bin
done
find webui/dist -name '*.map' -exec rm ./{} \;
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o backrest-linux-amd64
GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -o backrest-linux-arm64
GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w" -o backrest-darwin-amd64
GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -o backrest-darwin-arm64
for bin in backrest-*; do
rice append --exec $bin
done
-7
View File
@@ -1,7 +0,0 @@
#! /bin/sh
set -x
(cd webui && npm i && npm run build)
rm -f backrest
go build .
rice append --exec backrest
-4
View File
@@ -1,4 +0,0 @@
#! /bin/sh
set -x
go install github.com/GeertJohan/go.rice/rice@latest
-4
View File
@@ -1,4 +0,0 @@
#! /bin/sh
set -x
DEBUG=1 go run .
+84
View File
@@ -29,6 +29,7 @@
},
"devDependencies": {
"@parcel/transformer-sass": "^2.10.3",
"cross-env": "^7.0.3",
"events": "^3.3.0",
"stream-browserify": "^3.0.0"
}
@@ -2692,6 +2693,38 @@
}
}
},
"node_modules/cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
"integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.1"
},
"bin": {
"cross-env": "src/bin/cross-env.js",
"cross-env-shell": "src/bin/cross-env-shell.js"
},
"engines": {
"node": ">=10.14",
"npm": ">=6",
"yarn": ">=1"
}
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/css-select": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
@@ -3210,6 +3243,12 @@
"node": ">=0.12.0"
}
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -3690,6 +3729,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -4500,6 +4548,27 @@
"node": ">=10"
}
},
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -4745,6 +4814,21 @@
"resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz",
"integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw=="
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+4 -2
View File
@@ -4,8 +4,9 @@
"description": "",
"scripts": {
"start": "parcel serve src/index.html",
"build": "BACKREST_BUILD_VERSION=$(git describe --tags --abbrev=0) UI_OS=unix parcel build src/index.html",
"build-windows": "BACKREST_BUILD_VERSION=$(git describe --tags --abbrev=0) UI_OS=windows parcel build src/index.html --dist-dir dist-windows",
"build": "cross-env BACKREST_BUILD_VERSION=$(git describe --tags --abbrev=0) UI_OS=unix parcel build src/index.html",
"build-windows": "cross-env BACKREST_BUILD_VERSION=$(git describe --tags --abbrev=0) UI_OS=windows parcel build src/index.html --dist-dir dist-windows",
"build-windows-devel": "cross-env BACKREST_BUILD_VERSION=dev UI_OS=windows parcel build src/index.html --dist-dir dist-windows",
"test": "echo \"Error: no test specified\" && exit 1",
"check": "tsc --noEmit"
},
@@ -32,6 +33,7 @@
},
"devDependencies": {
"@parcel/transformer-sass": "^2.10.3",
"cross-env": "^7.0.3",
"events": "^3.3.0",
"stream-browserify": "^3.0.0"
}
-12
View File
@@ -2,7 +2,6 @@ package webui
import (
"bytes"
"fmt"
"io"
"io/fs"
"net/http"
@@ -49,14 +48,3 @@ func serveFile(f fs.File, w http.ResponseWriter, r *http.Request, path string) {
http.ServeContent(w, r, path, stat.ModTime(), bytes.NewReader(data))
}
func init() {
files, err := fs.ReadDir(content, contentPrefix)
if err != nil {
panic("expected embedded files for WebUI")
}
if len(files) == 0 {
panic(fmt.Sprintf("expected >0 embedded files for WebUI, got %d", len(files)))
}
}
+40
View File
@@ -0,0 +1,40 @@
package webui
import (
"net/http"
"net/http/httptest"
"testing"
)
func TestEmbedNotEmpty(t *testing.T) {
files, err := content.ReadDir(contentPrefix)
if err != nil {
t.Fatalf("expected embedded files for WebUI, got error: %v", err)
}
if len(files) == 0 {
t.Fatalf("expected >0 embedded files for WebUI, got %d", len(files))
}
}
func TestServeIndex(t *testing.T) {
handler := Handler()
req, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
if status := rr.Code; status != http.StatusOK {
t.Errorf("handler returned wrong status code: got %v want %v",
status, http.StatusOK)
}
if rr.Header().Get("Content-Encoding") != "gzip" {
t.Errorf("handler returned wrong content encoding: got %v want %v",
rr.Header().Get("Content-Encoding"), "gzip")
}
}
+3 -1
View File
@@ -1,7 +1,9 @@
//go:build linux || darwin
// +build linux darwin
//go:generate sh -c "rm -rf ./dist && UI_OS=unix npm run build && gzip ./dist/*"
//go:generate npm install
//go:generate npm run build
//go:generate gzip -r -k dist
package webui
+2 -1
View File
@@ -1,7 +1,8 @@
//go:build windows
// +build windows
//go:generate sh -c "rm -rf ./dist-windows && UI_OS=unix npm run build-windows && gzip ./dist-windows/*"
//go:generate npm install
//go:generate npm run build-windows
package webui