|
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