build: use make for building the project (#1304)
This commit is contained in:
		
							parent
							
								
									2d2c598fa6
								
							
						
					
					
						commit
						23f84642e6
					
				|  | @ -1,55 +1,39 @@ | ||||||
| version: 2 | version: 2.1 | ||||||
|  | references: | ||||||
|  |   base_container: &base_container | ||||||
|  |     docker: | ||||||
|  |       - image: filebrowser/builder:v1.1.0 | ||||||
| jobs: | jobs: | ||||||
|   lint: |   lint: | ||||||
|     docker: |     <<: *base_container | ||||||
|       - image: golangci/golangci-lint:v1.31.0 |  | ||||||
|     steps: |     steps: | ||||||
|       - checkout |       - checkout | ||||||
|       - run: golangci-lint run -v |       - run: make lint | ||||||
|   build-node: |  | ||||||
|     docker: |  | ||||||
|       - image: circleci/node |  | ||||||
|     steps: |  | ||||||
|       - checkout |  | ||||||
|       - run: |  | ||||||
|           name: "Build" |  | ||||||
|           command: ./wizard.sh -a |  | ||||||
|       - run: |  | ||||||
|           name: "Cleanup" |  | ||||||
|           command: rm -rf frontend/node_modules |  | ||||||
|       - persist_to_workspace: |  | ||||||
|           root: . |  | ||||||
|           paths: |  | ||||||
|             - '*' |  | ||||||
|   test: |   test: | ||||||
|     docker: |     <<: *base_container | ||||||
|       - image: circleci/golang:1.15.2 |  | ||||||
|     steps: |     steps: | ||||||
|       - checkout |       - checkout | ||||||
|       - run: |       - run: | ||||||
|           name: "Test" |           name: "Test" | ||||||
|           command: go test ./... |           command: make test | ||||||
|   build-go: |   build: | ||||||
|     docker: |     <<: *base_container | ||||||
|       - image: circleci/golang:1.15.2 |  | ||||||
|     steps: |     steps: | ||||||
|       - attach_workspace: |       - checkout | ||||||
|           at: '~/project' |  | ||||||
|       - run: |       - run: | ||||||
|           name: "Compile" |           name: "Build" | ||||||
|           command: GOOS=linux GOARCH=amd64 ./wizard.sh -c |           command: make build | ||||||
|       - run: |       - run: | ||||||
|           name: "Cleanup" |           name: "Cleanup" | ||||||
|           command: | |           command: | | ||||||
|             rm -rf frontend/build |             rm -rf frontend/node_modules | ||||||
|             git checkout -- go.sum # TODO: why is it being changed? |             rm -rf bin/ | ||||||
|       - persist_to_workspace: |       - persist_to_workspace: | ||||||
|           root: . |           root: . | ||||||
|           paths: |           paths: | ||||||
|             - '*' |             - '*' | ||||||
|   release: |   release: | ||||||
|     docker: |     <<: *base_container | ||||||
|       - image: circleci/golang:1.15.2 |  | ||||||
|     steps: |     steps: | ||||||
|       - attach_workspace: |       - attach_workspace: | ||||||
|           at: '~/project' |           at: '~/project' | ||||||
|  | @ -69,22 +53,16 @@ workflows: | ||||||
|           filters: |           filters: | ||||||
|             tags: |             tags: | ||||||
|               only: /.*/ |               only: /.*/ | ||||||
|       - build-node: |       - build: | ||||||
|           filters: |           filters: | ||||||
|             tags: |             tags: | ||||||
|               only: /.*/ |               only: /.*/ | ||||||
|       - build-go: |  | ||||||
|           filters: |  | ||||||
|             tags: |  | ||||||
|               only: /.*/ |  | ||||||
|           requires: |  | ||||||
|             - build-node |  | ||||||
|             - lint |  | ||||||
|             - test |  | ||||||
|       - release: |       - release: | ||||||
|           context: deploy |           context: deploy | ||||||
|           requires: |           requires: | ||||||
|             - build-go |             - build | ||||||
|  |             - test | ||||||
|  |             - lint | ||||||
|           filters: |           filters: | ||||||
|             tags: |             tags: | ||||||
|               only: /^v.*/ |               only: /^v.*/ | ||||||
|  |  | ||||||
|  | @ -28,3 +28,5 @@ yarn-error.log* | ||||||
| *.njsproj | *.njsproj | ||||||
| *.sln | *.sln | ||||||
| *.sw* | *.sw* | ||||||
|  | bin/ | ||||||
|  | build/ | ||||||
|  |  | ||||||
|  | @ -63,7 +63,6 @@ linters: | ||||||
|     - goconst |     - goconst | ||||||
|     - gocritic |     - gocritic | ||||||
|     - gocyclo |     - gocyclo | ||||||
|     - gofmt |  | ||||||
|     - goimports |     - goimports | ||||||
|     - golint |     - golint | ||||||
|     - gomnd |     - gomnd | ||||||
|  |  | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | { | ||||||
|  |   "types": [ | ||||||
|  |     { "type": "feat", "section": "Features" }, | ||||||
|  |     { "type": "fix", "section": "Bug Fixes" }, | ||||||
|  |     { "type": "perf", "section": "Performance improvements" }, | ||||||
|  |     { "type": "revert", "section": "Reverts" }, | ||||||
|  |     { "type": "refactor", "section": "Refactorings" }, | ||||||
|  |     { "type": "build", "section": "Build" }, | ||||||
|  |     { "type": "ci", "hidden": true }, | ||||||
|  |     { "type": "test", "hidden": true }, | ||||||
|  |     { "type": "chore", "hidden": true }, | ||||||
|  |     { "type": "docs", "hidden": true } | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  | @ -0,0 +1,98 @@ | ||||||
|  | SHELL := /bin/bash | ||||||
|  | BASE_PATH := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) | ||||||
|  | VERSION ?= $(shell git describe --tags --always --match=v* 2> /dev/null || \
 | ||||||
|  |            			cat $(CURDIR)/.version 2> /dev/null || echo v0) | ||||||
|  | VERSION_HASH = $(shell git rev-parse HEAD) | ||||||
|  | 
 | ||||||
|  | BIN = $(BASE_PATH)/bin | ||||||
|  | PATH := $(BIN):$(PATH) | ||||||
|  | export PATH | ||||||
|  | 
 | ||||||
|  | # printing
 | ||||||
|  | V = 0 | ||||||
|  | Q = $(if $(filter 1,$V),,@) | ||||||
|  | M = $(shell printf "\033[34;1m▶\033[0m") | ||||||
|  | 
 | ||||||
|  | GO = GOGC=off go | ||||||
|  | # go module
 | ||||||
|  | MODULE = $(shell env GO111MODULE=on $(GO) list -m) | ||||||
|  | 
 | ||||||
|  | DATE    ?= $(shell date +%FT%T%z) | ||||||
|  | VERSION ?= $(shell git describe --tags --always --match=v* 2> /dev/null || \
 | ||||||
|  | 			cat $(CURDIR)/.version 2> /dev/null || echo v0) | ||||||
|  | VERSION_HASH = 	$(shell git rev-parse HEAD) | ||||||
|  | BRANCH = $(shell git rev-parse --abbrev-ref HEAD) | ||||||
|  | 
 | ||||||
|  | LDFLAGS += -X "$(MODULE)/varsion.Version=$(VERSION)" -X "$(MODULE)/varsion.CommitSHA=$(VERSION_HASH)" | ||||||
|  | 
 | ||||||
|  | # tools
 | ||||||
|  | $(BIN): | ||||||
|  | 	@mkdir -p $@ | ||||||
|  | $(BIN)/%: | $(BIN) ; $(info $(M) installing $(PACKAGE)…) | ||||||
|  | 	$Q env GOBIN=$(BIN) $(GO) install $(PACKAGE) | ||||||
|  | 
 | ||||||
|  | GOLANGCI_LINT = $(BIN)/golangci-lint | ||||||
|  | $(BIN)/golangci-lint: PACKAGE=github.com/golangci/golangci-lint/cmd/golangci-lint@v1.37.1 | ||||||
|  | 
 | ||||||
|  | GOIMPORTS = $(BIN)/goimports | ||||||
|  | $(BIN)/goimports: PACKAGE=golang.org/x/tools/cmd/goimports@v0.1.0 | ||||||
|  | 
 | ||||||
|  | RICE = $(BIN)/rice | ||||||
|  | $(BIN)/rice: PACKAGE=github.com/GeertJohan/go.rice/rice@v1.0.2 | ||||||
|  | 
 | ||||||
|  | ## build: Build
 | ||||||
|  | .PHONY: build | ||||||
|  | build: | build-frontend build-backend ; $(info $(M) building…) | ||||||
|  | 
 | ||||||
|  | ## build-frontend: Build frontend
 | ||||||
|  | .PHONY: build-frontend | ||||||
|  | build-frontend: | ; $(info $(M) building frontend…) | ||||||
|  | 	$Q cd frontend && npm ci && npm run build | ||||||
|  | 
 | ||||||
|  | ## build-backend: Build backend
 | ||||||
|  | .PHONY: build-backend | ||||||
|  | build-backend: | $(RICE) ; $(info $(M) building backend…) | ||||||
|  | 	$Q cd ./http && rm -rf rice-box.go && $(RICE) embed-go | ||||||
|  | 	$Q $(GO) build -ldflags '$(LDFLAGS)' -o filebrowser | ||||||
|  | 
 | ||||||
|  | ## test: Run all tests
 | ||||||
|  | .PHONY: test | ||||||
|  | test: | test-frontend test-backend ; $(info $(M) running tests…) | ||||||
|  | 
 | ||||||
|  | ## test-frontend: Run frontend tests
 | ||||||
|  | .PHONY: test-frontend | ||||||
|  | test-frontend: | ; $(info $(M) running frontend tests…) | ||||||
|  | 
 | ||||||
|  | ## test-backend: Run backend tests
 | ||||||
|  | .PHONY: test-backend | ||||||
|  | test-backend: | $(RICE) ; $(info $(M) running backend tests…) | ||||||
|  | 	$Q $(GO) test -v ./... | ||||||
|  | 
 | ||||||
|  | ## lint: Lint
 | ||||||
|  | .PHONY: lint | ||||||
|  | lint: lint-frontend lint-backend lint-commits | ; $(info $(M) running all linters…) | ||||||
|  | 
 | ||||||
|  | ## lint-frontend: Lint frontend
 | ||||||
|  | .PHONY: lint-frontend | ||||||
|  | lint-frontend: | ; $(info $(M) running frontend linters…) | ||||||
|  | 	$Q cd frontend && npm ci && npm run lint | ||||||
|  | 
 | ||||||
|  | ## lint-backend: Lint backend
 | ||||||
|  | .PHONY: lint-backend | ||||||
|  | lint-backend: | $(GOLANGCI_LINT) ; $(info $(M) running backend linters…) | ||||||
|  | 	$Q $(GOLANGCI_LINT) run | ||||||
|  | 
 | ||||||
|  | ## lint-commits: Lint commits
 | ||||||
|  | .PHONY: lint-commits | ||||||
|  | lint-commits: | ; $(info $(M) running commitlint…) | ||||||
|  | 	$Q ./scripts/commitlint.sh | ||||||
|  | 
 | ||||||
|  | ## bump-version: Bump app version
 | ||||||
|  | .PHONY: bump-version | ||||||
|  | bump-version: | ; $(info $(M) creating a new release…) | ||||||
|  | 	$Q ./scripts/bump_version.sh | ||||||
|  | 
 | ||||||
|  | ## help: Show this help
 | ||||||
|  | .PHONY: help | ||||||
|  | help: | ||||||
|  | 	@sed -n 's/^## //p' $(MAKEFILE_LIST) | column -t -s ':' |  sed -e 's/^/ /' | sort | ||||||
|  | @ -40,7 +40,7 @@ func (a JSONAuth) Auth(r *http.Request, sto users.Store, root string) (*users.Us | ||||||
| 
 | 
 | ||||||
| 	// If ReCaptcha is enabled, check the code.
 | 	// If ReCaptcha is enabled, check the code.
 | ||||||
| 	if a.ReCaptcha != nil && len(a.ReCaptcha.Secret) > 0 { | 	if a.ReCaptcha != nil && len(a.ReCaptcha.Secret) > 0 { | ||||||
| 		ok, err := a.ReCaptcha.Ok(cred.ReCaptcha) //nolint:shadow
 | 		ok, err := a.ReCaptcha.Ok(cred.ReCaptcha) //nolint:govet
 | ||||||
| 
 | 
 | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ var cmdsAddCmd = &cobra.Command{ | ||||||
| 	Use:   "add <event> <command>", | 	Use:   "add <event> <command>", | ||||||
| 	Short: "Add a command to run on a specific event", | 	Short: "Add a command to run on a specific event", | ||||||
| 	Long:  `Add a command to run on a specific event.`, | 	Long:  `Add a command to run on a specific event.`, | ||||||
| 	Args:  cobra.MinimumNArgs(2), //nolint:mnd
 | 	Args:  cobra.MinimumNArgs(2), //nolint:gomnd
 | ||||||
| 	Run: python(func(cmd *cobra.Command, args []string, d pythonData) { | 	Run: python(func(cmd *cobra.Command, args []string, d pythonData) { | ||||||
| 		s, err := d.store.Settings.Get() | 		s, err := d.store.Settings.Get() | ||||||
| 		checkErr(err) | 		checkErr(err) | ||||||
|  |  | ||||||
|  | @ -23,7 +23,7 @@ You can also specify an optional parameter (index_end) so | ||||||
| you can remove all commands from 'index' to 'index_end', | you can remove all commands from 'index' to 'index_end', | ||||||
| including 'index_end'.`, | including 'index_end'.`, | ||||||
| 	Args: func(cmd *cobra.Command, args []string) error { | 	Args: func(cmd *cobra.Command, args []string) error { | ||||||
| 		if err := cobra.RangeArgs(2, 3)(cmd, args); err != nil { //nolint:mnd
 | 		if err := cobra.RangeArgs(2, 3)(cmd, args); err != nil { //nolint:gomnd
 | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -43,7 +43,7 @@ including 'index_end'.`, | ||||||
| 		i, err := strconv.Atoi(args[1]) | 		i, err := strconv.Atoi(args[1]) | ||||||
| 		checkErr(err) | 		checkErr(err) | ||||||
| 		f := i | 		f := i | ||||||
| 		if len(args) == 3 { //nolint:mnd
 | 		if len(args) == 3 { //nolint:gomnd
 | ||||||
| 			f, err = strconv.Atoi(args[2]) | 			f, err = strconv.Atoi(args[2]) | ||||||
| 			checkErr(err) | 			checkErr(err) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -152,12 +152,15 @@ user created with the credentials from options "username" and "password".`, | ||||||
| 			err = os.Chmod(server.Socket, os.FileMode(socketPerm)) | 			err = os.Chmod(server.Socket, os.FileMode(socketPerm)) | ||||||
| 			checkErr(err) | 			checkErr(err) | ||||||
| 		case server.TLSKey != "" && server.TLSCert != "": | 		case server.TLSKey != "" && server.TLSCert != "": | ||||||
| 			cer, err := tls.LoadX509KeyPair(server.TLSCert, server.TLSKey) //nolint:shadow
 | 			cer, err := tls.LoadX509KeyPair(server.TLSCert, server.TLSKey) //nolint:govet
 | ||||||
| 			checkErr(err) | 			checkErr(err) | ||||||
| 			listener, err = tls.Listen("tcp", adr, &tls.Config{Certificates: []tls.Certificate{cer}}) //nolint:shadow
 | 			listener, err = tls.Listen("tcp", adr, &tls.Config{ | ||||||
|  | 				MinVersion:   tls.VersionTLS12, | ||||||
|  | 				Certificates: []tls.Certificate{cer}}, | ||||||
|  | 			) | ||||||
| 			checkErr(err) | 			checkErr(err) | ||||||
| 		default: | 		default: | ||||||
| 			listener, err = net.Listen("tcp", adr) //nolint:shadow
 | 			listener, err = net.Listen("tcp", adr) | ||||||
| 			checkErr(err) | 			checkErr(err) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -44,7 +44,7 @@ including 'index_end'.`, | ||||||
| 		i, err := strconv.Atoi(args[0]) | 		i, err := strconv.Atoi(args[0]) | ||||||
| 		checkErr(err) | 		checkErr(err) | ||||||
| 		f := i | 		f := i | ||||||
| 		if len(args) == 2 { //nolint:mnd
 | 		if len(args) == 2 { //nolint:gomnd
 | ||||||
| 			f, err = strconv.Atoi(args[1]) | 			f, err = strconv.Atoi(args[1]) | ||||||
| 			checkErr(err) | 			checkErr(err) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ var usersAddCmd = &cobra.Command{ | ||||||
| 	Use:   "add <username> <password>", | 	Use:   "add <username> <password>", | ||||||
| 	Short: "Create a new user", | 	Short: "Create a new user", | ||||||
| 	Long:  `Create a new user and add it to the database.`, | 	Long:  `Create a new user and add it to the database.`, | ||||||
| 	Args:  cobra.ExactArgs(2), //nolint:mnd
 | 	Args:  cobra.ExactArgs(2), //nolint:gomnd
 | ||||||
| 	Run: python(func(cmd *cobra.Command, args []string, d pythonData) { | 	Run: python(func(cmd *cobra.Command, args []string, d pythonData) { | ||||||
| 		s, err := d.store.Settings.Get() | 		s, err := d.store.Settings.Get() | ||||||
| 		checkErr(err) | 		checkErr(err) | ||||||
|  |  | ||||||
|  | @ -67,7 +67,7 @@ list or set it to 0.`, | ||||||
| 				// with the new username. If there is, print an error and cancel the
 | 				// with the new username. If there is, print an error and cancel the
 | ||||||
| 				// operation
 | 				// operation
 | ||||||
| 				if user.Username != onDB.Username { | 				if user.Username != onDB.Username { | ||||||
| 					if conflictuous, err := d.store.Users.Get("", user.Username); err == nil { //nolint:shadow
 | 					if conflictuous, err := d.store.Users.Get("", user.Username); err == nil { //nolint:govet
 | ||||||
| 						checkErr(usernameConflictError(user.Username, conflictuous.ID, user.ID)) | 						checkErr(usernameConflictError(user.Username, conflictuous.ID, user.ID)) | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|  | @ -72,7 +72,7 @@ func dbExists(path string) (bool, error) { | ||||||
| 		d := filepath.Dir(path) | 		d := filepath.Dir(path) | ||||||
| 		_, err = os.Stat(d) | 		_, err = os.Stat(d) | ||||||
| 		if os.IsNotExist(err) { | 		if os.IsNotExist(err) { | ||||||
| 			if err := os.MkdirAll(d, 0700); err != nil { //nolint:shadow
 | 			if err := os.MkdirAll(d, 0700); err != nil { //nolint:govet
 | ||||||
| 				return false, err | 				return false, err | ||||||
| 			} | 			} | ||||||
| 			return false, nil | 			return false, nil | ||||||
|  |  | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | module.exports = { | ||||||
|  |     rules: { | ||||||
|  |         'body-leading-blank': [1, 'always'], | ||||||
|  |         'body-max-line-length': [2, 'always', 100], | ||||||
|  |         'footer-leading-blank': [1, 'always'], | ||||||
|  |         'footer-max-line-length': [2, 'always', 100], | ||||||
|  |         'header-max-length': [2, 'always', 100], | ||||||
|  |         'scope-case': [2, 'always', 'lower-case'], | ||||||
|  |         'subject-case': [ | ||||||
|  |             2, | ||||||
|  |             'never', | ||||||
|  |             ['sentence-case', 'start-case', 'pascal-case', 'upper-case'], | ||||||
|  |         ], | ||||||
|  |         'subject-full-stop': [2, 'never', '.'], | ||||||
|  |         'type-case': [2, 'always', 'lower-case'], | ||||||
|  |         'type-empty': [2, 'never'], | ||||||
|  |         'type-enum': [ | ||||||
|  |             2, | ||||||
|  |             'always', | ||||||
|  |             [ | ||||||
|  |                 'feat', | ||||||
|  |                 'fix', | ||||||
|  |                 'perf', | ||||||
|  |                 'revert', | ||||||
|  |                 'refactor', | ||||||
|  |                 'build', | ||||||
|  |                 'ci', | ||||||
|  |                 'test', | ||||||
|  |                 'chore', | ||||||
|  |                 'docs', | ||||||
|  |             ], | ||||||
|  |         ], | ||||||
|  |     }, | ||||||
|  | }; | ||||||
|  | @ -79,7 +79,7 @@ func NewFileInfo(opts FileOptions) (*FileInfo, error) { | ||||||
| 
 | 
 | ||||||
| 	if opts.Expand { | 	if opts.Expand { | ||||||
| 		if file.IsDir { | 		if file.IsDir { | ||||||
| 			if err := file.readListing(opts.Checker, opts.ReadHeader); err != nil { //nolint:shadow
 | 			if err := file.readListing(opts.Checker, opts.ReadHeader); err != nil { //nolint:govet
 | ||||||
| 				return nil, err | 				return nil, err | ||||||
| 			} | 			} | ||||||
| 			return file, nil | 			return file, nil | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ func wsErr(ws *websocket.Conn, r *http.Request, status int, err error) { //nolin | ||||||
| 	if err != nil || status >= 400 { | 	if err != nil || status >= 400 { | ||||||
| 		log.Printf("%s: %v %s %v", r.URL.Path, status, r.RemoteAddr, err) | 		log.Printf("%s: %v %s %v", r.URL.Path, status, r.RemoteAddr, err) | ||||||
| 	} | 	} | ||||||
| 	if err := ws.WriteControl(websocket.CloseInternalServerErr, []byte(txt), time.Now().Add(WSWriteDeadline)); err != nil { //nolint:shadow
 | 	if err := ws.WriteControl(websocket.CloseInternalServerErr, []byte(txt), time.Now().Add(WSWriteDeadline)); err != nil { | ||||||
| 		log.Print(err) | 		log.Print(err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -47,7 +47,7 @@ var commandsHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d | ||||||
| 	var raw string | 	var raw string | ||||||
| 
 | 
 | ||||||
| 	for { | 	for { | ||||||
| 		_, msg, err := conn.ReadMessage() //nolint:shadow
 | 		_, msg, err := conn.ReadMessage() //nolint:govet
 | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			wsErr(conn, r, http.StatusInternalServerError, err) | 			wsErr(conn, r, http.StatusInternalServerError, err) | ||||||
| 			return 0, nil | 			return 0, nil | ||||||
|  | @ -60,7 +60,7 @@ var commandsHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if !d.server.EnableExec || !d.user.CanExecute(strings.Split(raw, " ")[0]) { | 	if !d.server.EnableExec || !d.user.CanExecute(strings.Split(raw, " ")[0]) { | ||||||
| 		if err := conn.WriteMessage(websocket.TextMessage, cmdNotAllowed); err != nil { //nolint:shadow
 | 		if err := conn.WriteMessage(websocket.TextMessage, cmdNotAllowed); err != nil { //nolint:govet
 | ||||||
| 			wsErr(conn, r, http.StatusInternalServerError, err) | 			wsErr(conn, r, http.StatusInternalServerError, err) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -69,7 +69,7 @@ var commandsHandler = withUser(func(w http.ResponseWriter, r *http.Request, d *d | ||||||
| 
 | 
 | ||||||
| 	command, err := runner.ParseCommand(d.settings, raw) | 	command, err := runner.ParseCommand(d.settings, raw) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if err := conn.WriteMessage(websocket.TextMessage, []byte(err.Error())); err != nil { //nolint:shadow
 | 		if err := conn.WriteMessage(websocket.TextMessage, []byte(err.Error())); err != nil { //nolint:govet
 | ||||||
| 			wsErr(conn, r, http.StatusInternalServerError, err) | 			wsErr(conn, r, http.StatusInternalServerError, err) | ||||||
| 		} | 		} | ||||||
| 		return 0, nil | 		return 0, nil | ||||||
|  |  | ||||||
|  | @ -70,7 +70,7 @@ func TestPublicShareHandlerAuthentication(t *testing.T) { | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				t.Cleanup(func() { | 				t.Cleanup(func() { | ||||||
| 					if err := db.Close(); err != nil { //nolint:shadow
 | 					if err := db.Close(); err != nil { //nolint:govet
 | ||||||
| 						t.Errorf("failed to close db: %v", err) | 						t.Errorf("failed to close db: %v", err) | ||||||
| 					} | 					} | ||||||
| 				}) | 				}) | ||||||
|  |  | ||||||
|  | @ -33,7 +33,7 @@ func parseQueryFiles(r *http.Request, f *files.FileInfo, _ *users.User) ([]strin | ||||||
| 		fileSlice = append(fileSlice, f.Path) | 		fileSlice = append(fileSlice, f.Path) | ||||||
| 	} else { | 	} else { | ||||||
| 		for _, name := range names { | 		for _, name := range names { | ||||||
| 			name, err := url.QueryUnescape(strings.Replace(name, "+", "%2B", -1)) //nolint:shadow
 | 			name, err := url.QueryUnescape(strings.Replace(name, "+", "%2B", -1)) //nolint:govet
 | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return nil, err | 				return nil, err | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, box * | ||||||
| 
 | 
 | ||||||
| 	if d.settings.Branding.Files != "" { | 	if d.settings.Branding.Files != "" { | ||||||
| 		fPath := filepath.Join(d.settings.Branding.Files, "custom.css") | 		fPath := filepath.Join(d.settings.Branding.Files, "custom.css") | ||||||
| 		_, err := os.Stat(fPath) //nolint:shadow
 | 		_, err := os.Stat(fPath) //nolint:govet
 | ||||||
| 
 | 
 | ||||||
| 		if err != nil && !os.IsNotExist(err) { | 		if err != nil && !os.IsNotExist(err) { | ||||||
| 			log.Printf("couldn't load custom styles: %v", err) | 			log.Printf("couldn't load custom styles: %v", err) | ||||||
|  | @ -58,7 +58,7 @@ func handleWithStaticData(w http.ResponseWriter, _ *http.Request, d *data, box * | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if d.settings.AuthMethod == auth.MethodJSONAuth { | 	if d.settings.AuthMethod == auth.MethodJSONAuth { | ||||||
| 		raw, err := d.store.Auth.Get(d.settings.AuthMethod) //nolint:shadow
 | 		raw, err := d.store.Auth.Get(d.settings.AuthMethod) //nolint:govet
 | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return http.StatusInternalServerError, err | 			return http.StatusInternalServerError, err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | #!/usr/bin/env bash | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | if ! [ -x "$(command -v standard-version)" ]; then | ||||||
|  |   echo "standard-version is not installed. please run 'npm i -g standard-version'" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | standard-version --dry-run --skip | ||||||
|  | read -p "Continue (y/n)? " -n 1 -r | ||||||
|  | echo ; | ||||||
|  | if [[ $REPLY =~ ^[Yy]$ ]]; then | ||||||
|  | 	standard-version -s ; | ||||||
|  | fi | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | #!/usr/bin/env bash | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | if ! [ -x "$(command -v commitlint)" ]; then | ||||||
|  |   echo "commitlint is not installed. please run 'npm i -g commitlint'" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | for commit_hash in $(git log --pretty=format:%H origin/master..HEAD); do | ||||||
|  |   commitlint -f ${commit_hash}~1 -t ${commit_hash} | ||||||
|  | done | ||||||
|  | @ -63,7 +63,7 @@ func (s *Storage) Gets(baseScope string) ([]*User, error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for _, user := range users { | 	for _, user := range users { | ||||||
| 		if err := user.Clean(baseScope); err != nil { //nolint:shadow
 | 		if err := user.Clean(baseScope); err != nil { //nolint:govet
 | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
							
								
								
									
										129
									
								
								wizard.sh
								
								
								
								
							
							
						
						
									
										129
									
								
								wizard.sh
								
								
								
								
							|  | @ -1,129 +0,0 @@ | ||||||
| #!/usr/bin/env sh |  | ||||||
| 
 |  | ||||||
| set -e |  | ||||||
| 
 |  | ||||||
| untracked="(untracked)" |  | ||||||
| REPO=$(cd $(dirname $0); pwd) |  | ||||||
| COMMIT_SHA=$(git rev-parse --short HEAD) |  | ||||||
| ASSETS="false" |  | ||||||
| BINARY="false" |  | ||||||
| RELEASE="" |  | ||||||
| 
 |  | ||||||
| debugInfo () { |  | ||||||
|   echo "Repo:           $REPO" |  | ||||||
|   echo "Build assets:   $ASSETS" |  | ||||||
|   echo "Build binary:   $BINARY" |  | ||||||
|   echo "Release:        $RELEASE" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| buildAssets () { |  | ||||||
|   cd $REPO |  | ||||||
|   rm -rf frontend/dist |  | ||||||
|   rm -f http/rice-box.go |  | ||||||
| 
 |  | ||||||
|   cd $REPO/frontend |  | ||||||
| 
 |  | ||||||
|   if [ "$CI" = "true" ]; then |  | ||||||
|     npm ci |  | ||||||
|   else |  | ||||||
|     npm install |  | ||||||
|   fi |  | ||||||
| 
 |  | ||||||
|   npm run lint |  | ||||||
|   npm run build |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| buildBinary () { |  | ||||||
|   if ! [ -x "$(command -v rice)" ]; then |  | ||||||
|     go install github.com/GeertJohan/go.rice/rice |  | ||||||
|   fi |  | ||||||
| 
 |  | ||||||
|   cd $REPO/http |  | ||||||
|   rm -rf rice-box.go |  | ||||||
|   rice embed-go |  | ||||||
| 
 |  | ||||||
|   cd $REPO |  | ||||||
|   go build -a -o filebrowser -ldflags "-s -w -X github.com/filebrowser/filebrowser/v2/version.CommitSHA=$COMMIT_SHA" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| release () { |  | ||||||
|   cd $REPO |  | ||||||
| 
 |  | ||||||
|   echo "👀 Checking semver format" |  | ||||||
| 
 |  | ||||||
|   if [ $# -ne 1 ]; then |  | ||||||
|     echo "❌ This release script requires a single argument corresponding to the semver to be released. See semver.org" |  | ||||||
|     exit 1 |  | ||||||
|   fi |  | ||||||
| 
 |  | ||||||
|   GREP="grep" |  | ||||||
|   if [ -x "$(command -v ggrep)" ]; then |  | ||||||
|     GREP="ggrep" |  | ||||||
|   fi |  | ||||||
| 
 |  | ||||||
|   semver=$(echo "$1" | $GREP -P '^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)') |  | ||||||
| 
 |  | ||||||
|   if [ $? -ne 0 ]; then |  | ||||||
|     echo "❌ Not valid semver format. See semver.org" |  | ||||||
|     exit 1 |  | ||||||
|   fi |  | ||||||
| 
 |  | ||||||
|   echo "🧼  Tidying up go modules" |  | ||||||
|   go mod tidy |  | ||||||
| 
 |  | ||||||
|   echo "🐑 Creating a new commit for the new release" |  | ||||||
|   git commit --allow-empty -am "chore: version $semver" |  | ||||||
|   git tag "$1" |  | ||||||
|   git push |  | ||||||
|   git push --tags origin |  | ||||||
| 
 |  | ||||||
|   echo "📦 Done! $semver released." |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| usage() { |  | ||||||
|   echo "Usage: $0 [-a] [-c] [-b] [-r <string>]" 1>&2; |  | ||||||
|   exit 1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| DEBUG="false" |  | ||||||
| 
 |  | ||||||
| while getopts "bacr:d" o; do |  | ||||||
|   case "${o}" in |  | ||||||
|     b) |  | ||||||
|       ASSETS="true" |  | ||||||
|       BINARY="true" |  | ||||||
|       ;; |  | ||||||
|     a) |  | ||||||
|       ASSETS="true" |  | ||||||
|       ;; |  | ||||||
|     c) |  | ||||||
|       BINARY="true" |  | ||||||
|       ;; |  | ||||||
|     r) |  | ||||||
|       RELEASE=${OPTARG} |  | ||||||
|       ;; |  | ||||||
|     d) |  | ||||||
|       DEBUG="true" |  | ||||||
|       ;; |  | ||||||
|     *) |  | ||||||
|       usage |  | ||||||
|       ;; |  | ||||||
|   esac |  | ||||||
| done |  | ||||||
| shift $((OPTIND-1)) |  | ||||||
| 
 |  | ||||||
| if [ "$DEBUG" = "true" ]; then |  | ||||||
|   debugInfo |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [ "$ASSETS" = "true" ]; then |  | ||||||
|   buildAssets |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [ "$BINARY" = "true" ]; then |  | ||||||
|   buildBinary |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| if [ "$RELEASE" != "" ]; then |  | ||||||
|   release $RELEASE |  | ||||||
| fi |  | ||||||
		Loading…
	
		Reference in New Issue