mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-22 08:42:32 -05:00
Update and expand information about building Gitea (#6019)
* Update and expand building information Signed-off-by: Andrew Thornton <art27@cantab.net> * remove extraneous extra line Signed-off-by: Andrew Thornton <art27@cantab.net> * Fix spelling mistake Signed-off-by: Andrew Thornton <art27@cantab.net> * Note about documentation for the website Signed-off-by: Andrew Thornton <art27@cantab.net> * More changes Signed-off-by: Andrew Thornton <art27@cantab.net> * Clarified the automatic build dependency * Update the from-source to match the hacking information * Extend quotes * Update required go and discord link Signed-off-by: Andrew Thornton <art27@cantab.net> * Update hacking-on-gitea.en-us.md Add in information about postcss
This commit is contained in:
parent
2a03e96bce
commit
7f38e2d0de
2 changed files with 319 additions and 51 deletions
|
@ -15,41 +15,280 @@ menu:
|
||||||
|
|
||||||
# Hacking on Gitea
|
# Hacking on Gitea
|
||||||
|
|
||||||
Familiarity with the existing [installation instructions](https://golang.org/doc/install)
|
## Installing go and setting the GOPATH
|
||||||
is required for this section.
|
|
||||||
|
|
||||||
To contribute to Gitea, fork the project and work on the `master` branch.
|
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).
|
||||||
|
|
||||||
Some internal packages are referenced using their respective Github URL. This can
|
You will also need make.
|
||||||
become problematic. To "trick" the Go tool into thinking this is a clone from the
|
<a href='{{< relref "doc/advanced/make.en-us.md" >}}'>(See here how to get Make)</a>
|
||||||
official repository, download the source code using "go get" and follow these instructions.
|
|
||||||
|
|
||||||
```
|
**Note**: When executing make tasks that require external tools, like
|
||||||
|
`make misspell-check`, Gitea 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. If you don't add the go bin directory to the
|
||||||
|
executable path you will have to manage this yourself.
|
||||||
|
|
||||||
|
**Note 2**: Go version 1.9 or higher is required, however it is important
|
||||||
|
to note that our continuous integration will check that the formatting of the
|
||||||
|
source code is not changed by `gofmt` using `make fmt-check`. Unfortunately,
|
||||||
|
the results of `gofmt` can differ by the version of `go` it is therefore
|
||||||
|
recommended to install the version of go that our continuous integration is
|
||||||
|
running. At the time of writing this is Go version 1.11, however this can be
|
||||||
|
checked by looking at the
|
||||||
|
[master `.drone.yml`](https://github.com/go-gitea/gitea/blob/master/.drone.yml)
|
||||||
|
(At the time of writing
|
||||||
|
[line 67](https://github.com/go-gitea/gitea/blob/8917d66571a95f3da232a0c27bc1300210d10fde/.drone.yml#L67)
|
||||||
|
is the relevant line - however this may change.)
|
||||||
|
|
||||||
|
## Downloading and cloning the Gitea source code
|
||||||
|
|
||||||
|
Go is quite opinionated about where it expects its source code, and simply
|
||||||
|
cloning the Gitea repository to an arbitrary path is likely to lead to
|
||||||
|
problems - the fixing of which is out of scope for this document. Further some
|
||||||
|
internal packages are referenced using their respective Github URL and at
|
||||||
|
present we use `vendor/` directories.
|
||||||
|
|
||||||
|
The recommended method of obtaining the source code is by using the `go get` command:
|
||||||
|
|
||||||
|
```bash
|
||||||
go get -d code.gitea.io/gitea
|
go get -d code.gitea.io/gitea
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
```
|
```
|
||||||
|
|
||||||
Fork the [Gitea repository](https://github.com/go-gitea/gitea) on GitHub, it should
|
This will clone the Gitea source code to: `"$GOPATH/src/code.gitea.io/gitea"`, or if `$GOPATH`
|
||||||
then be possible to switch the source directory on the command line.
|
is not set `"$HOME/go/src/code.gitea.io/gitea"`.
|
||||||
|
|
||||||
|
## Forking Gitea
|
||||||
|
|
||||||
|
As stated above, you cannot clone Gitea to an arbitrary path. Download the master Gitea source
|
||||||
|
code as above. Then fork the [Gitea repository](https://github.com/go-gitea/gitea) on GitHub,
|
||||||
|
and either switch the git remote origin for your fork or add your fork as another remote:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Rename original Gitea origin to upstream
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
|
git remote rename origin upstream
|
||||||
|
git remote add origin "git@github.com:$GITHUB_USERNAME/gitea.git"
|
||||||
|
git fetch --all --prune
|
||||||
```
|
```
|
||||||
cd $GOPATH/src/code.gitea.io/gitea
|
|
||||||
|
or:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add new remote for our fork
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
|
git remote add "$FORK_NAME" "git@github.com:$GITHUB_USERNAME/gitea.git"
|
||||||
|
git fetch --all --prune
|
||||||
```
|
```
|
||||||
|
|
||||||
To be able to create pull requests, the forked repository should be added as a remote
|
To be able to create pull requests, the forked repository should be added as a remote
|
||||||
to the Gitea sources, otherwise changes can't be pushed.
|
to the Gitea sources, otherwise changes can't be pushed.
|
||||||
|
|
||||||
```
|
## Building Gitea (Basic)
|
||||||
git remote rename origin upstream
|
|
||||||
git remote add origin git@github.com:<USERNAME>/gitea.git
|
Take a look at our
|
||||||
git fetch --all --prune
|
<a href='{{< relref "doc/installation/from-source.en-us.md" >}}'>instructions</a>
|
||||||
|
for <a href='{{< relref "doc/installation/from-source.en-us.md" >}}'>building
|
||||||
|
from source</a>.
|
||||||
|
|
||||||
|
The simplest recommended way to build from source is:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TAGS="bindata sqlite sqlite_unlock_notify" make generate build
|
||||||
```
|
```
|
||||||
|
|
||||||
This should provide a working development environment for Gitea. Take a look at
|
However, there are a number of additional make tasks you should be aware of.
|
||||||
the `Makefile` to get an overview about the available tasks. The most common tasks
|
These are documented below but you can look at our
|
||||||
should be `make test` which will start our test environment and `make build` which
|
[`Makefile`](https://github.com/go-gitea/gitea/blob/master/Makefile) for more,
|
||||||
will build a `gitea` binary into the working directory. Writing test cases is not
|
and look at our
|
||||||
mandatory to contribute, but it is highly encouraged and helps developers sleep
|
[`.drone.yml`](https://github.com/go-gitea/gitea/blob/master/.drone.yml) to see
|
||||||
at night.
|
how our continuous integration works.
|
||||||
|
|
||||||
That's it! You are ready to hack on Gitea. Test changes, push them to the repository,
|
### Formatting, linting, vetting and spell-check
|
||||||
and open a pull request.
|
|
||||||
|
Our continous integration will reject PRs that are not properly formatted, fail
|
||||||
|
linting, vet or spell-check.
|
||||||
|
|
||||||
|
You should format your code with `go fmt` using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make fmt
|
||||||
|
```
|
||||||
|
|
||||||
|
and can test whether your changes would match the results with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make fmt-check # which runs make fmt internally
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: The results of `go fmt` are dependent on the version of `go` present.
|
||||||
|
You should run the same version of go that is on the continuous integration
|
||||||
|
server as mentioned above. `make fmt-check` will only check if your `go` would
|
||||||
|
format differently - this may be different from the CI server version.
|
||||||
|
|
||||||
|
You should lint, vet and spell-check with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make vet lint misspell-check
|
||||||
|
```
|
||||||
|
|
||||||
|
### Updating the stylesheets
|
||||||
|
|
||||||
|
At present we use [less](http://lesscss.org/) and [postcss](https://postcss.org) to generate our stylesheets. Do
|
||||||
|
**not** edit the files in `public/css/` directly as they are generated from
|
||||||
|
`lessc` from the files in `public/less/`.
|
||||||
|
|
||||||
|
If you wish to work on the stylesheets you will need to install `lessc` the
|
||||||
|
less compiler and `postcss`. The recommended way to do this is using `npm install`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then edit the less stylesheets and regenerate the stylesheets using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make generate-stylesheets
|
||||||
|
```
|
||||||
|
|
||||||
|
You should commit both the changes to the css and the less files when making
|
||||||
|
PRs.
|
||||||
|
|
||||||
|
### Updating the API
|
||||||
|
|
||||||
|
When creating new API routes or modifying existing API routes you **MUST**
|
||||||
|
update and/or create [Swagger](https://swagger.io/docs/specification/2-0/what-is-swagger/)
|
||||||
|
documentation for these using [go-swagger](https://goswagger.io/) comments.
|
||||||
|
The structure of these comments is described in the [specification](https://goswagger.io/use/spec.html#annotation-syntax).
|
||||||
|
If you want more information about the Swagger structure you can look at the
|
||||||
|
[Swagger 2.0 Documentation](https://swagger.io/docs/specification/2-0/basic-structure/)
|
||||||
|
or compare with a previous PR adding a new API endpoint e.g. [PR #5483](https://github.com/go-gitea/gitea/pull/5843/files#diff-2e0a7b644cf31e1c8ef7d76b444fe3aaR20)
|
||||||
|
|
||||||
|
You should be careful not to break the API for downstream users which depend
|
||||||
|
on a stable API. In general this means additions are acceptable, but deletions
|
||||||
|
or fundamental changes of API will be rejected.
|
||||||
|
|
||||||
|
Once you have created or changed an API endpoint, please regenerate the Swagger
|
||||||
|
documentation using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make generate-swagger
|
||||||
|
```
|
||||||
|
|
||||||
|
You should validate your generated Swagger file and spell-check it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make swagger-validate mispell-check
|
||||||
|
```
|
||||||
|
|
||||||
|
You should commit the changed swagger JSON file. The continous integration
|
||||||
|
server will check that this has been done using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make swagger-check
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: Please note you should use the Swagger 2.0 documentation, not the
|
||||||
|
OpenAPI 3 documentation.
|
||||||
|
|
||||||
|
### Creating new configuration options
|
||||||
|
|
||||||
|
When creating new configuration options, it is not enough to add them to the
|
||||||
|
`modules/setting` files. You should add information to `custom/conf/app.ini`
|
||||||
|
and to the
|
||||||
|
<a href='{{ relref "doc/advanced/config-cheat-sheet.en-us.md"}}'>configuration cheat sheet</a>
|
||||||
|
found in `docs/content/doc/advanced/config-cheat-sheet.en-us.md`
|
||||||
|
|
||||||
|
### Changing the logo
|
||||||
|
|
||||||
|
When changing the Gitea logo svg. You will need to run and commit the results
|
||||||
|
of:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make generate-images
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create the necessary Gitea favicon and others.
|
||||||
|
|
||||||
|
### Database Migrations
|
||||||
|
|
||||||
|
If you make breaking changes to any of the database persisted structs in the
|
||||||
|
`models/` directory you will need to make a new migration. These can be found
|
||||||
|
in `models/migrations/`. You can ensure that your migrations work for the main
|
||||||
|
database types using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make test-sqlite-migration # with sqlite switched for the appropriate database
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
There are two types of test run by Gitea: Unit tests and Integration Tests.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TAGS="bindata sqlite sqlite_unlock_notify" make test # Runs the unit tests
|
||||||
|
```
|
||||||
|
|
||||||
|
Unit tests will not and cannot completely test Gitea alone. Therefore we
|
||||||
|
have written integration tests, however, these are database dependent.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TAGS="bindata sqlite sqlite_unlock_notify" make generate build test-sqlite
|
||||||
|
```
|
||||||
|
|
||||||
|
Will run the integration tests in an sqlite environment. Other database tests
|
||||||
|
are available however may need adjustment for local environment.
|
||||||
|
|
||||||
|
Look at
|
||||||
|
[`integrations/README.md`](https://github.com/go-gitea/gitea/blob/master/integrations/README.md)
|
||||||
|
for more information and how to run a single test.
|
||||||
|
|
||||||
|
Our continuous integration will test the code passes its unit tests and that
|
||||||
|
all supported databases will pass integration test in a docker environment.
|
||||||
|
Migration from several recent versions of gitea will also be tested.
|
||||||
|
|
||||||
|
Please submit your PR with additional tests and integration tests as
|
||||||
|
appropriate.
|
||||||
|
|
||||||
|
## Documentation for the website
|
||||||
|
|
||||||
|
Documentation for the website is found in `docs/`. If you change this you
|
||||||
|
can test your changes to ensure that they pass continuous integration using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd "$GOPATH/src/code.gitea.io/gitea/docs"
|
||||||
|
make trans-copy clean build
|
||||||
|
```
|
||||||
|
|
||||||
|
You will require a copy of [Hugo](https://gohugo.io/) to run this task. Please
|
||||||
|
note this may generate a number of untracked git objects which will need to
|
||||||
|
be cleaned up.
|
||||||
|
|
||||||
|
## Visual Studio Code
|
||||||
|
|
||||||
|
A `launch.json` and `tasks.json` are provided within `contrib/ide/vscode` for
|
||||||
|
Visual Studio Code. Look at
|
||||||
|
[`contrib/ide/README.md`](https://github.com/go-gitea/gitea/blob/master/contrib/ide/README.md)
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
## Submitting PRs
|
||||||
|
|
||||||
|
Once you're happy with your changes, push them up and open a pull request. It
|
||||||
|
is recommended that you allow Gitea Managers and Owners to modify your PR
|
||||||
|
branches as we will need to update it to master before merging and/or may be
|
||||||
|
able to help fix issues directly.
|
||||||
|
|
||||||
|
Any PR requires two approvals from the Gitea maintainers and needs to pass the
|
||||||
|
continous integration. Take a look at our
|
||||||
|
[`CONTRIBUTING.md`](https://github.com/go-gitea/gitea/blob/master/CONTRIBUTING.md)
|
||||||
|
document.
|
||||||
|
|
||||||
|
If you need more help pop on to [Discord](https://discord.gg/gitea) #Develop
|
||||||
|
and chat there.
|
||||||
|
|
||||||
|
That's it! You are ready to hack on Gitea.
|
||||||
|
|
|
@ -15,43 +15,60 @@ menu:
|
||||||
|
|
||||||
# Installation from source
|
# Installation from source
|
||||||
|
|
||||||
This section will not include basic [installation instructions](https://golang.org/doc/install).
|
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).
|
||||||
|
|
||||||
**Note**: Go version 1.8 or higher is required
|
**Note**: When executing make tasks that require external tools, like
|
||||||
|
`make misspell-check`, Gitea 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. If you don't add the go bin directory to the
|
||||||
|
executable path you will have to manage this yourself.
|
||||||
|
|
||||||
|
**Note 2**: Go version 1.9 or higher is required, however it is recommended to
|
||||||
|
obtain the same version as our continuous integration, see the advice given in
|
||||||
|
<a href='{{ relref "docs/advanced/hacking-on-gitea.en-us.md" }}'>Hacking on
|
||||||
|
Gitea</a>
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
First retrieve the source code. The easiest way is to use the Go tool. Use the following
|
First retrieve the source code. The easiest way is to use the Go tool. Use the
|
||||||
commands to fetch the source and switch into the source directory.
|
following commands to fetch the source and switch into the source directory.
|
||||||
|
Go is quite opinionated about where it expects its source code, and simply
|
||||||
|
cloning the Gitea repository to an arbitrary path is likely to lead to
|
||||||
|
problems - the fixing of which is out of scope for this document.
|
||||||
|
|
||||||
```
|
```bash
|
||||||
go get -d -u code.gitea.io/gitea
|
go get -d -u code.gitea.io/gitea
|
||||||
cd $GOPATH/src/code.gitea.io/gitea
|
cd "$GOPATH/src/code.gitea.io/gitea"
|
||||||
```
|
```
|
||||||
|
|
||||||
Decide which version of Gitea to build and install. Currently, there are multiple options
|
Decide which version of Gitea to build and install. Currently, there are
|
||||||
to choose from. The `master` branch represents the current development version. To build
|
multiple options to choose from. The `master` branch represents the current
|
||||||
with master, skip to the [build section](#build).
|
development version. To build with master, skip to the [build section](#build).
|
||||||
|
|
||||||
To work with tagged releases, the following commands can be used:
|
To work with tagged releases, the following commands can be used:
|
||||||
```
|
|
||||||
|
```bash
|
||||||
git branch -a
|
git branch -a
|
||||||
git checkout v1.0
|
git checkout v1.0
|
||||||
```
|
```
|
||||||
|
|
||||||
To validate a Pull Request, first enable the new branch (`xyz` is the PR id; for example
|
To validate a Pull Request, first enable the new branch (`xyz` is the PR id;
|
||||||
`2663` for [#2663](https://github.com/go-gitea/gitea/pull/2663)):
|
for example `2663` for [#2663](https://github.com/go-gitea/gitea/pull/2663)):
|
||||||
|
|
||||||
```
|
```bash
|
||||||
git fetch origin pull/xyz/head:pr-xyz
|
git fetch origin pull/xyz/head:pr-xyz
|
||||||
```
|
```
|
||||||
|
|
||||||
To build Gitea from source at a specific tagged release (like v1.0.0), list the available
|
To build Gitea from source at a specific tagged release (like v1.0.0), list the
|
||||||
tags and check out the specific tag.
|
available tags and check out the specific tag.
|
||||||
|
|
||||||
List available tags with the following.
|
List available tags with the following.
|
||||||
|
|
||||||
```
|
```bash
|
||||||
git tag -l
|
git tag -l
|
||||||
git checkout v1.0.0 # or git checkout pr-xyz
|
git checkout v1.0.0 # or git checkout pr-xyz
|
||||||
```
|
```
|
||||||
|
@ -59,32 +76,44 @@ git checkout v1.0.0 # or git checkout pr-xyz
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
Since all required libraries are already bundled in the Gitea source, it's
|
Since all required libraries are already bundled in the Gitea source, it's
|
||||||
possible to build Gitea with no additional downloads. Various
|
possible to build Gitea with no additional downloads apart from Make
|
||||||
[make tasks](https://github.com/go-gitea/gitea/blob/master/Makefile) are
|
<a href='{{< relref "doc/advanced/make.en-us.md" >}}'>(See here how to get Make)</a>.
|
||||||
provided to keep the build process as simple as possible.
|
Various [make tasks](https://github.com/go-gitea/gitea/blob/master/Makefile)
|
||||||
<a href='{{< relref "doc/advanced/make.en-us.md" >}}'>See here how to get Make</a>.
|
are provided to keep the build process as simple as possible.
|
||||||
|
|
||||||
Depending on requirements, the following build tags can be included.
|
Depending on requirements, the following build tags can be included.
|
||||||
|
|
||||||
* `bindata`: Build a single monolithic binary, with all assets included.
|
* `bindata`: Build a single monolithic binary, with all assets included.
|
||||||
* `sqlite sqlite_unlock_notify`: Enable support for a [SQLite3](https://sqlite.org/) database. Suggested only
|
* `sqlite sqlite_unlock_notify`: Enable support for a
|
||||||
for tiny installations.
|
[SQLite3](https://sqlite.org/) database. Suggested only for tiny
|
||||||
* `pam`: Enable support for PAM (Linux Pluggable Authentication Modules). Can be used to
|
installations.
|
||||||
authenticate local users or extend authentication to methods available to PAM.
|
* `pam`: Enable support for PAM (Linux Pluggable Authentication Modules). Can
|
||||||
|
be used to authenticate local users or extend authentication to methods
|
||||||
|
available to PAM.
|
||||||
|
|
||||||
Bundling assets into the binary using the `bindata` build tag can make development and
|
Bundling assets into the binary using the `bindata` build tag can make
|
||||||
testing easier, but is not ideal for a production deployment. To include assets, they
|
development and testing easier, but is not ideal for a production deployment.
|
||||||
must be built separately using the `generate` make task.
|
To include assets, they must be built separately using the `generate` make
|
||||||
|
task e.g.:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
TAGS="bindata" make generate build
|
TAGS="bindata" make generate build
|
||||||
```
|
```
|
||||||
|
|
||||||
|
In the default release build of our 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 generate build
|
||||||
|
```
|
||||||
|
|
||||||
## Test
|
## Test
|
||||||
|
|
||||||
After following the steps above a `gitea` binary will be available in the working directory.
|
After following the steps above a `gitea` binary will be available in the working directory.
|
||||||
It can be tested from this directory or moved to a directory with test data. When Gitea is
|
It can be tested from this directory or moved to a directory with test data. When Gitea is
|
||||||
launched manually from command line, it can be killed by pressing `Ctrl + C`.
|
launched manually from command line, it can be killed by pressing `Ctrl + C`.
|
||||||
|
|
||||||
```
|
```bash
|
||||||
./gitea web
|
./gitea web
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in a new issue