diff --git a/.github/workflows/matrix.js b/.github/workflows/matrix.js index bf5fcdef0a..cca319b707 100644 --- a/.github/workflows/matrix.js +++ b/.github/workflows/matrix.js @@ -1,46 +1,7 @@ -let { MatrixBuilder } = require('./matrix_builder'); -const matrix = new MatrixBuilder(); - -// Add axes for the matrix -matrix.addAxis({ - name: 'os', - title: x => x.replace('-latest', ''), - values: [ - 'ubuntu-latest', - 'windows-latest' - ] -}); -matrix.addAxis({ - name: 'java_version', - values: ['11', '17'] -}); -matrix.addAxis({ - name: 'java_distribution', - title: x => x, - values: [ - 'corretto', - 'liberica', - 'microsoft', - 'temurin', - 'zulu' - ] -}); - -// Configure the order of the fields in job name -matrix.setNamePattern(['os', 'java_version', 'java_distribution']); +const {MatrixBuilder} = require('./matrix_builder'); +const {configureKotlinDefaults, setMatrix} = require('./matrix_commons'); -// Ensure at least one windows and at least one linux job is present (macos is almost the same as linux) -matrix.generateRow({ os: 'windows-latest' }); -matrix.generateRow({ os: 'ubuntu-latest' }); - -// Generate more rows, no duplicates would be generated -const include = matrix.generateRows(process.env.MATRIX_JOBS || 5); -if (include.length === 0) { - throw new Error('Matrix list is empty'); -} -// Sort jobs by name, however, numeric parts are sorted appropriately -// For instance, 'windows 8' would come before 'windows 11' -include.sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true })); +const matrix = new MatrixBuilder(); +configureKotlinDefaults(matrix) -console.log(include); -console.log('::set-output name=matrix::' + JSON.stringify({ include })); +setMatrix(matrix, 4); diff --git a/.github/workflows/matrix_commons.js b/.github/workflows/matrix_commons.js new file mode 100644 index 0000000000..a7414dd36f --- /dev/null +++ b/.github/workflows/matrix_commons.js @@ -0,0 +1,124 @@ +// +// __ __ +// / /____ ___ ____ ___ ___ _/ / This file is provided to you by https://github.com/tegonal/github-commons +// / __/ -_) _ `/ _ \/ _ \/ _ `/ / Copyright 2022 Tegonal Genossenschaft +// \__/\__/\_, /\___/_//_/\_,_/_/ It is licensed under Apache License 2.0 +// /___/ Please report bugs and contribute back your improvements +// +// Version: v2.7.1 +//################################## +// adapted version of https://github.com/vlsi/github-actions-random-matrix/blob/main/examples/matrix.js +// licensed under Apache License 2.0 +//################################## +const os = require("os"); +const fs = require("fs"); + +const javaDistributionAxis = { + name: 'java_distribution', + values: [ + 'corretto', + 'liberica', + 'microsoft', + 'semeru', + 'temurin', + 'zulu', + ] +}; + +const javaVersionAxis = javaVersionAxisBuilder(['11', '17', '21']); + +function javaVersionAxisBuilder(values){ + return { + name: 'java_version', + title: x => 'Java ' + x, + values: values + } +} + +const osAxis = { + name: 'os', + title: x => x.replace('-latest', ''), + values: [ + 'ubuntu-latest', + 'windows-latest', + 'macos-latest' + ] +} + +function generateJavaMinMaxRows(matrix) { + // generate one with oldest java and one with newest java version + matrix.generateRow({java_version: matrix.axisByName.java_version.values[0]}); + matrix.generateRow({java_version: matrix.axisByName.java_version.values.slice(-1)[0]}); +} + +function generateUbuntuWindowsRows(matrix) { + matrix.generateRow({os: 'ubuntu-latest'}); + matrix.generateRow({os: 'windows-latest'}); +} + +function configureJavaDefaults(matrix, distributionAxis = javaDistributionAxis, versionAxis = javaVersionAxis, operatingSystemAxis = osAxis ) { + matrix.addAxis(distributionAxis); + matrix.addAxis(versionAxis); + matrix.addAxis(operatingSystemAxis); + + // This specifies the order of axes in CI job name (individual titles would be joined with a comma) + matrix.setNamePattern(['java_version', 'java_distribution', 'os']); + + // arm64 architecture is not supported by IBM Semeru + matrix.exclude({java_distribution: 'semeru', os: 'macos-latest'}); + + generateJavaMinMaxRows(matrix); + generateUbuntuWindowsRows(matrix); +} + +function configureKotlinDefaults(matrix) { + const kotlinJavaDistributionAxis = { + ...javaDistributionAxis, + values: javaDistributionAxis.values.filter ( x => + // seems to have problems with kotlin https://youtrack.jetbrains.com/issue/KT-61836 + x != 'semeru' + ) + }; + configureJavaDefaults(matrix, kotlinJavaDistributionAxis); +} + +function configureScalaDefaults(matrix) { + configureJavaDefaults(matrix); +} + +// see https://github.com/actions/toolkit/issues/1218 +function setOutput(key, value) { + // Temporary hack until core actions library catches up with github new recommendations + const output = process.env['GITHUB_OUTPUT'] + if (output !== undefined){ + fs.appendFileSync(output, `${key}=${value}${os.EOL}`) + } else { + console.log('::set-output name=' + key + '::' + value); + } +} + +function setMatrix(matrix, numberOfJobs) { + const include = matrix.generateRows(process.env.MATRIX_JOBS || numberOfJobs); + if (include.length === 0) { + throw new Error('Matrix list is empty'); + } + + // Sort jobs by name, however, numeric parts are sorted appropriately + // For instance, 'windows 8' would come before 'windows 11' + include.sort((a, b) => a.name.localeCompare(b.name, undefined, {numeric: true})); + + console.log(include); + setOutput('matrix', JSON.stringify({include})); +} + +module.exports = { + javaDistributionAxis, + javaVersionAxis, + osAxis, + setMatrix, + generateJavaMinMaxRows, + generateUbuntuWindowsRows, + configureJavaDefaults, + configureKotlinDefaults, + configureScalaDefaults, +}; diff --git a/.gitignore b/.gitignore index b1908eb532..fec3aa2a52 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ node_modules .metals .vscode .kotlin +.gt/**/repo +.gt/**/gpg diff --git a/.gt/remotes/tegonal-gh-commons/gitconfig b/.gt/remotes/tegonal-gh-commons/gitconfig new file mode 100644 index 0000000000..c40bc18b63 --- /dev/null +++ b/.gt/remotes/tegonal-gh-commons/gitconfig @@ -0,0 +1,8 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "tegonal-gh-commons"] + url = https://github.com/tegonal/github-commons + fetch = +refs/heads/*:refs/remotes/tegonal-gh-commons/* diff --git a/.gt/remotes/tegonal-gh-commons/public-keys/signing-key.public.asc b/.gt/remotes/tegonal-gh-commons/public-keys/signing-key.public.asc new file mode 100644 index 0000000000..1af08937b8 --- /dev/null +++ b/.gt/remotes/tegonal-gh-commons/public-keys/signing-key.public.asc @@ -0,0 +1,89 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +f2vVxNWadi/2nUG/SaIP50nxjd1aDrG9sDgi +=eXmm +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/.gt/remotes/tegonal-gh-commons/public-keys/signing-key.public.asc.sig b/.gt/remotes/tegonal-gh-commons/public-keys/signing-key.public.asc.sig new file mode 100644 index 0000000000..6aad2e74ec Binary files /dev/null and b/.gt/remotes/tegonal-gh-commons/public-keys/signing-key.public.asc.sig differ diff --git a/.gt/remotes/tegonal-gh-commons/pull.args b/.gt/remotes/tegonal-gh-commons/pull.args new file mode 100644 index 0000000000..9a3e3eef1a --- /dev/null +++ b/.gt/remotes/tegonal-gh-commons/pull.args @@ -0,0 +1 @@ +--directory "lib/tegonal-gh-commons" diff --git a/.gt/remotes/tegonal-gh-commons/pulled.tsv b/.gt/remotes/tegonal-gh-commons/pulled.tsv new file mode 100644 index 0000000000..71a57287e5 --- /dev/null +++ b/.gt/remotes/tegonal-gh-commons/pulled.tsv @@ -0,0 +1,3 @@ +#@ Version: 1.0.0 +tag file relativeTarget sha512 +v2.7.1 src/.github/workflows/matrix_commons.js ../.github/workflows/matrix_commons.js 1f122bbabd9560b94aaa671bce4b12fc29745e20d951d8c2d34e65cf31ab25296896093a0416b2dabd01654c161389bd871d5579a3e9cbeb09e35a3f7a32a911