Try to prevent 403 when accessing the GitHub API (#168)

37ac1c5 · Paulo F. Oliveira · 2023-01-04 07:27

5 files +82 -53
Message
{commit_body(@commit)}

Files changed

modified .github/workflows/action.yml
+4 −1
@@ -9,6 +9,9 @@ on:
9 9 branches:
10 10 - main
11 11
12 +env:
13 + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
14 +
12 15 jobs:
13 16 check_integrity:
14 17 name: Expected local npm actions
@@ -28,7 +31,7 @@ jobs:
28 31 - run: npm run yamllint
29 32 - run: npm run jslint
30 33 - name: Check if build left artifacts
31 run: git diff --exit-code
34 + run: git diff --exit-code --ignore-space-at-eol
32 35
33 36 unit_tests_ubuntu:
34 37 name: Unit tests (Ubuntu)
modified .github/workflows/ubuntu.yml
+3 −0
@@ -9,6 +9,9 @@ on:
9 9 branches:
10 10 - main
11 11
12 +env:
13 + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
14 +
12 15 jobs:
13 16 integration_test:
14 17 name: >
modified .github/workflows/windows.yml
+3 −0
@@ -9,6 +9,9 @@ on:
9 9 branches:
10 10 - main
11 11
12 +env:
13 + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
14 +
12 15 jobs:
13 16 integration_test:
14 17 name: >
modified dist/index.js
+36 −26
@@ -7440,7 +7440,7 @@ async function getOTPVersions(osVersion) {
7440 7440 })
7441 7441 } else if (process.platform === 'win32') {
7442 7442 otpVersionsListings.forEach((otpVersionsListing) => {
7443 JSON.parse(otpVersionsListing)
7443 + jsonParse(otpVersionsListing)
7444 7444 .map((x) => x.assets)
7445 7445 .flat()
7446 7446 .filter((x) => x.name.match(/^otp_win64_.*.exe$/))
@@ -7487,7 +7487,7 @@ async function getGleamVersions() {
7487 7487 )
7488 7488 const gleamVersionsListing = []
7489 7489 resultJSONs.forEach((resultJSON) => {
7490 JSON.parse(resultJSON)
7490 + jsonParse(resultJSON)
7491 7491 .map((x) => x.tag_name)
7492 7492 .sort()
7493 7493 .forEach((v) => gleamVersionsListing.push(v))
@@ -7502,7 +7502,7 @@ async function getRebar3Versions() {
7502 7502 )
7503 7503 const rebar3VersionsListing = []
7504 7504 resultJSONs.forEach((resultJSON) => {
7505 JSON.parse(resultJSON)
7505 + jsonParse(resultJSON)
7506 7506 .map((x) => x.tag_name)
7507 7507 .sort()
7508 7508 .forEach((v) => rebar3VersionsListing.push(v))
@@ -7609,33 +7609,33 @@ async function get(url0, pageIdxs) {
7609 7609 function getPage(pageIdx) {
7610 7610 return new Promise((resolve, reject) => {
7611 7611 const url = new URL(url0)
7612 + const headers = {
7613 + 'user-agent': 'setup-beam',
7614 + }
7615 + if (process.env.GITHUB_TOKEN) {
7616 + headers.authorization = `Bearer ${process.env.GITHUB_TOKEN}`
7617 + }
7612 7618 if (pageIdx !== null) {
7613 7619 url.searchParams.append('page', pageIdx)
7614 7620 }
7615 7621 https
7616 .get(
7617 url,
7618 {
7619 headers: { 'user-agent': 'setup-beam' },
7620 },
7621 (res) => {
7622 let data = ''
7623 res.on('data', (chunk) => {
7624 data += chunk
7625 })
7626 res.on('end', () => {
7627 if (res.statusCode >= 400 && res.statusCode <= 599) {
7628 reject(
7629 new Error(
7630 `Got ${res.statusCode} from ${url}. Exiting with error`,
7631 ),
7632 )
7633 } else {
7634 resolve(data)
7635 }
7636 })
7637 },
7638 )
7622 + .get(url, { headers }, (res) => {
7623 + let data = ''
7624 + res.on('data', (chunk) => {
7625 + data += chunk
7626 + })
7627 + res.on('end', () => {
7628 + if (res.statusCode >= 400 && res.statusCode <= 599) {
7629 + reject(
7630 + new Error(
7631 + `Got ${res.statusCode} from ${url}. Exiting with error`,
7632 + ),
7633 + )
7634 + } else {
7635 + resolve(data)
7636 + }
7637 + })
7638 + })
7639 7639 .on('error', (err) => {
7640 7640 reject(err)
7641 7641 })
@@ -7716,6 +7716,16 @@ function parseVersionFile(versionFilePath0) {
7716 7716 return appVersions
7717 7717 }
7718 7718
7719 +function jsonParse(maybeJson) {
7720 + try {
7721 + return JSON.parse(maybeJson)
7722 + } catch (exc) {
7723 + throw new Error(
7724 + `Got an exception when trying to parse non-JSON ${maybeJson}: ${exc}`,
7725 + )
7726 + }
7727 +}
7728 +
7719 7729 module.exports = {
7720 7730 getOTPVersion,
7721 7731 getElixirVersion,
modified src/setup-beam.js
+36 −26
@@ -247,7 +247,7 @@ async function getOTPVersions(osVersion) {
247 247 })
248 248 } else if (process.platform === 'win32') {
249 249 otpVersionsListings.forEach((otpVersionsListing) => {
250 JSON.parse(otpVersionsListing)
250 + jsonParse(otpVersionsListing)
251 251 .map((x) => x.assets)
252 252 .flat()
253 253 .filter((x) => x.name.match(/^otp_win64_.*.exe$/))
@@ -294,7 +294,7 @@ async function getGleamVersions() {
294 294 )
295 295 const gleamVersionsListing = []
296 296 resultJSONs.forEach((resultJSON) => {
297 JSON.parse(resultJSON)
297 + jsonParse(resultJSON)
298 298 .map((x) => x.tag_name)
299 299 .sort()
300 300 .forEach((v) => gleamVersionsListing.push(v))
@@ -309,7 +309,7 @@ async function getRebar3Versions() {
309 309 )
310 310 const rebar3VersionsListing = []
311 311 resultJSONs.forEach((resultJSON) => {
312 JSON.parse(resultJSON)
312 + jsonParse(resultJSON)
313 313 .map((x) => x.tag_name)
314 314 .sort()
315 315 .forEach((v) => rebar3VersionsListing.push(v))
@@ -416,33 +416,33 @@ async function get(url0, pageIdxs) {
416 416 function getPage(pageIdx) {
417 417 return new Promise((resolve, reject) => {
418 418 const url = new URL(url0)
419 + const headers = {
420 + 'user-agent': 'setup-beam',
421 + }
422 + if (process.env.GITHUB_TOKEN) {
423 + headers.authorization = `Bearer ${process.env.GITHUB_TOKEN}`
424 + }
419 425 if (pageIdx !== null) {
420 426 url.searchParams.append('page', pageIdx)
421 427 }
422 428 https
423 .get(
424 url,
425 {
426 headers: { 'user-agent': 'setup-beam' },
427 },
428 (res) => {
429 let data = ''
430 res.on('data', (chunk) => {
431 data += chunk
432 })
433 res.on('end', () => {
434 if (res.statusCode >= 400 && res.statusCode <= 599) {
435 reject(
436 new Error(
437 `Got ${res.statusCode} from ${url}. Exiting with error`,
438 ),
439 )
440 } else {
441 resolve(data)
442 }
443 })
444 },
445 )
429 + .get(url, { headers }, (res) => {
430 + let data = ''
431 + res.on('data', (chunk) => {
432 + data += chunk
433 + })
434 + res.on('end', () => {
435 + if (res.statusCode >= 400 && res.statusCode <= 599) {
436 + reject(
437 + new Error(
438 + `Got ${res.statusCode} from ${url}. Exiting with error`,
439 + ),
440 + )
441 + } else {
442 + resolve(data)
443 + }
444 + })
445 + })
446 446 .on('error', (err) => {
447 447 reject(err)
448 448 })
@@ -523,6 +523,16 @@ function parseVersionFile(versionFilePath0) {
523 523 return appVersions
524 524 }
525 525
526 +function jsonParse(maybeJson) {
527 + try {
528 + return JSON.parse(maybeJson)
529 + } catch (exc) {
530 + throw new Error(
531 + `Got an exception when trying to parse non-JSON ${maybeJson}: ${exc}`,
532 + )
533 + }
534 +}
535 +
526 536 module.exports = {
527 537 getOTPVersion,
528 538 getElixirVersion,

Parents: 2d314bc