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

3
## Setup 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, calls `add_limits_mysql` that adds limits to the database schema in case of a MySQL database and finally it 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
### 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.

### Notes for MySQL

Since the seeds would contain various UTF-8 characters, such as emojis or so,
we'll need to make sure that we're using `utf8mb4` for all the encoding
settings and `utf8mb4_unicode_ci` for collation. Please check
[MySQL utf8mb4 support](../install/database_mysql.md#mysql-utf8mb4-support)

Make sure that `config/database.yml` has `encoding: utf8mb4`, too.

Next, we'll need to update the schema to make the indices fit:

``` shell
sed -i 's/limit: 255/limit: 191/g' db/schema.rb
```

Then run the setup script:

``` shell
bundle exec rake setup
```

To make sure that indices still fit. You could find great details in:
[How to support full Unicode in MySQL databases](https://mathiasbynens.be/notes/mysql-utf8mb4)

65
66
## Run tests

Jacob Vosmaer's avatar
Jacob Vosmaer committed
67
68
69
In order to run the test you can use the following commands:
- `rake spinach` to run the spinach suite
- `rake spec` to run the rspec suite
70
- `rake karma` to run the karma test suite
Jacob Vosmaer's avatar
Jacob Vosmaer committed
71
- `rake gitlab:test` to run all the tests
72

73
Note: Both `rake spinach` and `rake spec` takes significant time to pass.
Jacob Vosmaer's avatar
Jacob Vosmaer committed
74
Instead of running full test suite locally you can save a lot of time by running
75
76
77
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.
Jacob Vosmaer's avatar
Jacob Vosmaer committed
78
79
80
81
82
83

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`

To run a single test file you can use:

84
85
- `bin/rspec spec/controllers/commit_controller_spec.rb` for a rspec test
- `bin/spinach features/project/issues/milestones.feature` for a spinach test
Jacob Vosmaer's avatar
Jacob Vosmaer committed
86
87
88

To run several tests inside one directory:

89
90
- `bin/rspec spec/requests/api/` for the rspec tests if you want to test API only
- `bin/spinach features/profile/` for the spinach tests if you want to test only profile pages
Jacob Vosmaer's avatar
Jacob Vosmaer committed
91

92
93
94
95
96
97
98
99
100
101
102
103
### 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
```
104

105
106
107
108
109
110
Alternatively you can use the following on each spec run,

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

Filipa Lacerda's avatar
Filipa Lacerda committed
111
112
113
114
115
116
117
118
119
120
121
122
123
124
## 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.

Stan Hu's avatar
Stan Hu committed
125
126
127
128
129
## Generate API documentation for project services (e.g. Slack)

```
bundle exec rake services:doc
```
130

131
132
133
134
135
136
137
138
139
## Updating Emoji Aliases

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

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

140
141
142
143
144
145
146
147
148
## Updating Emoji Digests

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

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

149

150
151
152
153
154
155
156
157
158
159
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
```
160
161
162
163
164

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
165
166
167
168
169
170
171

## Updating project templates

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

```
172
gdk run
Z.J. van de Weg's avatar
Z.J. van de Weg committed
173
174
175
176
177
178
179
180
181
# 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.