|
1 | 1 | # Contributing Guide |
2 | 2 |
|
3 | | -## Workflow Overview |
| 3 | +Thank you for contributing to the newsletter! 💖 |
4 | 4 |
|
5 | | -- In the last week of the month, a [coordination issue][coordination] |
6 | | - with an initial outline of this month's news is created by a coordinator. |
| 5 | +- [Writing Newsletter Sections](#writing-newsletter-sections) |
| 6 | + - [Templates](#templates) |
| 7 | + - [Style Guidelines](#style-guidelines) |
| 8 | +- [Becoming an Editor](#becoming-an-editor) |
7 | 9 |
|
8 | | - News are mostly collected from [/r/rust_gamedev], [@rust_gamedev] on Twitter, |
9 | | - and the "\#showcase-only" [Rust GameDev channel on Discord][gd-discord]. |
10 | | - Feel free to suggest sections if something cool isn't listed. |
| 10 | +## Writing Newsletter Sections |
11 | 11 |
|
12 | | -- During the following few days, contributors take "🆓 **free**" sections |
13 | | - and submit corresponding PRs. |
| 12 | +At the end of each month, a [coordination issue] will be created by one of |
| 13 | +the newsletter editors. This signals that it's time to start writing and |
| 14 | +submitting sections! |
14 | 15 |
|
15 | | - Leave a comment like "Taking {section\_name\_1} and {section\_name\_2}" |
16 | | - in the coordination issue to claim free sections you are interested in. |
17 | | - Claimed sections are marked as "🚧 WIP by @nickname" in the plan. |
18 | | - This is done to avoid work duplication. |
| 16 | +The coordination issue will contain the deadlines for submissions, as well |
| 17 | +as an initial outline for the newsletter's content. Each item in the outline |
| 18 | +will have a marker showing whether it is free for someone to pick up, and a |
| 19 | +suggested author. |
19 | 20 |
|
20 | | - You aren't required to be a project's author to write about it. |
| 21 | +> This outline is just a first draft - feel free to submit sections that |
| 22 | +aren't listed! |
21 | 23 |
|
22 | | - Some free sections have a nickname with a question mark in brackets |
23 | | - (like "🆓 **free** (@nickname?)") - |
24 | | - it's just an invitation to write the corresponding section if you want, |
25 | | - but anyone is free to take it. |
| 24 | +If you would like to write a section for the newsletter, leave a comment on |
| 25 | +the coordination issue stating what you're planning to write about. This |
| 26 | +allows the editors to keep track of what's in progress, and prevents |
| 27 | +duplicated work. |
26 | 28 |
|
27 | | -- Submitted PRs are reviewed, tweaked if needed, and merged. |
| 29 | +Next, make your changes to the newsletter's main Markdown file - this is |
| 30 | +located in [`/content/news/{N}/index.md`][newsletter-source], where `{N}` is |
| 31 | +the newsletter's issue number. You can either do this by forking the repo, |
| 32 | +or by using GitHub's built-in editor. If you're picking up a section from |
| 33 | +the coordination issue's outline, use the provided links as a starting |
| 34 | +point. |
28 | 35 |
|
29 | | - Feel free to help with reviews. |
| 36 | +> **Please follow the [templates](#templates) and |
| 37 | +[style guidelines](#style-guidelines) provided below when writing your |
| 38 | +section, for consistency with the rest of the newsletter!** |
30 | 39 |
|
31 | | -- After all the contributors' PRs are processed, coordinators |
32 | | - take and write all sections that no one has submitted. |
| 40 | +Once your edits are done, send a PR against the `source` branch (not |
| 41 | +`master`). Make sure that you mention the coordination issue in the PR |
| 42 | +description, and tick the 'Allow edits from maintainers' box to make it |
| 43 | +easier for editors to fix any issues. |
33 | 44 |
|
34 | | -- In the first week of the next month, the final draft is reviewed and merged. |
| 45 | +Upon submitting your PR, a CI build will run, checking that your changes |
| 46 | +meet the style guidelines. Please double check that this passes, and watch |
| 47 | +your GitHub notifications for any further review comments from the editors. |
35 | 48 |
|
36 | | -- A small PR that adds links to discussions |
37 | | - (see the comment at the bottom of the draft) is made. |
| 49 | +### Templates |
38 | 50 |
|
39 | | -- A draft of the next newsletter is added to the repo. |
| 51 | +#### Games, Apps or Libraries |
40 | 52 |
|
41 | | -## PRs |
| 53 | +```md |
| 54 | +### [Game name] |
42 | 55 |
|
43 | | -- The current draft is `/posts/newsletter-{N}/index.md`, |
44 | | - where `{N}` is this issue's number. |
| 56 | + |
| 57 | +_optional image label_ |
45 | 58 |
|
46 | | -- Place the sections accordingly to how they're ordered |
47 | | - in the coordination issue. |
| 59 | +[Game name] ([GitHub], [Discord], [Twitter]) by [@nickname] |
| 60 | +is... {short project description in one sentence}. |
48 | 61 |
|
49 | | -- PRs are sent against the `source` branch. |
| 62 | +{An overview of the recent updates with links to more details}. |
50 | 63 |
|
51 | | -- Mention the coordination issue in the PR's description to link it all together. |
| 64 | +_Discussions: [/r/rust_gamedev](link), [Twitter](link), [etc](link)_ |
52 | 65 |
|
53 | | -- Don't send PRs from your main branch, create a unique branch |
54 | | - (named like `n14_zemeroth`, `n12_veloren`, etc) for each PR. |
55 | | - This allows sending multiple simultaneous PRs |
56 | | - and simplifies the creation of the next PRs. |
| 66 | +[Game name]: http://example.com |
| 67 | +``` |
57 | 68 |
|
58 | | -- Make sure that the "Allow edits from maintainers" box is checked |
59 | | - ([avoid using org accounts][gh-org] if possible) |
60 | | - \- it makes updating/tweaking the PR easier for the coordinators. |
| 69 | +#### Articles, Blog Posts or Videos |
61 | 70 |
|
62 | | -- Don't bother resolving merge conflicts in your PR |
63 | | - as they will likely to re-appear after yet another PR is merged. |
64 | | - It easier for a coordinator to update the PR right before merging it. |
| 71 | +```md |
| 72 | +### [Article name] |
65 | 73 |
|
66 | | -- Don't worry about cleaning up the PR's commit history |
67 | | - \- we're squashing the PR into one commit before the merge anyway. |
| 74 | + |
| 75 | +_optional image label_ |
68 | 76 |
|
69 | | -[coordination]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues?q=label%3Acoordination |
70 | | -[@rust_gamedev]: https://twitter.com/rust_gamedev |
71 | | -[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev |
72 | | -[gd-discord]: https://discord.gg/yNtPTb2 |
73 | | -[gh-org]: https://github.com/isaacs/github/issues/1681 |
74 | | - |
75 | | -## Style |
76 | | - |
77 | | -Please, try to maintain a consistent style with the rest of the newsletter. |
78 | | - |
79 | | -- In general, the sections are expected to have this structure: |
80 | | - |
81 | | - ```markdown |
82 | | - ### [Project] |
83 | | - |
84 | | -  |
85 | | - _image caption_ |
86 | | - |
87 | | - [Project] by [@Author] is an awesome Rust project. |
88 | | - |
89 | | - A paragraph or two with a summary and [useful links][other-link]. |
90 | | - |
91 | | - _Discussions: |
92 | | - [/r/rust](https://reddit.com/r/rust/123456), |
93 | | - [twitter](https://twitter.com/todo/status/123456)_ |
94 | | - |
95 | | - [Project]: https://first.link |
96 | | - [@Author]: https://author.link |
97 | | - [other-link]: https://other.link |
98 | | - ``` |
99 | | - |
100 | | - It was decided to use an image + short TLDR-overview section scheme |
101 | | - because people, in general, don't follow the links in digests. |
102 | | - This way readers should get a general idea of what's going on |
103 | | - just by scrolling through the issue. |
104 | | - |
105 | | - But please don't make the sections too long/detailed, |
106 | | - otherwise, the newsletter as a whole will become too bloated. |
107 | | - It's not a strict limit, but please try to keep the sections under 200 words. |
108 | | - |
109 | | -- Games are quite visual-oriented media |
110 | | - so the default section structure includes one image before the text. |
111 | | - One image is preferred, two images are usually the max. |
112 | | - |
113 | | - Keep the file size in mind: GIFs should be <2MB in size |
114 | | - ([ezgif.com] is a nice online tool for quick editing/optimization), |
115 | | - static images should be optimized too |
116 | | - (prefer jpeg to png for complex screenshots, etc). |
117 | | - |
118 | | - All images should have a short but meaningful and descriptive alt text |
119 | | - (more info about alt text [here](https://moz.com/learn/seo/alt-text) |
120 | | - and [here](https://webaim.org/techniques/alttext/)). |
121 | | - |
122 | | - Image files should be placed in the same folder as the post |
123 | | - and be named using "\-" to split the words, not "\_". |
124 | | - |
125 | | -- Markdown doesn't natively support videos, |
126 | | - so the usual workaround is to include a clickable screenshot of the video: |
127 | | - [example 1](https://rust-gamedev.github.io/posts/newsletter-012/#ochre-4k-intro), |
128 | | - [example 2](https://rust-gamedev.github.io/posts/newsletter-012/#rust-n-games-talk). |
129 | | - |
130 | | -- Contributions should be written clearly and simply so that |
131 | | - they are accessible to readers for whom English is not their first language. |
| 77 | +[@nickname] published an [article] about... |
| 78 | +{overview what the resource is about}. |
132 | 79 |
|
133 | | -- Keep in mind that more than half of readers consume the newsletter |
134 | | - using mobile devices. |
135 | | - So try to avoid things that don't work well with small screens: |
136 | | - nested lists, long titles, images with important small details, |
137 | | - code blocks with long lines, etc. |
| 80 | +_Discussions: [/r/rust_gamedev](link), [Twitter](link), [etc](link)_ |
138 | 81 |
|
139 | | -- Don't use fourth-level headers. |
140 | | - Divide a section into subsections using a `------` line if needed. |
| 82 | +[Article name]: http://example.com |
| 83 | +``` |
141 | 84 |
|
142 | | -- Avoid using bold, italic, etc rich formatting if possible. |
| 85 | +### Style Guidelines |
143 | 86 |
|
144 | | -- Write from a third-person perspective even if you're writing |
145 | | - about your project's updates. |
| 87 | +- Run [MarkdownLint] against your changes with [our config][md-config]. |
| 88 | + - Most editors have a MarkdownLint plugin available |
| 89 | + (e.g. [VS Code][md-vscode], [Sublime Text][md-sublime], |
| 90 | + [Vim][md-vim]). |
| 91 | +- Write in third-person perspective. |
| 92 | +- Lines should be no more than 80 characters long. |
| 93 | +- The rendered text should be under 1000 characters, and under 6 |
| 94 | + paragraphs - this doesn't include markup/links/etc. |
| 95 | +- Do not use rich formatting (bold, italics, etc). |
| 96 | +- Avoid having multiple/nested bullet points. |
| 97 | + - This guideline may be relaxed if your project has multiple parts that |
| 98 | + aren't independent enough for their own sections. |
| 99 | +- Only include one image (<300kb) or GIF (<2.5mb). |
| 100 | + - Images should be placed before text, with an optional caption and |
| 101 | + mandatory alternate text for accessibility. |
| 102 | + - Unless essential to demonstrating your project, prefer static images |
| 103 | + over GIFs, to keep the file size down. |
| 104 | +- Use singular 'they' if you’re not sure what someone's pronouns are. |
| 105 | +- If a project has been featured in previous newsletters, try to focus on |
| 106 | + what's new rather than repeating previous content. |
| 107 | +- Donation/sponsorship links are allowed, but should not be the focus of a |
| 108 | + section. |
146 | 109 |
|
147 | | -- Use singular "they" if you're not sure what the person's pronouns are. |
148 | | - |
149 | | -- If the project was already featured in the newsletter, |
150 | | - use a one-sentence description at the beginning of the section |
151 | | - as a reminder for readers |
152 | | - and describe only the updates next. |
153 | | - |
154 | | -- It's ok to add a donation/sponsorship link, |
155 | | - but avoid making it a central point of your section. |
156 | | - |
157 | | -- Discussion links should be added at the end of the (sub)section only if |
158 | | - they already contain some actual interesting discussions. |
159 | | - |
160 | | -[ezgif.com]: https://ezgif.com |
161 | | - |
162 | | -## Formatting |
163 | | - |
164 | | -As with the style, keeping the MD formatting consistent over the newsletter |
165 | | -is important too. |
166 | | -So, please, try to follow the formatting guidelines |
167 | | -but don't worry too much about them: |
168 | | -they are easier to fix for coordinators than issues with the content itself. |
169 | | - |
170 | | -- Some of the basic formatting rules are enforced on CI using [markdownlint]. |
171 | | - |
172 | | - If you're working on your PR locally, consider installing |
173 | | - one of the markdownlint extensions for your editor |
174 | | - ([vscode][vscode-lint], [sublime][sublime-lint], [vim][vim-lint]), |
175 | | - otherwise please check the results of the CI run. |
176 | | - |
177 | | -- Insert line breaks ([softbreak]) at 80 chars. |
178 | | - |
179 | | -- Use [reference-style links][md-reflinks] and group them into blocks |
180 | | - at the end of the (sub)sections. |
181 | | - |
182 | | - URLs in these references block can break the 80 chars rule: |
183 | | - |
184 | | - ```markdown |
185 | | - [Rapier][rapier], a new pure-rust physics engine, |
186 | | - released an [official Bevy plugin][bevy-rapier]. |
187 | | - |
188 | | - [rapier]: https://rapier.rs |
189 | | - [bevy-rapier]: https://www.dimforge.com/blog/2020/08/25/announcing-the-rapier-physics-engine/#reaching-out-to-other-communities-bevy-and-javascript |
190 | | - ``` |
191 | | - |
192 | | -- Use only dashes (`-`) for list items, `**` for bold, and `_` for italic. |
193 | | - |
194 | | -- Don't use double linebreaks and trailing whitespaces. |
| 110 | +[coordination issue]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues?q=label%3Acoordination |
| 111 | +[@rust_gamedev]: https://twitter.com/rust_gamedev |
| 112 | +[/r/rust_gamedev]: https://reddit.com/r/rust_gamedev |
| 113 | +[gd-discord]: https://discord.gg/yNtPTb2 |
| 114 | +[newsletter-source]: https://github.com/rust-gamedev/rust-gamedev.github.io/tree/source/content/news |
| 115 | +[markdownlint]: https://github.com/DavidAnson/markdownlint |
| 116 | +[md-config]: https://github.com/rust-gamedev/rust-gamedev.github.io/blob/source/.markdownlint.json |
| 117 | +[md-vscode]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint |
| 118 | +[md-sublime]: https://packagecontrol.io/packages/SublimeLinter-contrib-markdownlint |
| 119 | +[md-vim]: https://github.com/fannheyward/coc-markdownlint |
195 | 120 |
|
196 | | -- Only use inline code formatting ("\`mycrate\`") for crate names |
197 | | - if this helps to avoid confusion. |
| 121 | +## Becoming an Editor |
198 | 122 |
|
199 | | -- Don't use GitHub shortcodes (like `:tada:`) - they won't be rendered |
200 | | - by normal MD renderers. Use plain Unicode emojis instead. |
| 123 | +The newsletter is organized by a small volunteer group of editors. If you |
| 124 | +have some time to spare each month and want to help out, please get in |
| 125 | +touch, either via the [issue tracker][issues] or the |
| 126 | +[gamedev working group's Discord channel][wg-discord]. We'd be happy to have |
| 127 | +you! |
201 | 128 |
|
202 | | -- Consequent list item lines are indented with two spaces. Example: |
| 129 | +Editors have two main responsibilities: |
203 | 130 |
|
204 | | - ```markdown |
205 | | - - Aaaaaaaa aaaaaaa aaaaaaaaaa (Aaaaaaa) aaaaaaaa aaaa |
206 | | - aaaaaa aaaa. Aaaaaa aaaa aa'a aaaaaaaa aaaaaa aaa aaaaaaa. |
207 | | - aaaaa aaaaa aa aaaaaaaaa, aaaaaaa. |
208 | | - - Aaaaaaaaaaaaa aaaaaaaaaaa aaa aaaaaaa aaaaa. |
209 | | - - Aaaaaaaaaaaaaa aaaaaaa aaaaaaaa AaaAA aaaa aaa aaa'a |
210 | | - aaaa aaaaa aaaaa `aaa_aaaaa` aaaa, aaaa `aaaa_aaaaa_aaa`, |
211 | | - aaaaa. |
212 | | - - Aaaaaaa aaaaa aaaaaa (aaaaaaa aaaaaaa). |
213 | | - ``` |
| 131 | +- Gathering news and links over the course of the month |
| 132 | +- Reviewing, fixing and merging PRs |
214 | 133 |
|
215 | | -- Try to strip unneeded parts of URLs. |
216 | | - For example, remove `www.`, `old.`, and description parts of Reddit links: |
| 134 | +Each month, one of the editors will be designated as the 'lead editor'. Their additional |
| 135 | +responsibilities are: |
217 | 136 |
|
218 | | - - `https://old.reddit.com/r/rust/comments/i7bcwu/introducing_bevy_a_refreshingly_simple_datadriven` |
219 | | - - `https://reddit.com/r/rust/comments/i7bcwu/introducing_bevy` |
| 137 | +- Creating and maintaining the coordination issue |
| 138 | +- Preparing the final draft |
| 139 | +- Publishing the newsletter |
| 140 | +- Linking to the newsletter on social media |
| 141 | +- Creating the files for next month's newsletter |
220 | 142 |
|
221 | | -- Use a consistent list item termination |
222 | | - (don't mix items ending with ";", ",", ".", etc). |
| 143 | +The lead editor role rotates every month, to spread the workload fairly, but |
| 144 | +you can opt out if you want. |
223 | 145 |
|
224 | | -[markdownlint]: https://github.com/DavidAnson/markdownlint |
225 | | -[vscode-lint]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint |
226 | | -[sublime-lint]: https://packagecontrol.io/packages/SublimeLinter-contrib-markdownlint |
227 | | -[vim-lint]: https://github.com/fannheyward/coc-markdownlint |
228 | | -[softbreak]: https://spec.commonmark.org/0.29/#soft-line-breaks |
229 | | -[md-reflinks]: https://www.markdownguide.org/basic-syntax/#reference-style-links |
230 | | - |
231 | | -Ping the coordinators in the current coordination issue |
232 | | -or WG's Discord channel if there are any questions. |
233 | | -If something in this guide is unclear file an issue |
234 | | -and we'll try to improve it. |
| 146 | +[issues]: https://github.com/rust-gamedev/rust-gamedev.github.io/issues |
| 147 | +[wg-discord]: https://discord.gg/DACMGKM5en |
0 commit comments