* Studio image and parent studio support in scene tagger * Refactor studio backend and add studio tagger --------- Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
5.6 KiB
Building from Source
Pre-requisites
- Go
- GolangCI - A meta-linter which runs several linters in parallel
- To install, follow the local installation instructions
- Yarn - Yarn package manager
Environment
Windows
- Download and install Go for Windows
- Download and extract MinGW64 (scroll down and select x86_64-posix-seh, don't use the autoinstaller, it doesn't work)
- Search for "Advanced System Settings" and open the System Properties dialog.
- Click the
Environment Variablesbutton - Under System Variables find
Path. Edit and addC:\MinGW\bin(replace with the correct path to where you extracted MingW64).
- Click the
NOTE: The make command in Windows will be mingw32-make with MinGW. For example, make pre-ui will be mingw32-make pre-ui.
macOS
- If you don't have it already, install the Homebrew package manager.
- Install dependencies:
brew install go git yarn gcc make node ffmpeg
Linux
Arch Linux
- Install dependencies:
sudo pacman -S go git yarn gcc make nodejs ffmpeg --needed
Ubuntu
- Install dependencies:
sudo apt-get install golang git gcc nodejs ffmpeg -y - Enable corepack in Node.js:
corepack enable - Install yarn:
corepack prepare yarn@stable --activate
Commands
make pre-ui- Installs the UI dependencies. This only needs to be run once after cloning the repository, or if the dependencies are updated.make generate- Generates Go and UI GraphQL files. Requiresmake pre-uito have been run.make generate-stash-box-client- Generate Go files for the Stash-box client code.make ui- Builds the UI. Requiresmake pre-uito have been run.make stash- Builds thestashbinary (make sure to build the UI as well... see below)make stash-release- Builds a release version thestashbinary, with debug information removedmake phasher- Builds thephasherbinarymake phasher-release- Builds a release version thephasherbinary, with debug information removedmake build- Builds both thestashandphasherbinariesmake build-release- Builds release versions of both thestashandphasherbinariesmake docker-build- Locally builds and tags a complete 'stash/build' docker imagemake docker-cuda-build- Locally builds and tags a complete 'stash/cuda-build' docker imagemake validate- Runs all of the tests and checks required to submit a PRmake lint- Runsgolangci-linton the backendmake it- Runs all unit and integration testsmake fmt- Formats the Go source codemake fmt-ui- Formats the UI source codemake server-start- Runs a development stash server in the.localdirectorymake server-clean- Removes the.localdirectory and all of its contentsmake ui-start- Runs the UI in development mode. Requires a running Stash server to connect to. The server port can be changed from the default of9999using the environment variableVITE_APP_PLATFORM_PORT. The UI runs on port3000or the next available port.
Local development quickstart
- Run
make pre-uito install UI dependencies - Run
make generateto create generated files - In one terminal, run
make server-startto run the server code - In a separate terminal, run
make ui-startto run the UI in development mode - Open the UI in a browser:
http://localhost:3000/
Changes to the UI code can be seen by reloading the browser page.
Changes to the backend code require a server restart (CTRL-C in the server terminal, followed by make server-start again) to be seen.
On first launch:
- On the "Stash Setup Wizard" screen, choose a directory with some files to test with
- Press "Next" to use the default locations for the database and generated content
- Press the "Confirm" and "Finish" buttons to get into the UI
- On the side menu, navigate to "Tasks -> Library -> Scan" and press the "Scan" button
- You're all set! Set any other configurations you'd like and test your code changes.
To start fresh with new configuration:
- Stop the server (
CTRL-Cin the server terminal) - Run
make server-cleanto clear all config, database, and generated files (under.local) - Run
make server-startto restart the server - Follow the "On first launch" steps above
Building a release
Simply run make or make release, or equivalently:
- Run
make pre-uito install UI dependencies - Run
make generateto create generated files - Run
make uito build the frontend - Run
make build-releaseto build a release executable for your current platform
Cross compiling
This project uses a modification of the CI-GoReleaser docker container to create an environment
where the app can be cross-compiled. This process is kicked off by CI via the scripts/cross-compile.sh script. Run the following
command to open a bash shell to the container to poke around:
docker run --rm --mount type=bind,source="$(pwd)",target=/stash -w /stash -i -t stashapp/compiler:latest /bin/bash
Profiling
Stash can be profiled using the --cpuprofile <output profile filename> command line flag.
The resulting file can then be used with pprof as follows:
go tool pprof <path to binary> <path to profile filename>
With graphviz installed and in the path, a call graph can be generated with:
go tool pprof -svg <path to binary> <path to profile filename> > <output svg file>