rake_tasks.md 6.23 KB
Newer Older
1 2
# Rake tasks for developers

3
## Set up db with developer seeds
4

5
Note that if your db user does not have advanced privileges you must create the db manually before running this command.
6 7 8 9 10

```
bundle exec rake setup
```

Ville Skyttä's avatar
Ville Skyttä committed
11
The `setup` task is an alias for `gitlab:setup`.
12
This tasks calls `db:reset` to create the database, and calls `db:seed_fu` to seed the database.
13
Note: `db:setup` calls `db:seed` but this does nothing.
14

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
### Seeding issues for all or a given project

You can seed issues for all or a given project with the `gitlab:seed:issues`
task:

```shell
# All projects
bin/rake gitlab:seed:issues

# A specific project
bin/rake "gitlab:seed:issues[group-path/project-path]"
```

By default, this seeds an average of 2 issues per week for the last 5 weeks per
project.

31
#### Seeding issues for Insights charts **(ULTIMATE)**
32 33

You can seed issues specifically for working with the
34
[Insights charts](../user/group/insights/index.md) with the
35 36 37 38 39 40 41 42 43 44 45 46 47 48
`gitlab:seed:insights:issues` task:

```shell
# All projects
bin/rake gitlab:seed:insights:issues

# A specific project
bin/rake "gitlab:seed:insights:issues[group-path/project-path]"
```

By default, this seeds an average of 10 issues per week for the last 52 weeks
per project. All issues will also be randomly labeled with team, type, severity,
and priority.

49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
### Automation

If you're very sure that you want to **wipe the current database** and refill
seeds, you could:

``` shell
echo 'yes' | bundle exec rake setup
```

To save you from answering `yes` manually.

### Discard stdout

Since the script would print a lot of information, it could be slowing down
your terminal, and it would generate more than 20G logs if you just redirect
it to a file. If we don't care about the output, we could just redirect it to
`/dev/null`:

``` shell
echo 'yes' | bundle exec rake setup > /dev/null
```

Note that since you can't see the questions from stdout, you might just want
to `echo 'yes'` to keep it running. It would still print the errors on stderr
so no worries about missing errors.

75 76 77 78 79 80 81 82
### Extra Project seed options

There are a few environment flags you can pass to change how projects are seeded

- `SIZE`: defaults to `8`, max: `32`. Amount of projects to create.
- `LARGE_PROJECTS`: defaults to false. If set will clone 6 large projects to help with testing.
- `FORK`: defaults to false. If set to `true` will fork `torvalds/linux` five times. Can also be set to an existing project full_path and it will fork that instead.

83 84
## Run tests

85
In order to run the test you can use the following commands:
86

87 88 89 90 91
- `bin/rake spec` to run the rspec suite
- `bin/rake spec:unit` to run the only the unit tests
- `bin/rake spec:integration` to run the only the integration tests
- `bin/rake spec:system` to run the only the system tests
- `bin/rake karma` to run the karma test suite
92

93
Note: `bin/rake spec` takes significant time to pass.
94
Instead of running full test suite locally you can save a lot of time by running
95 96 97
a single test or directory related to your changes. After you submit merge request
CI will run full test suite for you. Green CI status in the merge request means
full test suite is passed.
98 99 100 101

Note: You can't run `rspec .` since this will try to run all the `_spec.rb`
files it can find, also the ones in `/tmp`

102 103 104
Note: You can pass RSpec command line options to the `spec:unit`,
`spec:integration`, and `spec:system` tasks, e.g. `bin/rake "spec:unit[--tag ~geo --dry-run]"`.

105 106
To run a single test file you can use:

107
- `bin/rspec spec/controllers/commit_controller_spec.rb` for a rspec test
108 109 110

To run several tests inside one directory:

111
- `bin/rspec spec/requests/api/` for the rspec tests if you want to test API only
112

113 114 115 116 117 118 119 120 121 122 123 124
### Speed-up tests, rake tasks, and migrations

[Spring](https://github.com/rails/spring) is a Rails application preloader. It
speeds up development by keeping your application running in the background so
you don't need to boot it every time you run a test, rake task or migration.

If you want to use it, you'll need to export the `ENABLE_SPRING` environment
variable to `1`:

```
export ENABLE_SPRING=1
```
125

126 127 128 129 130 131
Alternatively you can use the following on each spec run,

```
bundle exec spring rspec some_spec.rb
```

132 133 134 135 136 137 138 139 140 141 142 143 144 145
## Compile Frontend Assets

You shouldn't ever need to compile frontend assets manually in development, but
if you ever need to test how the assets get compiled in a production
environment you can do so with the following command:

```
RAILS_ENV=production NODE_ENV=production bundle exec rake gitlab:assets:compile
```

This will compile and minify all JavaScript and CSS assets and copy them along
with all other frontend assets (images, fonts, etc) into `/public/assets` where
they can be easily inspected.

146 147 148 149 150
## Generate API documentation for project services (e.g. Slack)

```
bundle exec rake services:doc
```
151

152 153 154 155 156 157 158 159 160
## Updating Emoji Aliases

To update the Emoji aliases file (used for Emoji autocomplete) you must run the
following:

```
bundle exec rake gemojione:aliases
```

161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
## Updating Emoji Digests

To update the Emoji digests file (used for Emoji autocomplete) you must run the
following:

```
bundle exec rake gemojione:digests
```

This will update the file `fixtures/emojis/digests.json` based on the currently
available Emoji.

## Emoji Sprites

Generating a sprite file containing all the Emoji can be done by running:

```
bundle exec rake gemojione:sprite
```
180 181 182 183 184

If new emoji are added, the spritesheet may change size. To compensate for
such changes, first generate the `emoji.png` spritesheet with the above Rake
task, then check the dimensions of the new spritesheet and update the
`SPRITESHEET_WIDTH` and `SPRITESHEET_HEIGHT` constants accordingly.
Z.J. van de Weg's avatar
Z.J. van de Weg committed
185 186 187 188 189 190 191

## Updating project templates

Starting a project from a template needs this project to be exported. On a
up to date master branch with run:

```
192
gdk run
Z.J. van de Weg's avatar
Z.J. van de Weg committed
193 194 195 196 197 198 199 200 201
# In a new terminal window
bundle exec rake gitlab:update_project_templates
git checkout -b update-project-templates
git add vendor/project_templates
git commit
git push -u origin update-project-templates
```

Now create a merge request and merge that to master.
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218

## Generate route lists

To see the full list of API routes, you can run:

```shell
bundle exec rake grape:path_helpers
```

For the Rails controllers, run:

```shell
bundle exec rake routes
```

Since these take some time to create, it's often helpful to save the output to
a file for quick reference.
219