mirror of
https://github.com/garethgeorge/backrest.git
synced 2026-08-26 02:46:28 +00:00
chore: add build test for windows
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -7,7 +7,7 @@ permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
name: release-please
|
||||
name: Release Please
|
||||
|
||||
jobs:
|
||||
release-please:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: "tagged-release"
|
||||
name: Tagged Release
|
||||
|
||||
on:
|
||||
push:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
@@ -1,7 +0,0 @@
|
||||
#! /bin/sh
|
||||
set -x
|
||||
|
||||
(cd webui && npm i && npm run build)
|
||||
rm -f backrest
|
||||
go build .
|
||||
rice append --exec backrest
|
||||
@@ -1,4 +0,0 @@
|
||||
#! /bin/sh
|
||||
set -x
|
||||
|
||||
go install github.com/GeertJohan/go.rice/rice@latest
|
||||
@@ -1,4 +0,0 @@
|
||||
#! /bin/sh
|
||||
set -x
|
||||
|
||||
DEBUG=1 go run .
|
||||
Generated
+84
@@ -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
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user