-
Notifications
You must be signed in to change notification settings - Fork 356
Automate the bundle upgrade #1630
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
e85546c
1c0a788
33f3087
a86046f
f6091a0
98173be
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
name: Update default CodeQL bundle | ||
description: Updates 'src/defaults.json' to point to a new CodeQL bundle release. | ||
|
||
runs: | ||
using: composite | ||
steps: | ||
- name: Install ts-node | ||
shell: bash | ||
run: npm install -g ts-node | ||
|
||
- name: Run update script | ||
working-directory: ${{ github.action_path }} | ||
shell: bash | ||
run: ts-node ./index.ts |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import * as fs from 'fs'; | ||
import * as github from '@actions/github'; | ||
|
||
interface BundleInfo { | ||
bundleVersion: string; | ||
cliVersion: string; | ||
} | ||
|
||
interface Defaults { | ||
bundleVersion: string; | ||
cliVersion: string; | ||
priorBundleVersion: string; | ||
priorCliVersion: string; | ||
} | ||
|
||
const CODEQL_BUNDLE_PREFIX = 'codeql-bundle-'; | ||
|
||
function getCodeQLCliVersionForRelease(release): string { | ||
const cliVersionsFromMarkerFiles = release.assets | ||
.map((asset) => asset.name.match(/cli-version-(.*)\.txt/)?.[1]) | ||
.filter((v) => v) | ||
.map((v) => v as string); | ||
if (cliVersionsFromMarkerFiles.length > 1) { | ||
throw new Error( | ||
`Release ${release.tag_name} has multiple CLI version marker files.` | ||
); | ||
} else if (cliVersionsFromMarkerFiles.length === 0) { | ||
throw new Error( | ||
`Failed to find the CodeQL CLI version for release ${release.tag_name}.` | ||
); | ||
} | ||
return cliVersionsFromMarkerFiles[0]; | ||
} | ||
|
||
async function getBundleInfoFromRelease(release): Promise<BundleInfo> { | ||
return { | ||
bundleVersion: release.tag_name.substring(CODEQL_BUNDLE_PREFIX.length), | ||
cliVersion: getCodeQLCliVersionForRelease(release) | ||
}; | ||
} | ||
|
||
async function getNewDefaults(currentDefaults: Defaults): Promise<Defaults> { | ||
const release = github.context.payload.release; | ||
console.log('Updating default bundle as a result of the following release: ' + | ||
`${JSON.stringify(release)}.`) | ||
|
||
const bundleInfo = await getBundleInfoFromRelease(release); | ||
return { | ||
bundleVersion: bundleInfo.bundleVersion, | ||
cliVersion: bundleInfo.cliVersion, | ||
priorBundleVersion: currentDefaults.bundleVersion, | ||
priorCliVersion: currentDefaults.cliVersion | ||
}; | ||
} | ||
|
||
async function main() { | ||
const previousDefaults: Defaults = JSON.parse(fs.readFileSync('../../../src/defaults.json', 'utf8')); | ||
const newDefaults = await getNewDefaults(previousDefaults); | ||
fs.writeFileSync('../../../src/defaults.json', JSON.stringify(newDefaults, null, 2) + "\n"); | ||
henrymercer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
|
||
// Ideally, we'd await main() here, but that doesn't work well with `ts-node`. | ||
// So instead we rely on the fact that Node won't exit until the event loop is empty. | ||
main(); |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Uh oh!
There was an error while loading. Please reload this page.