Skip to content

Commit ff34907

Browse files
authored
Merge branch 'main' into patch-2
2 parents 4d353ad + d6a09fd commit ff34907

11 files changed

Lines changed: 150 additions & 34 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
name: Check for Spammy Issues
2+
on:
3+
issues:
4+
types: [opened]
5+
jobs:
6+
spammy-title-check:
7+
name: Remove issues with spammy titles
8+
if: github.repository == 'github/docs'
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
12+
with:
13+
github-token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
14+
script: |
15+
16+
const issue = context.payload.issue
17+
const owner = 'github'
18+
const repo = 'docs'
19+
20+
const titleWordCount = issue.title.trim().split(' ').length
21+
const titleWordCountMin = 2
22+
23+
try {
24+
await github.teams.getMembershipForUserInOrg({
25+
org: 'github',
26+
team_slug: 'employees',
27+
username: context.payload.sender.login,
28+
});
29+
30+
// Do not perform this workflow with GitHub employees. This return
31+
// statement only gets hit if the user is a GitHub employee
32+
return
33+
} catch(err) {
34+
// An error will be thrown if the user is not a GitHub employee
35+
// If a user is not a GitHub employee, we should check to see if title has at least the minimum required number of words in it and if it does, we can exit the workflow
36+
37+
if(titleWordCount > titleWordCountMin) {
38+
return
39+
}
40+
}
41+
42+
//
43+
// Assuming the user is not a GitHub employee and the issue title
44+
// has the minimum number of words required, proceed.
45+
//
46+
47+
// Close the issue and add the invalid label
48+
await github.issues.update({
49+
owner: owner,
50+
repo: repo,
51+
issue_number: issue.number,
52+
labels: ['invalid'],
53+
state: 'closed'
54+
});
55+
56+
// Comment on the issue
57+
await github.issues.createComment({
58+
owner: owner,
59+
repo: repo,
60+
issue_number: issue.number,
61+
body: "This issue appears to have been opened accidentally. I'm going to close it now, but feel free to open a new issue or ask any questions in [discussions](https://github.com/github/docs/discussions)!"
62+
});

content/actions/guides/building-and-testing-java-with-gradle.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ steps:
113113
${{ runner.os }}-gradle-
114114
- name: Build with Gradle
115115
run: ./gradlew build
116+
- name: Cleanup Gradle Cache
117+
# Remove some files from the Gradle cache, so they aren't cached by GitHub Actions.
118+
# Restoring these files from a GitHub Actions cache might cause problems for future builds.
119+
run: |
120+
rm -f ~/.gradle/caches/modules-2/modules-2.lock
121+
rm -f ~/.gradle/caches/modules-2/gc.properties
116122
```
117123
{% endraw %}
118124

content/developers/apps/creating-ci-tests-with-the-checks-api.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ The code above gets the full repository name and the head SHA of the commit from
435435

436436
### Step 2.3. Running RuboCop
437437

438-
Great! You're cloning the repository and creating check runs using your CI server. Now you'll get into the nitty gritty details of the [RuboCop linter](https://rubocop.readthedocs.io/en/latest/basic_usage/#rubocop-as-a-code-style-checker) and [Checks API annotations](/rest/reference/checks#create-a-check-run).
438+
Great! You're cloning the repository and creating check runs using your CI server. Now you'll get into the nitty gritty details of the [RuboCop linter](https://docs.rubocop.org/rubocop/usage/basic_usage.html#code-style-checker) and [Checks API annotations](/rest/reference/checks#create-a-check-run).
439439

440440
The following code runs RuboCop and saves the style code errors in JSON format. Add this code below the call to `clone_repository` you added in the [previous step](#step-22-cloning-the-repository) and above the code that updates the check run to complete.
441441

@@ -447,7 +447,7 @@ logger.debug @report
447447
@output = JSON.parse @report
448448
```
449449

450-
The code above runs RuboCop on all files in the repository's directory. The option `--format json` is a handy way to save a copy of the linting results in a machine-parsable format. See the [RuboCop docs](https://rubocop.readthedocs.io/en/latest/formatters/#json-formatter) for details and an example of the JSON format.
450+
The code above runs RuboCop on all files in the repository's directory. The option `--format json` is a handy way to save a copy of the linting results in a machine-parsable format. See the [RuboCop docs](https://docs.rubocop.org/rubocop/formatters.html#json-formatter) for details and an example of the JSON format.
451451

452452
Because this code stores the RuboCop results in a `@report` variable, it can safely remove the checkout of the repository. This code also parses the JSON so you can easily access the keys and values in your GitHub App using the `@output` variable.
453453

