Skip to content

Commit a8919f9

Browse files
authored
Update TWiN script (#1047)
* Retrieves previous 7 days of contributions by default * Checks all repos under the `nushell` user - Reports against the most recent (up to 30, and we currently only have 26) with updates. * Uses the GitHub client to authenticate if available, with fallback to a token, then username/password * Cleans up a lot of the URL building using more recent Nushell commands.
1 parent c17dcc3 commit a8919f9

File tree

1 file changed

+77
-32
lines changed

1 file changed

+77
-32
lines changed

make_release/this_week_in_nu_weekly.nu

+77-32
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,74 @@
33
# Repos to monitor
44

55
def query-week-span [] {
6-
let site_table = [
7-
[site repo];
8-
[Nushell nushell]
9-
[Extension vscode-nushell-lang]
10-
[Documentation nushell.github.io]
11-
[Wasm demo]
12-
[Nu_Scripts nu_scripts]
13-
[RFCs rfcs]
14-
[reedline reedline]
15-
[Nana nana]
16-
# ] [Jupyter jupyter]
17-
]
18-
19-
let query_prefix = "https://api.github.com/search/issues?q=repo:nushell/"
20-
let query_date = (seq date --days 7 -r | get 6)
21-
let per_page = "100"
22-
let page_num = "1" # need to implement iterating pages
23-
let colon = "%3A"
24-
let gt = "%3E"
25-
let eq = "%3D"
26-
let amp = "%26"
27-
let query_suffix = $"+is($colon)pr+is($colon)merged+merged($colon)($gt)($eq)($query_date)&per_page=100&page=1"
28-
29-
for repo in $site_table {
30-
let query_string = $"($query_prefix)($repo.repo)($query_suffix)"
31-
let site_json = (http get -u $env.GITHUB_USERNAME -p $env.GITHUB_PASSWORD $query_string | get items | select html_url user.login title)
6+
# Update the '7' below to however many days it has been since the last TWiN
7+
let query_date = (seq date --days 21 -r | get 7)
8+
9+
# The heading mappings for each repository. This is only
10+
# used to display the Heading for each reposting in TWiN.
11+
# Repos without a mapping (that have activity) will simply
12+
# default to the repo name.
13+
let repo_headings = {
14+
nushell: Nushell
15+
nushell.github.io: Documentation
16+
reedline: reedline
17+
nu_scripts: Nu_Scripts
18+
nupm: NUPM
19+
demo: Wasm
20+
nufmt: nufmt
21+
awesome-nu: "Awesome Nu"
22+
tree-sitter-nu: Tree-sitter
23+
new-nu-parser: "New nu-parser"
24+
rfcs: RFCs
25+
nana: Nana
26+
integrations: Integrations
27+
vscode-nushell-lang: "VSCode Extension"
28+
nu_plugin_template: "Plugin Template"
29+
grammar: Grammar
30+
nu_jupyter: Jupyter
31+
}
32+
33+
# If environment variables exists for GH username/pw, use
34+
# them. If a token is available, it will take precedence,
35+
# so passing an empty username/password isn't a problem.
36+
let gh_username = ($env.GITHUB_USERNAME? | default "")
37+
let gh_password = ($env.GITHUB_PASSWORD? | default "")
38+
let gh_token = $env.GH_AUTH_TOKEN? | default (try { gh auth token })
39+
let headers = match $gh_token {
40+
null => {}
41+
_ => { Authorization: $'Bearer ($gh_token)' }
42+
}
43+
44+
let repos = (
45+
http get -H $headers -u $gh_username -p $gh_password https://api.github.com/users/nushell/repos?sort=pushed
46+
| get name
47+
| where $it != 'nightly'
48+
| where $it != 'this_week_in_nu'
49+
| first 30
50+
)
51+
52+
for repo in $repos {
53+
let query_string = (
54+
$"https://api.github.com/search/issues"
55+
| url parse
56+
| merge {
57+
params: {
58+
q: $'repo:nushell/($repo) is:pr is:merged merged:>=($query_date)'
59+
page: 1
60+
per_page: 100
61+
}
62+
}
63+
| url join
64+
)
65+
let site_json = (
66+
http get -H $headers -u $gh_username -p $gh_password $query_string
67+
| get items
68+
| select html_url user.login title
69+
)
3270

3371
if not ($site_json | all { |it| $it | is-empty }) {
34-
print $"(char nl)## ($repo.site)(char nl)"
72+
let heading_name = ($repo_headings | get -i $repo | default $repo)
73+
print $"(char nl)## ($heading_name)(char nl)"
3574

3675
for user in ($site_json | group-by "user.login" | transpose user prs) {
3776
let user_name = $user.user
@@ -52,12 +91,18 @@ def query-week-span [] {
5291
}
5392
}
5493

55-
# 2019-08-23 was the release of 0.2.0, the first public release
56-
let week_num = ((seq date -b '2019-08-23' -n 7 | length) - 1)
57-
print $"# This week in Nushell #($week_num)(char nl)"
94+
let has_token = (try { gh auth token }) != null
95+
let has_username_pw = ($env | get -i GITHUB_USERNAME | is-not-empty) and ($env | get -i GITHUB_PASSWORD | is-not-empty)
5896

59-
if ($env | get -i GITHUB_USERNAME | is-empty) or ($env | get -i GITHUB_PASSWORD | is-empty) {
60-
print 'Please set GITHUB_USERNAME and GITHUB_PASSWORD in $env to use this script'
97+
if not ($has_token or $has_username_pw) {
98+
print "This script requires either a working GitHub client that returns `gh auth token` or"
99+
print "$env.GITHUB_USERNAME and $env.GITHUB_PASSWORD. Neither were found."
61100
} else {
101+
# 2019-08-23 was the release of 0.2.0, the first public release
102+
103+
let week_num = ((seq date -b '2019-08-23' -n 7 | length) - 1)
104+
print $"# This week in Nushell #($week_num)(char nl)"
105+
62106
query-week-span
63107
}
108+

0 commit comments

Comments
 (0)