mirror of
https://codeberg.org/forgejo/docs.git
synced 2024-11-30 19:03:43 -05:00
2288a5dc4e
* hint to use `make help` for target information * require Go v1.21 * remove some redundant / obsolete strings * `TAGS='sqlite sqlite_unlock_notify' make watch` because it is not much use without sqlite
159 lines
5.4 KiB
Markdown
159 lines
5.4 KiB
Markdown
---
|
|
title: 'Compiling from source'
|
|
license: 'Apache-2.0'
|
|
origin_url: 'https://github.com/go-gitea/gitea/blob/abe8fe352711601fbcd24bf4505f7e0b81a93c5d/docs/content/installation/from-source.en-us.md'
|
|
---
|
|
|
|
## Installation from source
|
|
|
|
You should [install go](https://golang.org/doc/install) and set up your go
|
|
environment correctly. In particular, it is recommended to set the `$GOPATH`
|
|
environment variable and to add the go bin directory or directories
|
|
`${GOPATH//://bin:}/bin` to the `$PATH`. See the Go wiki entry for
|
|
[GOPATH](https://github.com/golang/go/wiki/GOPATH).
|
|
|
|
Next, [install Node.js with npm](https://nodejs.org/en/download/current) which is
|
|
required to build the JavaScript and CSS files. The minimum supported Node.js
|
|
version is 20.
|
|
|
|
**Note**: When executing make tasks that require external tools, like
|
|
`make misspell-check`, Forgejo will automatically download and build these as
|
|
necessary. To be able to use these, you must have the `"$GOPATH/bin"` directory
|
|
on the executable path.
|
|
|
|
**Note 2**: Go version 1.21 or higher is required. However, it is recommended to
|
|
obtain the same version as the [continuous integration](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows/testing.yml).
|
|
|
|
**Note 3**: If you want to avoid installing build dependencies manually,
|
|
you can also [build the Docker image](#build-the-docker-image), which runs
|
|
the build process in a Docker image containing all the required dependencies.
|
|
|
|
### Download
|
|
|
|
First, we must retrieve the source code.
|
|
|
|
```bash
|
|
git clone https://codeberg.org/forgejo/forgejo
|
|
```
|
|
|
|
Decide which version of Forgejo to build and install. Currently, there are
|
|
multiple options to choose from. The `forgejo` branch represents the current
|
|
development version.
|
|
|
|
To work with tagged releases, the following commands can be used:
|
|
|
|
```bash
|
|
git branch -a
|
|
git checkout v1.21.2-0
|
|
```
|
|
|
|
To build Forgejo from source at a specific tagged release (like v1.21.2-0), list the
|
|
available tags and check out the specific tag.
|
|
|
|
List available tags with the following.
|
|
|
|
```bash
|
|
git tag -l
|
|
git checkout v1.21.2-0
|
|
```
|
|
|
|
### Build
|
|
|
|
To build from source, the following programs must be present on the system:
|
|
|
|
- `go` v1.21 or higher, see [here](https://golang.org/dl/)
|
|
- `node` 20 or higher with `npm`, see [here](https://nodejs.org/en/download/current)
|
|
- `make`
|
|
|
|
There are a number of useful `make` targets, only some of which are documented here.
|
|
They can all be displayed with:
|
|
|
|
```sh
|
|
$ make help
|
|
Make Routines:
|
|
- "" equivalent to "build"
|
|
- build build everything
|
|
- frontend build frontend files
|
|
- backend build backend files
|
|
- watch watch everything and continuously rebuild
|
|
- watch-frontend watch frontend files and continuously rebuild
|
|
- watch-backend watch backend files and continuously rebuild
|
|
...
|
|
```
|
|
|
|
Depending on requirements, the following build tags can be included.
|
|
|
|
- `bindata`: Build a single monolithic binary, with all assets included. Required for production build.
|
|
- `sqlite sqlite_unlock_notify`: Enable support for a
|
|
[SQLite3](https://sqlite.org/) database. Suggested only for small
|
|
installations.
|
|
- `pam`: Enable support for PAM (Linux Pluggable Authentication Modules). Can
|
|
be used to authenticate local users or extend authentication to methods
|
|
available to PAM.
|
|
|
|
Using the `bindata` build tag is required for production
|
|
deployments. You could exclude `bindata` when you are
|
|
developing/testing Forgejo or able to separate the assets correctly.
|
|
|
|
To include all assets, use the `bindata` tag:
|
|
|
|
```bash
|
|
TAGS="bindata" make build
|
|
```
|
|
|
|
In the default release build of the continuous integration system, the build
|
|
tags are: `TAGS="bindata sqlite sqlite_unlock_notify"`. The simplest
|
|
recommended way to build from source is therefore:
|
|
|
|
```bash
|
|
TAGS="bindata sqlite sqlite_unlock_notify" make build
|
|
```
|
|
|
|
The `build` target is split into two sub-targets:
|
|
|
|
- `make backend` which requires [Go v1.21](https://golang.org/dl/) or greater.
|
|
- `make frontend` which requires [Node.js 20](https://nodejs.org/en/download/current) or greater.
|
|
|
|
If pre-built frontend files are present it is possible to only build the backend:
|
|
|
|
```bash
|
|
TAGS="bindata" make backend
|
|
```
|
|
|
|
Webpack source maps are by default enabled in development builds and disabled in production builds. They can be enabled by setting the `ENABLE_SOURCEMAP=true` environment variable.
|
|
|
|
### Build the Docker image
|
|
|
|
To build Forgejo's Docker image, you need to have Docker and the Docker Buildx plugin installed.
|
|
You can build the Docker image with:
|
|
|
|
```bash
|
|
docker buildx build .
|
|
```
|
|
|
|
This will run the entire build process in a Docker container with the required dependencies.
|
|
You can also supply a tag during the build process with the `-t` option, to make it easier to publish or run the image later.
|
|
|
|
### Test
|
|
|
|
After following the steps above, a `forgejo` binary will be available in the working directory.
|
|
It can be tested from this directory or moved to a directory with test data. When Forgejo is
|
|
launched manually from command line, it can be killed by pressing `Ctrl + C`.
|
|
|
|
```bash
|
|
./forgejo web
|
|
```
|
|
|
|
To run and continuously rebuild when the source files change:
|
|
|
|
```bash
|
|
TAGS='sqlite sqlite_unlock_notify' make watch
|
|
```
|
|
|
|
> **NOTE:** do not set the `bindata` tag such as in `TAGS="bindata" make watch` or the browser may fail to load pages with an error like `Failed to load asset`
|
|
|
|
To run automated frontend and backend tests:
|
|
|
|
```bash
|
|
make test
|
|
```
|