build: create a PR for releases.json updates instead of trying to push to master (#341)
* Move expected version count & latest Electron version to its own fixture file * Automatically update expected version count & latest Electron version when updating the JSON file * Throw an error if a rejection occurs when the fetch releases script is run * reduce releases update frequency to once a week
This commit is contained in:
@@ -0,0 +1,31 @@
|
|||||||
|
const { Octokit } = require('@octokit/action')
|
||||||
|
|
||||||
|
const octokit = new Octokit()
|
||||||
|
|
||||||
|
const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/')
|
||||||
|
|
||||||
|
async function main () {
|
||||||
|
const prs = await octokit.pulls.list({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
state: 'open',
|
||||||
|
head: `${owner}:update-releases`
|
||||||
|
})
|
||||||
|
|
||||||
|
if (prs.data.length === 0) {
|
||||||
|
const pr = await octokit.pulls.create({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
title: 'build: update Electron releases JSON',
|
||||||
|
base: 'master',
|
||||||
|
head: 'update-releases',
|
||||||
|
body: 'Auto-update from GitHub Actions.',
|
||||||
|
maintainer_can_modify: true
|
||||||
|
})
|
||||||
|
console.log('Pull request created:', pr.html_url)
|
||||||
|
} else {
|
||||||
|
console.log('Pull request updated:', prs.data[0].html_url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
name: Auto-update Releases JSON file
|
name: Auto-update Releases JSON file
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * *'
|
- cron: '0 0 * * 1'
|
||||||
jobs:
|
jobs:
|
||||||
autoupdate:
|
autoupdate:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
- name: Fetch git branches
|
||||||
|
run: git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/*
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: '12.x'
|
node-version: '12.x'
|
||||||
@@ -21,6 +23,13 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-node-
|
${{ runner.os }}-node-
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
|
- name: Switch to release update branch
|
||||||
|
run: |
|
||||||
|
if git branch --remotes | grep -q origin/update-releases; then
|
||||||
|
git checkout update-releases
|
||||||
|
else
|
||||||
|
git checkout -b update-releases
|
||||||
|
fi
|
||||||
- name: Update Releases JSON
|
- name: Update Releases JSON
|
||||||
run: npm run electron-releases
|
run: npm run electron-releases
|
||||||
- name: Commit Changes to Releases JSON
|
- name: Commit Changes to Releases JSON
|
||||||
@@ -29,13 +38,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "machine github.com login $GITHUB_ACTOR password $GITHUB_TOKEN" > ~/.netrc
|
echo "machine github.com login $GITHUB_ACTOR password $GITHUB_TOKEN" > ~/.netrc
|
||||||
chmod 600 ~/.netrc
|
chmod 600 ~/.netrc
|
||||||
git add static/releases.json
|
git add static/releases.json tests/fixtures/releases-metadata.json
|
||||||
if test -n "$(git status -s)"; then
|
if test -n "$(git status -s)"; then
|
||||||
git config user.name "$GITHUB_ACTOR"
|
git config user.name "$GITHUB_ACTOR"
|
||||||
git config user.email "electron-bot@users.noreply.github.com"
|
git config user.email "electron-bot@users.noreply.github.com"
|
||||||
git diff --cached
|
git diff --cached
|
||||||
git commit -m "build: update Electron releases JSON"
|
git commit -m "build: update Electron releases JSON"
|
||||||
git push origin HEAD:$GITHUB_REF
|
git push origin update-releases
|
||||||
|
node --unhandled-rejections=strict .github/actions/create_releases_pr.js
|
||||||
else
|
else
|
||||||
echo No update needed
|
echo No update needed
|
||||||
fi
|
fi
|
||||||
|
|||||||
Generated
+81
-1
@@ -2940,6 +2940,50 @@
|
|||||||
"fastq": "^1.6.0"
|
"fastq": "^1.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@octokit/action": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@octokit/action/-/action-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-XkZwA1TIYbaliUaKHEV3Riz016tUrTJOzvvPfC4sMfRakXD3VatsJd0ZU8aFWdqi6hfKcfMAD5WRpA4cWpBjRA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@octokit/auth-action": "^1.2.0",
|
||||||
|
"@octokit/core": "^2.1.1",
|
||||||
|
"@octokit/plugin-paginate-rest": "^2.0.1",
|
||||||
|
"@octokit/plugin-rest-endpoint-methods": "^3.2.0",
|
||||||
|
"@octokit/types": "^2.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@octokit/plugin-paginate-rest": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-HzODcSUt9mjErly26TlTOGZrhf9bmF/FEDQ2zln1izhgmIV6ulsjsHmgmR4VZ0wzVr/m52Eb6U2XuyS8fkcR1A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@octokit/types": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@octokit/plugin-rest-endpoint-methods": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-3.2.0.tgz",
|
||||||
|
"integrity": "sha512-k+RLsegQn4s0wvAFYuk3R18FVKRg3ktvzIGW6MkmrSiSXBwYfaEsv4CuPysyef0DL+74DRj/X9MLJYlbleUO+Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@octokit/types": "^2.0.1",
|
||||||
|
"deprecation": "^2.3.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@octokit/auth-action": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@octokit/auth-action/-/auth-action-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-AlHcxjGUGIw86FNhEjO+kvNfcSeV1YDrV8BdGgceHCdtbh1DlI3jwsujY4Y2JjIsVpwKaoGQ4mL1s0354SiODA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@octokit/auth-token": "^2.4.0",
|
||||||
|
"@octokit/types": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@octokit/auth-token": {
|
"@octokit/auth-token": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz",
|
||||||
@@ -2948,6 +2992,20 @@
|
|||||||
"@octokit/types": "^2.0.0"
|
"@octokit/types": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@octokit/core": {
|
||||||
|
"version": "2.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-2.4.2.tgz",
|
||||||
|
"integrity": "sha512-fUx/Qt774cgiPhb3HRKfdl6iufVL/ltECkwkCg373I4lIPYvAPY4cbidVZqyVqHI+ThAIlFlTW8FT4QHChv3Sg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@octokit/auth-token": "^2.4.0",
|
||||||
|
"@octokit/graphql": "^4.3.1",
|
||||||
|
"@octokit/request": "^5.3.1",
|
||||||
|
"@octokit/types": "^2.0.0",
|
||||||
|
"before-after-hook": "^2.1.0",
|
||||||
|
"universal-user-agent": "^5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@octokit/endpoint": {
|
"@octokit/endpoint": {
|
||||||
"version": "5.5.3",
|
"version": "5.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.3.tgz",
|
||||||
@@ -2973,6 +3031,28 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@octokit/graphql": {
|
||||||
|
"version": "4.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.3.1.tgz",
|
||||||
|
"integrity": "sha512-hCdTjfvrK+ilU2keAdqNBWOk+gm1kai1ZcdjRfB30oA3/T6n53UVJb7w0L5cR3/rhU91xT3HSqCd+qbvH06yxA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@octokit/request": "^5.3.0",
|
||||||
|
"@octokit/types": "^2.0.0",
|
||||||
|
"universal-user-agent": "^4.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"universal-user-agent": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"os-name": "^3.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@octokit/plugin-paginate-rest": {
|
"@octokit/plugin-paginate-rest": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz",
|
||||||
@@ -14795,7 +14875,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"string_decoder": {
|
"string_decoder": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
|
|||||||
+2
-1
@@ -23,7 +23,7 @@
|
|||||||
"test:ci": "jest --config=jest.json --coverage --runInBand",
|
"test:ci": "jest --config=jest.json --coverage --runInBand",
|
||||||
"test:coverage": "cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
|
"test:coverage": "cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
|
||||||
"tsc": "tsc --noEmit -p .",
|
"tsc": "tsc --noEmit -p .",
|
||||||
"electron-releases": "node ./tools/fetch-releases.js"
|
"electron-releases": "node --unhandled-rejections=strict ./tools/fetch-releases.js"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Electron",
|
"Electron",
|
||||||
@@ -69,6 +69,7 @@
|
|||||||
"@electron-forge/maker-squirrel": "^6.0.0-beta.50",
|
"@electron-forge/maker-squirrel": "^6.0.0-beta.50",
|
||||||
"@electron-forge/maker-zip": "^6.0.0-beta.50",
|
"@electron-forge/maker-zip": "^6.0.0-beta.50",
|
||||||
"@electron-forge/publisher-github": "^6.0.0-beta.50",
|
"@electron-forge/publisher-github": "^6.0.0-beta.50",
|
||||||
|
"@octokit/action": "^2.0.0",
|
||||||
"@types/classnames": "^2.2.9",
|
"@types/classnames": "^2.2.9",
|
||||||
"@types/enzyme": "^3.10.5",
|
"@types/enzyme": "^3.10.5",
|
||||||
"@types/fs-extra": "^8.1.0",
|
"@types/fs-extra": "^8.1.0",
|
||||||
|
|||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"expectedVersionCount": 315,
|
||||||
|
"lastElectronVersion": "8.0.2"
|
||||||
|
}
|
||||||
@@ -4,6 +4,8 @@ import { TouchBarManager } from '../../src/renderer/touch-bar-manager';
|
|||||||
import { mockVersions } from '../mocks/electron-versions';
|
import { mockVersions } from '../mocks/electron-versions';
|
||||||
import { overridePlatform, resetPlatform } from '../utils';
|
import { overridePlatform, resetPlatform } from '../utils';
|
||||||
|
|
||||||
|
const { lastElectronVersion } = require('../fixtures/releases-metadata.json');
|
||||||
|
|
||||||
describe('TouchBarManager', () => {
|
describe('TouchBarManager', () => {
|
||||||
const appState = new AppState();
|
const appState = new AppState();
|
||||||
|
|
||||||
@@ -86,9 +88,9 @@ describe('TouchBarManager', () => {
|
|||||||
const { click } = touchBarMgr.getVersionSelectorEscButtonOptions();
|
const { click } = touchBarMgr.getVersionSelectorEscButtonOptions();
|
||||||
|
|
||||||
touchBarMgr.selectedVersion = '3.3.3';
|
touchBarMgr.selectedVersion = '3.3.3';
|
||||||
expect(appState.version).toBe('8.0.2');
|
expect(appState.version).toBe(lastElectronVersion);
|
||||||
click!();
|
click!();
|
||||||
expect(appState.version).toBe('8.0.2');
|
expect(appState.version).toBe(lastElectronVersion);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('version scrubber "select" method goes from index to version', () => {
|
it('version scrubber "select" method goes from index to version', () => {
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import {
|
|||||||
} from '../../src/renderer/versions';
|
} from '../../src/renderer/versions';
|
||||||
import { mockFetchOnce } from '../utils';
|
import { mockFetchOnce } from '../utils';
|
||||||
|
|
||||||
|
const { expectedVersionCount } = require('../fixtures/releases-metadata.json');
|
||||||
|
|
||||||
const mockVersions: Array<Partial<ElectronVersion>> = [
|
const mockVersions: Array<Partial<ElectronVersion>> = [
|
||||||
{ version: 'test-0', localPath: '/test/path/0' },
|
{ version: 'test-0', localPath: '/test/path/0' },
|
||||||
{ version: 'test-1', localPath: '/test/path/1' },
|
{ version: 'test-1', localPath: '/test/path/1' },
|
||||||
@@ -180,13 +182,13 @@ describe('versions', () => {
|
|||||||
it('falls back to a local require', () => {
|
it('falls back to a local require', () => {
|
||||||
(window as any).localStorage.getItem.mockReturnValueOnce(`garbage`);
|
(window as any).localStorage.getItem.mockReturnValueOnce(`garbage`);
|
||||||
|
|
||||||
expect(getKnownVersions().length).toBe(315);
|
expect(getKnownVersions().length).toBe(expectedVersionCount);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('falls back to a local require', () => {
|
it('falls back to a local require', () => {
|
||||||
(window as any).localStorage.getItem.mockReturnValueOnce(`[{ "garbage": "true" }]`);
|
(window as any).localStorage.getItem.mockReturnValueOnce(`[{ "garbage": "true" }]`);
|
||||||
|
|
||||||
expect(getKnownVersions().length).toBe(315);
|
expect(getKnownVersions().length).toBe(expectedVersionCount);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,15 @@ async function main() {
|
|||||||
|
|
||||||
await fs.remove(file)
|
await fs.remove(file)
|
||||||
await fs.outputFile(file, JSON.stringify(releases))
|
await fs.outputFile(file, JSON.stringify(releases))
|
||||||
|
|
||||||
|
console.log('Updating tests with new expected version count.')
|
||||||
|
|
||||||
|
const metadata = {
|
||||||
|
expectedVersionCount: releases.length,
|
||||||
|
lastElectronVersion: releases[releases.length - 1].version
|
||||||
|
}
|
||||||
|
const releasesMetadataPath = path.resolve(__dirname, '..', 'tests', 'fixtures', 'releases-metadata.json')
|
||||||
|
await fs.writeJson(releasesMetadataPath, metadata, { spaces: 2 })
|
||||||
}
|
}
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
|||||||
Reference in New Issue
Block a user