build: add support for fetching github token from sudowoodo (#43888)

build: add support for fetching github token from sudowoodo (#43808)

* build: add support for fetching github token from sudowoodo

* chore: update release notes cache for tests

* build: support nightlies repo correctly

* build: post token
This commit is contained in:
Samuel Attard 2024-09-23 13:56:29 -07:00 committed by GitHub
parent 2cc8a33f11
commit 4e5de0ca44
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 134 additions and 36 deletions

View file

@ -67,7 +67,8 @@ concurrency:
env:
ELECTRON_ARTIFACTS_BLOB_STORAGE: ${{ secrets.ELECTRON_ARTIFACTS_BLOB_STORAGE }}
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
ELECTRON_GITHUB_TOKEN: ${{ secrets.ELECTRON_GITHUB_TOKEN }}
SUDOWOODO_EXCHANGE_URL: ${{ secrets.SUDOWOODO_EXCHANGE_URL }}
SUDOWOODO_EXCHANGE_TOKEN: ${{ secrets.SUDOWOODO_EXCHANGE_TOKEN }}
GCLIENT_EXTRA_ARGS: ${{ inputs.target-platform == 'macos' && '--custom-var=checkout_mac=True --custom-var=host_os=mac' || '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True' }}
ELECTRON_OUT_DIR: Default

View file

@ -38,7 +38,6 @@ permissions:
env:
ELECTRON_OUT_DIR: Default
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
ELECTRON_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
test:

View file

@ -4,8 +4,9 @@ const assert = require('node:assert');
const got = require('got');
const { Octokit } = require('@octokit/rest');
const { createGitHubTokenStrategy } = require('./github-token');
const octokit = new Octokit({
auth: process.env.ELECTRON_GITHUB_TOKEN
authStrategy: createGitHubTokenStrategy('electron')
});
const BUILD_APPVEYOR_URL = 'https://ci.appveyor.com/api/builds';

View file

@ -1,9 +1,7 @@
if (!process.env.CI) require('dotenv-safe').load();
const { Octokit } = require('@octokit/rest');
const octokit = new Octokit({
auth: process.env.ELECTRON_GITHUB_TOKEN
});
const { createGitHubTokenStrategy } = require('./github-token');
if (process.argv.length < 3) {
console.log('Usage: find-release version');
@ -11,11 +9,20 @@ if (process.argv.length < 3) {
}
const version = process.argv[2];
const targetRepo = findRepo();
const octokit = new Octokit({
authStrategy: createGitHubTokenStrategy(targetRepo)
});
function findRepo () {
return version.indexOf('nightly') > 0 ? 'nightlies' : 'electron';
}
async function findRelease () {
const releases = await octokit.repos.listReleases({
owner: 'electron',
repo: version.indexOf('nightly') > 0 ? 'nightlies' : 'electron'
repo: targetRepo
});
const targetRelease = releases.data.find(release => release.tag_name === version);

View file

@ -1,12 +1,13 @@
const { Octokit } = require('@octokit/rest');
const got = require('got');
const octokit = new Octokit({
userAgent: 'electron-asset-fetcher',
auth: process.env.ELECTRON_GITHUB_TOKEN
});
const { createGitHubTokenStrategy } = require('./github-token');
async function getAssetContents (repo, assetId) {
const octokit = new Octokit({
userAgent: 'electron-asset-fetcher',
authStrategy: createGitHubTokenStrategy(repo)
});
const requestOptions = octokit.repos.getReleaseAsset.endpoint({
owner: 'electron',
repo,
@ -17,7 +18,7 @@ async function getAssetContents (repo, assetId) {
});
const { url, headers } = requestOptions;
headers.authorization = `token ${process.env.ELECTRON_GITHUB_TOKEN}`;
headers.authorization = `token ${(await octokit.auth()).token}`;
const response = await got(url, {
followRedirect: false,

View file

@ -0,0 +1,57 @@
const { createTokenAuth } = require('@octokit/auth-token');
const got = require('got').default;
const cachedTokens = Object.create(null);
async function ensureToken (repo) {
if (!cachedTokens[repo]) {
cachedTokens[repo] = await (async () => {
const { ELECTRON_GITHUB_TOKEN, SUDOWOODO_EXCHANGE_URL, SUDOWOODO_EXCHANGE_TOKEN } = process.env;
if (ELECTRON_GITHUB_TOKEN) {
return ELECTRON_GITHUB_TOKEN;
}
if (SUDOWOODO_EXCHANGE_URL && SUDOWOODO_EXCHANGE_TOKEN) {
const resp = await got.post(SUDOWOODO_EXCHANGE_URL + '?repo=' + repo, {
headers: {
Authorization: SUDOWOODO_EXCHANGE_TOKEN
},
throwHttpErrors: false
});
if (resp.statusCode !== 200) {
console.error('bad sudowoodo exchange response code:', resp.statusCode);
throw new Error('non-200 status code received from sudowoodo exchange function');
}
try {
return JSON.parse(resp.body).token;
} catch {
// Swallow as the error could include the token
throw new Error('Unexpected error parsing sudowoodo exchange response');
}
}
throw new Error('Could not find or fetch a valid GitHub Auth Token');
})();
}
}
module.exports.createGitHubTokenStrategy = (repo) => () => {
let tokenAuth = null;
async function ensureTokenAuth () {
if (!tokenAuth) {
await ensureToken(repo);
tokenAuth = createTokenAuth(cachedTokens[repo]);
}
}
async function auth () {
await ensureTokenAuth();
return await tokenAuth();
}
auth.hook = async (...args) => {
await ensureTokenAuth();
return await tokenAuth.hook(...args);
};
return auth;
};

View file

@ -9,8 +9,9 @@ const { ELECTRON_DIR } = require('../../lib/utils');
const notesGenerator = require('./notes.js');
const { Octokit } = require('@octokit/rest');
const { createGitHubTokenStrategy } = require('../github-token');
const octokit = new Octokit({
auth: process.env.ELECTRON_GITHUB_TOKEN
authStrategy: createGitHubTokenStrategy('electron')
});
const semverify = version => version.replace(/^origin\//, '').replace(/[xy]/g, '0').replace(/-/g, '.');

View file

@ -8,11 +8,13 @@ const path = require('node:path');
const { GitProcess } = require('dugite');
const { Octokit } = require('@octokit/rest');
const octokit = new Octokit({
auth: process.env.ELECTRON_GITHUB_TOKEN
});
const { ELECTRON_DIR } = require('../../lib/utils');
const { createGitHubTokenStrategy } = require('../github-token');
const octokit = new Octokit({
authStrategy: createGitHubTokenStrategy('electron')
});
const MAX_FAIL_COUNT = 3;
const CHECK_INTERVAL = 5000;

View file

@ -13,6 +13,7 @@ const path = require('node:path');
const readline = require('node:readline');
const releaseNotesGenerator = require('./notes/index.js');
const { getCurrentBranch, ELECTRON_DIR } = require('../lib/utils.js');
const { createGitHubTokenStrategy } = require('./github-token');
const bumpType = args._[0];
const targetRepo = getRepo();
@ -21,7 +22,7 @@ function getRepo () {
}
const octokit = new Octokit({
auth: process.env.ELECTRON_GITHUB_TOKEN
authStrategy: createGitHubTokenStrategy(getRepo())
});
require('colors');

View file

@ -10,10 +10,7 @@ const rootPackageJson = require('../../package.json');
const { Octokit } = require('@octokit/rest');
const { getAssetContents } = require('./get-asset');
const octokit = new Octokit({
userAgent: 'electron-npm-publisher',
auth: process.env.ELECTRON_GITHUB_TOKEN
});
const { createGitHubTokenStrategy } = require('./github-token');
if (!process.env.ELECTRON_NPM_OTP) {
console.error('Please set ELECTRON_NPM_OTP');
@ -45,6 +42,16 @@ let npmTag = '';
const currentElectronVersion = getElectronVersion();
const isNightlyElectronVersion = currentElectronVersion.includes('nightly');
const targetRepo = getRepo();
const octokit = new Octokit({
userAgent: 'electron-npm-publisher',
authStrategy: createGitHubTokenStrategy(targetRepo)
});
function getRepo () {
return isNightlyElectronVersion ? 'nightlies' : 'electron';
}
new Promise((resolve, reject) => {
temp.mkdir('electron-npm', (err, dirPath) => {

View file

@ -6,16 +6,17 @@ const args = require('minimist')(process.argv.slice(2), {
default: { releaseID: '' }
});
const { Octokit } = require('@octokit/rest');
const octokit = new Octokit({
auth: process.env.ELECTRON_GITHUB_TOKEN
});
const { createGitHubTokenStrategy } = require('./github-token');
require('colors');
const pass = '✓'.green;
const fail = '✗'.red;
async function deleteDraft (releaseId, targetRepo) {
const octokit = new Octokit({
authStrategy: createGitHubTokenStrategy(targetRepo)
});
try {
const result = await octokit.repos.getRelease({
owner: 'electron',
@ -41,6 +42,10 @@ async function deleteDraft (releaseId, targetRepo) {
}
async function deleteTag (tag, targetRepo) {
const octokit = new Octokit({
authStrategy: createGitHubTokenStrategy(targetRepo)
});
try {
await octokit.git.deleteRef({
owner: 'electron',

View file

@ -25,16 +25,17 @@ const fail = '✗'.red;
const { ELECTRON_DIR } = require('../lib/utils');
const { getElectronVersion } = require('../lib/get-version');
const getUrlHash = require('./get-url-hash');
const { createGitHubTokenStrategy } = require('./github-token');
const pkgVersion = `v${getElectronVersion()}`;
const octokit = new Octokit({
auth: process.env.ELECTRON_GITHUB_TOKEN
});
const targetRepo = pkgVersion.indexOf('nightly') > 0 ? 'nightlies' : 'electron';
let failureCount = 0;
const octokit = new Octokit({
authStrategy: createGitHubTokenStrategy(targetRepo)
});
async function getDraftRelease (version, skipValidation) {
const releaseInfo = await octokit.repos.listReleases({
owner: 'electron',
@ -388,7 +389,7 @@ async function verifyDraftGitHubReleaseAssets (release) {
});
const { url, headers } = requestOptions;
headers.authorization = `token ${process.env.ELECTRON_GITHUB_TOKEN}`;
headers.authorization = `token ${(await octokit.auth()).token}`;
const response = await got(url, {
followRedirect: false,

View file

@ -1,10 +1,6 @@
import { Octokit } from '@octokit/rest';
import * as fs from 'node:fs';
const octokit = new Octokit({
auth: process.env.ELECTRON_GITHUB_TOKEN,
log: console
});
import { createGitHubTokenStrategy } from '../github-token';
if (!process.env.CI) require('dotenv-safe').load();
@ -47,6 +43,11 @@ const targetRepo = releaseVersion.indexOf('nightly') > 0 ? 'nightlies' : 'electr
const uploadUrl = `https://uploads.github.com/repos/electron/${targetRepo}/releases/${releaseId}/assets{?name,label}`;
let retry = 0;
const octokit = new Octokit({
authStrategy: createGitHubTokenStrategy(targetRepo),
log: console
});
function uploadToGitHub () {
console.log(`in uploadToGitHub for ${filePath}, ${fileName}`);
const fileData = fs.createReadStream(filePath);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
{"status":200,"url":"https://api.github.com/repos/electron/electron/issues/39714/comments?per_page=100","headers":{"accept-ranges":"bytes","access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","cache-control":"public, max-age=60, s-maxage=60","content-encoding":"gzip","content-length":"645","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Fri, 20 Sep 2024 04:00:38 GMT","etag":"W/\"6fcb725196d33f08ba1ccba10f866b6bc0a51030d157259b2cce6d2758910e24\"","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept,Accept-Encoding, Accept, X-Requested-With","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"C623:36E55D:247B64D:4558DD8:66ECF365","x-ratelimit-limit":"60","x-ratelimit-remaining":"46","x-ratelimit-reset":"1726805543","x-ratelimit-resource":"core","x-ratelimit-used":"14","x-xss-protection":"0"},"data":[{"url":"https://api.github.com/repos/electron/electron/issues/comments/1707509099","html_url":"https://github.com/electron/electron/pull/39714#issuecomment-1707509099","issue_url":"https://api.github.com/repos/electron/electron/issues/39714","id":1707509099,"node_id":"IC_kwDOAI8xS85lxoVr","user":{"login":"release-clerk[bot]","id":42386326,"node_id":"MDM6Qm90NDIzODYzMjY=","avatar_url":"https://avatars.githubusercontent.com/in/16104?v=4","gravatar_id":"","url":"https://api.github.com/users/release-clerk%5Bbot%5D","html_url":"https://github.com/apps/release-clerk","followers_url":"https://api.github.com/users/release-clerk%5Bbot%5D/followers","following_url":"https://api.github.com/users/release-clerk%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/release-clerk%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/release-clerk%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/release-clerk%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/release-clerk%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/release-clerk%5Bbot%5D/repos","events_url":"https://api.github.com/users/release-clerk%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/release-clerk%5Bbot%5D/received_events","type":"Bot","site_admin":false},"created_at":"2023-09-06T01:18:00Z","updated_at":"2023-09-06T01:18:00Z","author_association":"NONE","body":"**Release Notes Persisted**\n\n> Updated Chromium to 118.0.5991.0.","reactions":{"url":"https://api.github.com/repos/electron/electron/issues/comments/1707509099/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]}

View file

@ -0,0 +1 @@
{"status":200,"url":"https://api.github.com/repos/electron/electron/issues/39944/comments?per_page=100","headers":{"accept-ranges":"bytes","access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","cache-control":"public, max-age=60, s-maxage=60","content-encoding":"gzip","content-length":"869","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Fri, 20 Sep 2024 04:00:38 GMT","etag":"W/\"b34114fbdb2350380ab4adac1c9c48568bebf0e5c0a427ecaa40402f7166456c\"","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept,Accept-Encoding, Accept, X-Requested-With","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"C623:36E55D:247B74B:4558FC8:66ECF366","x-ratelimit-limit":"60","x-ratelimit-remaining":"44","x-ratelimit-reset":"1726805543","x-ratelimit-resource":"core","x-ratelimit-used":"16","x-xss-protection":"0"},"data":[{"url":"https://api.github.com/repos/electron/electron/issues/comments/1732251450","html_url":"https://github.com/electron/electron/pull/39944#issuecomment-1732251450","issue_url":"https://api.github.com/repos/electron/electron/issues/39944","id":1732251450,"node_id":"IC_kwDOAI8xS85nQA86","user":{"login":"codebytere","id":2036040,"node_id":"MDQ6VXNlcjIwMzYwNDA=","avatar_url":"https://avatars.githubusercontent.com/u/2036040?v=4","gravatar_id":"","url":"https://api.github.com/users/codebytere","html_url":"https://github.com/codebytere","followers_url":"https://api.github.com/users/codebytere/followers","following_url":"https://api.github.com/users/codebytere/following{/other_user}","gists_url":"https://api.github.com/users/codebytere/gists{/gist_id}","starred_url":"https://api.github.com/users/codebytere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codebytere/subscriptions","organizations_url":"https://api.github.com/users/codebytere/orgs","repos_url":"https://api.github.com/users/codebytere/repos","events_url":"https://api.github.com/users/codebytere/events{/privacy}","received_events_url":"https://api.github.com/users/codebytere/received_events","type":"User","site_admin":false},"created_at":"2023-09-23T08:19:47Z","updated_at":"2023-09-23T08:19:47Z","author_association":"MEMBER","body":"Needs https://github.com/electron/build-tools/pull/516","reactions":{"url":"https://api.github.com/repos/electron/electron/issues/comments/1732251450/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/electron/electron/issues/comments/1740333567","html_url":"https://github.com/electron/electron/pull/39944#issuecomment-1740333567","issue_url":"https://api.github.com/repos/electron/electron/issues/39944","id":1740333567,"node_id":"IC_kwDOAI8xS85nu2H_","user":{"login":"release-clerk[bot]","id":42386326,"node_id":"MDM6Qm90NDIzODYzMjY=","avatar_url":"https://avatars.githubusercontent.com/in/16104?v=4","gravatar_id":"","url":"https://api.github.com/users/release-clerk%5Bbot%5D","html_url":"https://github.com/apps/release-clerk","followers_url":"https://api.github.com/users/release-clerk%5Bbot%5D/followers","following_url":"https://api.github.com/users/release-clerk%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/release-clerk%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/release-clerk%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/release-clerk%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/release-clerk%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/release-clerk%5Bbot%5D/repos","events_url":"https://api.github.com/users/release-clerk%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/release-clerk%5Bbot%5D/received_events","type":"Bot","site_admin":false},"created_at":"2023-09-29T05:26:44Z","updated_at":"2023-09-29T05:26:44Z","author_association":"NONE","body":"**Release Notes Persisted**\n\n> Updated Chromium to 119.0.6029.0.","reactions":{"url":"https://api.github.com/repos/electron/electron/issues/comments/1740333567/reactions","total_count":2,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":1,"eyes":0},"performed_via_github_app":null}]}

View file

@ -0,0 +1 @@
{"status":200,"url":"https://api.github.com/repos/electron/electron/issues/40045/comments?per_page=100","headers":{"accept-ranges":"bytes","access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","cache-control":"public, max-age=60, s-maxage=60","content-encoding":"gzip","content-length":"645","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Fri, 20 Sep 2024 04:00:38 GMT","etag":"W/\"597a0b18dff7544d3742956759f06c9233095b92fdc8e3a1ac78afaf61a42b5c\"","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept,Accept-Encoding, Accept, X-Requested-With","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"C623:36E55D:247B6D4:4558ED3:66ECF366","x-ratelimit-limit":"60","x-ratelimit-remaining":"45","x-ratelimit-reset":"1726805543","x-ratelimit-resource":"core","x-ratelimit-used":"15","x-xss-protection":"0"},"data":[{"url":"https://api.github.com/repos/electron/electron/issues/comments/1743831479","html_url":"https://github.com/electron/electron/pull/40045#issuecomment-1743831479","issue_url":"https://api.github.com/repos/electron/electron/issues/40045","id":1743831479,"node_id":"IC_kwDOAI8xS85n8MG3","user":{"login":"release-clerk[bot]","id":42386326,"node_id":"MDM6Qm90NDIzODYzMjY=","avatar_url":"https://avatars.githubusercontent.com/in/16104?v=4","gravatar_id":"","url":"https://api.github.com/users/release-clerk%5Bbot%5D","html_url":"https://github.com/apps/release-clerk","followers_url":"https://api.github.com/users/release-clerk%5Bbot%5D/followers","following_url":"https://api.github.com/users/release-clerk%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/release-clerk%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/release-clerk%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/release-clerk%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/release-clerk%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/release-clerk%5Bbot%5D/repos","events_url":"https://api.github.com/users/release-clerk%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/release-clerk%5Bbot%5D/received_events","type":"Bot","site_admin":false},"created_at":"2023-10-02T22:01:11Z","updated_at":"2023-10-02T22:01:11Z","author_association":"NONE","body":"**Release Notes Persisted**\n\n> Updated Chromium to 119.0.6043.0.","reactions":{"url":"https://api.github.com/repos/electron/electron/issues/comments/1743831479/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]}

View file

@ -0,0 +1 @@
{"status":200,"url":"https://api.github.com/repos/electron/electron/issues/40076/comments?per_page=100","headers":{"accept-ranges":"bytes","access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","cache-control":"public, max-age=60, s-maxage=60","content-encoding":"gzip","content-length":"894","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Fri, 20 Sep 2024 04:00:38 GMT","etag":"W/\"b11c58261437bdbb984540cd6090cfe239f8f4b5b7af801f6f711e7f0bbe5915\"","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept,Accept-Encoding, Accept, X-Requested-With","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"C623:36E55D:247B8AF:4559259:66ECF366","x-ratelimit-limit":"60","x-ratelimit-remaining":"42","x-ratelimit-reset":"1726805543","x-ratelimit-resource":"core","x-ratelimit-used":"18","x-xss-protection":"0"},"data":[{"url":"https://api.github.com/repos/electron/electron/issues/comments/1749810095","html_url":"https://github.com/electron/electron/pull/40076#issuecomment-1749810095","issue_url":"https://api.github.com/repos/electron/electron/issues/40076","id":1749810095,"node_id":"IC_kwDOAI8xS85oS_uv","user":{"login":"release-clerk[bot]","id":42386326,"node_id":"MDM6Qm90NDIzODYzMjY=","avatar_url":"https://avatars.githubusercontent.com/in/16104?v=4","gravatar_id":"","url":"https://api.github.com/users/release-clerk%5Bbot%5D","html_url":"https://github.com/apps/release-clerk","followers_url":"https://api.github.com/users/release-clerk%5Bbot%5D/followers","following_url":"https://api.github.com/users/release-clerk%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/release-clerk%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/release-clerk%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/release-clerk%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/release-clerk%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/release-clerk%5Bbot%5D/repos","events_url":"https://api.github.com/users/release-clerk%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/release-clerk%5Bbot%5D/received_events","type":"Bot","site_admin":false},"created_at":"2023-10-05T23:59:43Z","updated_at":"2023-10-05T23:59:43Z","author_association":"NONE","body":"**Release Notes Persisted**\n\n> Updated Chromium to 119.0.6045.0.","reactions":{"url":"https://api.github.com/repos/electron/electron/issues/comments/1749810095/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null},{"url":"https://api.github.com/repos/electron/electron/issues/comments/1749846515","html_url":"https://github.com/electron/electron/pull/40076#issuecomment-1749846515","issue_url":"https://api.github.com/repos/electron/electron/issues/40076","id":1749846515,"node_id":"IC_kwDOAI8xS85oTInz","user":{"login":"ckerr","id":70381,"node_id":"MDQ6VXNlcjcwMzgx","avatar_url":"https://avatars.githubusercontent.com/u/70381?v=4","gravatar_id":"","url":"https://api.github.com/users/ckerr","html_url":"https://github.com/ckerr","followers_url":"https://api.github.com/users/ckerr/followers","following_url":"https://api.github.com/users/ckerr/following{/other_user}","gists_url":"https://api.github.com/users/ckerr/gists{/gist_id}","starred_url":"https://api.github.com/users/ckerr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckerr/subscriptions","organizations_url":"https://api.github.com/users/ckerr/orgs","repos_url":"https://api.github.com/users/ckerr/repos","events_url":"https://api.github.com/users/ckerr/events{/privacy}","received_events_url":"https://api.github.com/users/ckerr/received_events","type":"User","site_admin":false},"created_at":"2023-10-06T00:56:09Z","updated_at":"2023-10-06T00:56:09Z","author_association":"MEMBER","body":"Ah, merged while I was reading. :sweat_smile: FWIW @jkleinsc here's a tardy :+1: on the glib/gio changes","reactions":{"url":"https://api.github.com/repos/electron/electron/issues/comments/1749846515/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long