@@ -588,7 +588,7 @@ This code limits the total number of annotations to 50. But you can modify this
588588

589589
When the `offense_count` is zero, the CI test is a `success`. If there are errors, this code sets the conclusion to `neutral` in order to prevent strictly enforcing errors from code linters. But you can change the conclusion to `failure` if you would like to ensure that the check suite fails when there are linting errors.
590590

591-
When errors are reported, the code above iterates through the `files` array in the RuboCop report. For each file, it extracts the file path and sets the annotation level to `notice`. You could go even further and set specific warning levels for each type of [RuboCop Cop](https://rubocop.readthedocs.io/en/latest/cops/), but to keep things simpler in this quickstart, all errors are set to a level of `notice`.
591+
When errors are reported, the code above iterates through the `files` array in the RuboCop report. For each file, it extracts the file path and sets the annotation level to `notice`. You could go even further and set specific warning levels for each type of [RuboCop Cop](https://docs.rubocop.org/rubocop/cops.html), but to keep things simpler in this quickstart, all errors are set to a level of `notice`.
592592

593593
This code also iterates through each error in the `offenses` array and collects the location of the offense and error message. After extracting the information needed, the code creates an annotation for each error and stores it in the `annotations` array. Because annotations only support start and end columns on the same line, `start_column` and `end_column` are only added to the `annotation` object if the start and end line values are the same.
594594

@@ -718,7 +718,7 @@ If the annotations are related to a file already included in the PR, the annotat
718718

719719
If you've made it this far, kudos! 👏 You've already created a CI test. In this section, you'll add one more feature that uses RuboCop to automatically fix the errors it finds. You already added the "Fix this" button in the [previous section](#step-25-updating-the-check-run-with-ci-test-results). Now you'll add the code to handle the `requested_action` check run event triggered when someone clicks the "Fix this" button.
720720

721-
The RuboCop tool [offers](https://rubocop.readthedocs.io/en/latest/basic_usage/#auto-correcting-offenses) the `--auto-correct` command-line option to automatically fix errors it finds. When you use the `--auto-correct` feature, the updates are applied to the local files on the server. You'll need to push the changes to GitHub after RuboCop does its magic.
721+
The RuboCop tool [offers](https://docs.rubocop.org/rubocop/usage/basic_usage.html#auto-correcting-offenses) the `--auto-correct` command-line option to automatically fix errors it finds. When you use the `--auto-correct` feature, the updates are applied to the local files on the server. You'll need to push the changes to GitHub after RuboCop does its magic.
722722

723723
To push to a repository, your app must have write permissions for "Repository contents." You set that permission back in [Step 2.2. Cloning the repository](#step-22-cloning-the-repository) to **Read & write**, so you're all set.
724724

content/github/getting-started-with-github/git-cheatsheet.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ versions:
77
enterprise-server: '*'
88
github-ae: '*'
99
---
10-
Learning all available Git commands at once can be a daunting task. Keep one of our [Git Cheat Sheets](https://services.github.com/on-demand/resources/cheatsheets/) nearby for reference. The Using Git Cheat Sheet is available in several languages. For more information, see the [resources page on the GitHub Services website](https://services.github.com/on-demand/resources/).
10+
Learning all available Git commands at once can be a daunting task. Our cheat sheets provide a quick reference for the commands you'll use most often: see "[Git Cheat Sheets](https://training.github.com/)." The "Using Git" cheat sheet is available in several languages.
1111

1212
In addition, take a look at our [Git and GitHub learning resources](/articles/git-and-github-learning-resources/) page that links to guides, videos and more.

data/glossaries/external.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
- term: bio
3838
description: >-
3939
The user-generated description found on a profile:
40-
https://help.github.com/articles/adding-a-bio-to-your-profile/
40+
[Adding a bio to your profile](/articles/adding-a-bio-to-your-profile)
4141
- term: billing cycle
4242
description: The interval of time for your specific billing plan.
4343
- term: billing email
@@ -160,8 +160,8 @@
160160
- term: contributions
161161
description: >-
162162
Specific activities on GitHub that will:
163-
- Add a square to a user's contribution graph: "[What counts as a contribution](https://help.github.com/articles/viewing-contributions-on-your-profile/#what-counts-as-a-contribution)"
164-
- Add activities to a user's timeline on their profile: "[Contribution activity](https://help.github.com/articles/viewing-contributions-on-your-profile/#contribution-activity)"
163+
- Add a square to a user's contribution graph: "[What counts as a contribution](/articles/viewing-contributions-on-your-profile/#what-counts-as-a-contribution)"
164+
- Add activities to a user's timeline on their profile: "[Contribution activity](/articles/viewing-contributions-on-your-profile/#contribution-activity)"
165165
- term: contributor
166166
description: >-
167167
A contributor is someone who does not have collaborator access to a repository but has contributed to a project and had a pull request they opened merged into the repository.
@@ -230,7 +230,7 @@
230230
description: >-
231231
A branch used to experiment with a new feature or fix an issue that is not in production. Also called a topic branch.
232232
- term: fenced code block
233-
description: An indented block of code you can create with GitHub Flavored Markdown using triple backticks \`\`\` before and after the code block. See this [example](https://help.github.com/en/articles/creating-and-highlighting-code-blocks#fenced-code-blocks).
233+
description: An indented block of code you can create with GitHub Flavored Markdown using triple backticks \`\`\` before and after the code block. See this [example](/articles/creating-and-highlighting-code-blocks#fenced-code-blocks).
234234
- term: fetch
235235
description: >-
236236
When you use `git fetch`, you're adding changes from the remote repository to

layouts/release-notes.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ <h2 class="border-bottom-0 m-0 p-0">
4747
</h2>
4848

4949
{% if patch.release_candidate %}
50-
<span class="IssueLabel bg-orange text-white ml-3">Release Candidate</span>
50+
<span class="IssueLabel bg-orange text-white ml-3" style="white-space: pre">Release Candidate</span>
5151
{% endif %}
5252

53-
<a href="https://enterprise.github.com/releases/{{ patch.version | replace: '-rc', '' }}/download" class="ml-3 text-small text-bold">
53+
<a href="https://enterprise.github.com/releases/{{ patch.downloadVersion }}/download" class="ml-3 text-small text-bold">
5454
Download
5555
</a>
5656

middleware/contextualizers/enterprise-release-notes.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,15 @@ const enterpriseReleases = require('../../lib/enterprise-server-releases').suppo
99
*/
1010
function sortPatchKeys (release, version) {
1111
const keys = Object.keys(release)
12-
.map(key => ({ version: `${version}.${key}`, patchVersion: key, ...release[key] }))
12+
.map(key => {
13+
const keyWithDots = key.replace(/-/g, '.')
14+
return {
15+
version: `${version}.${keyWithDots}`,
16+
patchVersion: keyWithDots,
17+
downloadVersion: `${version}.${keyWithDots.replace(/\.rc\d*$/, '')}`,
18+
...release[key]
19+
}
20+
})
1321
return keys
1422
.sort((a, b) => {
1523
if (semver.gt(a.version, b.version)) return -1

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@
161161
"test": "jest && eslint . && prettier -c \"**/*.{yml,yaml}\" && npm run check-deps",
162162
"prebrowser-test": "npm run build",
163163
"browser-test": "start-server-and-test browser-test-server 4001 browser-test-tests",
164-
"browser-test-server": "cross-env NODE_ENV=production ENABLED_LANGUAGES='en,ja' PORT=4001 node server.js",
164+
"browser-test-server": "cross-env NODE_ENV=production PORT=4001 node server.js",
165165
"browser-test-tests": "cross-env BROWSER=1 jest tests/browser/browser.js",
166166
"sync-search": "start-server-and-test sync-search-server 4002 sync-search-indices",
167167
"sync-search-dry-run": "DRY_RUN=1 npm run sync-search",

tests/browser/browser.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* global page, browser */
22
const sleep = require('await-sleep')
33
const { latest } = require('../../lib/enterprise-server-releases')
4+
const languages = require('../../lib/languages')
45

56
describe('homepage', () => {
67
jest.setTimeout(60 * 1000)
@@ -264,3 +265,19 @@ describe('card filters', () => {
264265
expect(noResultsClasses).not.toContain('d-none')
265266
})
266267
})
268+
269+
describe('language banner', () => {
270+
it('directs user to the English version of the article', async () => {
271+
const wipLanguageKey = Object.keys(languages).find(key => languages[key].wip)
272+
273+
// This kinda sucks, but if we don't have a WIP language, we currently can't
274+
// run a reliable test. But hey, on the bright side, if we don't have a WIP
275+
// language then this code will never run anyway!
276+
if (wipLanguageKey) {
277+
const res = await page.goto(`http://localhost:4001/${wipLanguageKey}/actions`)
278+
expect(res.ok()).toBe(true)
279+
const href = await page.$eval('a#to-english-doc', el => el.href)
280+
expect(href.endsWith('/en/actions')).toBe(true)
281+
}
282+
})
283+
})

0 commit comments

Comments
 (0)