From 0a7a7915717cecc2621437524c22d1e7583d1313 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sat, 16 Jul 2022 19:25:10 -0400 Subject: [PATCH] CI: Cleanup release process (#1659) * ci: overhaul workflows * ci: some fixes --- .../scripts/releases/error-code-metadata.json | 4 +- .../scripts/releases/extract_build_linux.sh | 9 +- .../scripts/releases/extract_build_windows.sh | 11 +- .../upload-release-artifacts/.gitignore | 2 - .../upload-release-artifacts/index.js | 141 ----- .../package-lock.json | 559 ------------------ .../upload-release-artifacts/package.json | 18 - .github/workflows/build-matrix.yaml | 44 ++ .github/workflows/draft-new-release.yaml | 29 +- .github/workflows/inform-pages-repo.yaml | 2 +- .../{linter-workflow.yaml => linting.yaml} | 11 +- .github/workflows/linux-build-clang.yaml | 65 ++ .github/workflows/linux-build-gcc.yaml | 64 ++ .github/workflows/linux-workflow.yaml | 146 ----- .github/workflows/release-pipeline.yaml | 76 +++ .github/workflows/update-controller-db.yaml | 3 - .github/workflows/windows-build-clang.yaml | 58 ++ .github/workflows/windows-build-msvc.yaml | 52 ++ .github/workflows/windows-workflow.yaml | 107 ---- CMakePresets.json | 94 ++- README.md | 3 +- test/CMakeLists.txt | 1 + 22 files changed, 457 insertions(+), 1042 deletions(-) delete mode 100644 .github/scripts/releases/upload-release-artifacts/.gitignore delete mode 100644 .github/scripts/releases/upload-release-artifacts/index.js delete mode 100644 .github/scripts/releases/upload-release-artifacts/package-lock.json delete mode 100644 .github/scripts/releases/upload-release-artifacts/package.json create mode 100644 .github/workflows/build-matrix.yaml rename .github/workflows/{linter-workflow.yaml => linting.yaml} (62%) create mode 100644 .github/workflows/linux-build-clang.yaml create mode 100644 .github/workflows/linux-build-gcc.yaml delete mode 100644 .github/workflows/linux-workflow.yaml create mode 100644 .github/workflows/release-pipeline.yaml create mode 100644 .github/workflows/windows-build-clang.yaml create mode 100644 .github/workflows/windows-build-msvc.yaml delete mode 100644 .github/workflows/windows-workflow.yaml diff --git a/.github/scripts/releases/error-code-metadata.json b/.github/scripts/releases/error-code-metadata.json index 0c0c35ca2a..95a0cf1f8c 100644 --- a/.github/scripts/releases/error-code-metadata.json +++ b/.github/scripts/releases/error-code-metadata.json @@ -19,10 +19,10 @@ }, "4030": { "msg": "Decompilation Failed: An error occurred" - } + }, "4040": { "msg": "Extraction Failed: Provided game data file was not an ISO file" - } + }, "4041": { "msg": "Extraction Failed: Provided game data file was corrupt or has unexpected size" } diff --git a/.github/scripts/releases/extract_build_linux.sh b/.github/scripts/releases/extract_build_linux.sh index 8bd4be176d..4d24357f8a 100755 --- a/.github/scripts/releases/extract_build_linux.sh +++ b/.github/scripts/releases/extract_build_linux.sh @@ -3,13 +3,14 @@ set -e DEST=${1} -SOURCE=${2} +BIN_SOURCE=${2} +SOURCE=${3} mkdir -p $DEST -cp $SOURCE/build/game/gk $DEST -cp $SOURCE/build/goalc/goalc $DEST -cp $SOURCE/build/decompiler/extractor $DEST +cp $BIN_SOURCE/game/gk $DEST +cp $BIN_SOURCE/goalc/goalc $DEST +cp $BIN_SOURCE/decompiler/extractor $DEST strip $DEST/gk strip $DEST/goalc diff --git a/.github/scripts/releases/extract_build_windows.sh b/.github/scripts/releases/extract_build_windows.sh index 7829505725..8462ca352f 100755 --- a/.github/scripts/releases/extract_build_windows.sh +++ b/.github/scripts/releases/extract_build_windows.sh @@ -3,13 +3,14 @@ set -e DEST=${1} -SOURCE=${2} +BIN_SOURCE=${2} +SOURCE=${3} mkdir -p $DEST -cp $SOURCE/build/bin/gk.exe $DEST -cp $SOURCE/build/bin/goalc.exe $DEST -cp $SOURCE/build/bin/extractor.exe $DEST +cp $BIN_SOURCE/gk.exe $DEST +cp $BIN_SOURCE/goalc.exe $DEST +cp $BIN_SOURCE/extractor.exe $DEST mkdir -p $DEST/data mkdir -p $DEST/data/launcher/ @@ -24,4 +25,4 @@ cp -r $SOURCE/decompiler/config $DEST/data/decompiler/ cp -r $SOURCE/goal_src $DEST/data cp -r $SOURCE/game/assets $DEST/data/game/ cp -r $SOURCE/game/graphics/opengl_renderer/shaders $DEST/data/game/graphics/opengl_renderer -cp -r $SOURCE/custom_levels $DEST/data \ No newline at end of file +cp -r $SOURCE/custom_levels $DEST/data diff --git a/.github/scripts/releases/upload-release-artifacts/.gitignore b/.github/scripts/releases/upload-release-artifacts/.gitignore deleted file mode 100644 index d77ae12d06..0000000000 --- a/.github/scripts/releases/upload-release-artifacts/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -*.md diff --git a/.github/scripts/releases/upload-release-artifacts/index.js b/.github/scripts/releases/upload-release-artifacts/index.js deleted file mode 100644 index c8bd86ad4d..0000000000 --- a/.github/scripts/releases/upload-release-artifacts/index.js +++ /dev/null @@ -1,141 +0,0 @@ -import { Octokit } from "@octokit/rest"; -import { throttling } from "@octokit/plugin-throttling"; -import { retry } from "@octokit/plugin-retry"; -Octokit.plugin(throttling); -Octokit.plugin(retry); -const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN, - userAgent: 'open-goal/jak-project', - log: { - debug: () => { }, - info: () => { }, - warn: console.warn, - error: console.error - }, - throttle: { - onRateLimit: (retryAfter, options) => { - octokit.log.warn( - `Request quota exhausted for request ${options.method} ${options.url}` - ); - - // Retry twice after hitting a rate limit error, then give up - if (options.request.retryCount <= 2) { - console.log(`Retrying after ${retryAfter} seconds!`); - return true; - } - }, - onAbuseLimit: (retryAfter, options) => { - // does not retry, only logs a warning - octokit.log.warn( - `Abuse detected for request ${options.method} ${options.url}` - ); - }, - } -}); - -let assetDir = process.env.ASSET_DIR; -let tagToSearchFor = process.env.TAG_TO_SEARCH_FOR.split("refs/tags/")[1]; - -console.log(`Searching in - ${assetDir}`); -console.log(`Searching for tag - ${tagToSearchFor}`); - -const { data: recentReleases } = await octokit.rest.repos.listReleases({ - owner: "open-goal", - repo: "jak-project", - per_page: 100 -}); - -let release = undefined; -for (var i = 0; i < recentReleases.length; i++) { - if (recentReleases[i].tag_name == tagToSearchFor) { - release = recentReleases[i]; - break; - } -} - -if (release == undefined) { - console.log(`Unable to find release with tag - ${tagToSearchFor}`); - process.exit(1); -} - -// Upload any assets we need to, don't upload assets that are already there! -const { data: releaseAssetsPre } = await octokit.rest.repos.listReleaseAssets({ - owner: "open-goal", - repo: "jak-project", - release_id: release.id, - per_page: 100 -}); - -import glob from 'glob'; -import * as fs from 'fs'; -import * as path from 'path'; -glob(assetDir + `/**/*${process.env.ASSET_EXTENSION}`, {}, async (err, files) => { - for (var i = 0; i < files.length; i++) { - let foundDuplicate = false; - for (var j = 0; j < releaseAssetsPre.length; j++) { - let existingAsset = releaseAssetsPre[j]; - if (existingAsset.name == `opengoal-${release.tag_name}-${path.basename(files[i])}`) { - foundDuplicate = true; - break; - } - } - if (foundDuplicate) { - continue; - } - - var assetBytes = fs.readFileSync(files[i], null); - const { data: uploadAsset } = await octokit.rest.repos.uploadReleaseAsset({ - owner: "open-goal", - repo: "jak-project", - release_id: release.id, - name: `opengoal-${release.tag_name}-${path.basename(files[i])}`, - data: assetBytes, - }); - } -}); - -// Ideally there would be a webhook event for when an artifact is added to a draft release -// unfortunately, such a thing does not exist yet. Therefore, we have to wait a bit -// for the API to become consistent -// TODO - future work - we could check previous draft releases to become eventually consistent as well -// - draft releases should only be a temporary state, so anything that remains a draft had a problem -await new Promise(resolve => setTimeout(resolve, 10 * 1000)); - -// Poll the release, and check to see if it's ready to be published -const { data: releaseAssetsPost } = await octokit.rest.repos.listReleaseAssets({ - owner: "open-goal", - repo: "jak-project", - release_id: release.id, - per_page: 100 -}); - -// Expected Assets, if we have all of them, we will publish it -let expectedAssets = { - "windows": false, - "linux" : false, -} - -for (var i = 0; i < releaseAssetsPost.length; i++) { - let asset = releaseAssetsPost[i]; - if (asset.name.includes("symbols")) { - continue; - } - for (var j = 0; j < Object.keys(expectedAssets).length; j++) { - let expectedNamePrefix = Object.keys(expectedAssets)[j]; - if (asset.name.toLowerCase().includes(expectedNamePrefix)) { - expectedAssets[expectedNamePrefix] = true; - break; - } - } -} - -console.log(expectedAssets); - -if (Object.values(expectedAssets).every(Boolean)) { - await octokit.rest.repos.updateRelease({ - owner: "open-goal", - repo: "jak-project", - release_id: release.id, - draft: false - }); -} diff --git a/.github/scripts/releases/upload-release-artifacts/package-lock.json b/.github/scripts/releases/upload-release-artifacts/package-lock.json deleted file mode 100644 index b06e5b00c2..0000000000 --- a/.github/scripts/releases/upload-release-artifacts/package-lock.json +++ /dev/null @@ -1,559 +0,0 @@ -{ - "name": "upload-release-artifacts", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@octokit/plugin-retry": "^3.0.9", - "@octokit/plugin-throttling": "^3.5.2", - "@octokit/rest": "^18.12.0", - "glob": "^7.2.0" - } - }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/core": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", - "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz", - "integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.16.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz", - "integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==", - "dependencies": { - "@octokit/types": "^6.33.0" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz", - "integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==", - "dependencies": { - "@octokit/types": "^6.33.0", - "deprecation": "^2.3.1" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", - "dependencies": { - "@octokit/types": "^6.0.3", - "bottleneck": "^2.15.3" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz", - "integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==", - "dependencies": { - "@octokit/types": "^6.0.1", - "bottleneck": "^2.15.3" - } - }, - "node_modules/@octokit/request": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", - "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", - "dependencies": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - } - }, - "node_modules/@octokit/types": { - "version": "6.33.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.33.0.tgz", - "integrity": "sha512-0zffZ048M0UhthyPXQHLz4038Ak46nMWZXkzlXvXB/M/L1jYPBceq4iZj4qjKVrvveaJrrgKdJ9+3yUuITfcCw==", - "dependencies": { - "@octokit/openapi-types": "^11.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - }, - "dependencies": { - "@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", - "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz", - "integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw==" - }, - "@octokit/plugin-paginate-rest": { - "version": "2.16.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz", - "integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==", - "requires": { - "@octokit/types": "^6.33.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz", - "integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==", - "requires": { - "@octokit/types": "^6.33.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/plugin-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", - "requires": { - "@octokit/types": "^6.0.3", - "bottleneck": "^2.15.3" - } - }, - "@octokit/plugin-throttling": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz", - "integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==", - "requires": { - "@octokit/types": "^6.0.1", - "bottleneck": "^2.15.3" - } - }, - "@octokit/request": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", - "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", - "requires": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - } - }, - "@octokit/types": { - "version": "6.33.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.33.0.tgz", - "integrity": "sha512-0zffZ048M0UhthyPXQHLz4038Ak46nMWZXkzlXvXB/M/L1jYPBceq4iZj4qjKVrvveaJrrgKdJ9+3yUuITfcCw==", - "requires": { - "@octokit/openapi-types": "^11.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - } -} diff --git a/.github/scripts/releases/upload-release-artifacts/package.json b/.github/scripts/releases/upload-release-artifacts/package.json deleted file mode 100644 index 267a187269..0000000000 --- a/.github/scripts/releases/upload-release-artifacts/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "upload-release-artifacts", - "version": "1.0.0", - "description": "", - "main": "index.js", - "type": "module", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "@octokit/plugin-retry": "^3.0.9", - "@octokit/plugin-throttling": "^3.5.2", - "@octokit/rest": "^18.12.0", - "glob": "^7.2.0" - } -} diff --git a/.github/workflows/build-matrix.yaml b/.github/workflows/build-matrix.yaml new file mode 100644 index 0000000000..ed78b1f66f --- /dev/null +++ b/.github/workflows/build-matrix.yaml @@ -0,0 +1,44 @@ +name: Build + +on: + push: + branches: + - '*' + pull_request: + branches: + - master + +jobs: + # Windows + build_windows_clang: + name: "🖥️ Windows" + uses: ./.github/workflows/windows-build-clang.yaml + with: + cmakePreset: "Release-windows-clang" + cachePrefix: "" + secrets: inherit + + build_windows_msvc: + name: "🖥️ Windows" + uses: ./.github/workflows/windows-build-msvc.yaml + with: + cmakePreset: "Release-windows-msvc" + cachePrefix: "" + secrets: inherit + + # Linux + build_linux_clang: + name: "🐧 Linux" + uses: ./.github/workflows/linux-build-clang.yaml + with: + cmakePreset: "Release-linux-clang-asan" + cachePrefix: "" + secrets: inherit + + build_linux_gcc: + name: "🐧 Linux" + uses: ./.github/workflows/linux-build-gcc.yaml + with: + cmakePreset: "Release-linux-gcc" + cachePrefix: "" + secrets: inherit diff --git a/.github/workflows/draft-new-release.yaml b/.github/workflows/draft-new-release.yaml index 0e1ba8c1e4..adccda9c9e 100644 --- a/.github/workflows/draft-new-release.yaml +++ b/.github/workflows/draft-new-release.yaml @@ -1,4 +1,4 @@ -name: Draft Release +name: 🏭 Draft Release on: workflow_dispatch: @@ -17,8 +17,6 @@ jobs: cut-release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - # Docs - https://github.com/mathieudutour/github-tag-action # Workflows cannot trigger other workflows implicitly # - https://github.community/t/github-actions-workflow-not-triggering-with-tag-push/17053/7 @@ -31,24 +29,7 @@ jobs: tag_prefix: v default_bump: ${{ github.event.inputs.bump }} - # Generate the Release Notes - # TODO - # - name: Generate Release Notes - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # COMMIT_SHA: ${{ github.SHA }} - # run: | - # cd ./.github/workflows/scripts/releases/generate-release-notes - # npm ci - # node index.js - # mv ./release-notes.md ${GITHUB_WORKSPACE}/release-notes.md - # ls - - # Docs - https://github.com/softprops/action-gh-release - - name: Create a GitHub Release - uses: softprops/action-gh-release@v1 - if: github.repository == 'open-goal/jak-project' && steps.tag_version.outputs.new_tag - with: - draft: true - prerelease: false - tag_name: ${{ steps.tag_version.outputs.new_tag }} + - name: Create Release + env: + GITHUB_TOKEN: ${{ secrets.BOT_PAT }} + run: gh release create ${{ steps.tag_version.outputs.new_tag }} --generate-notes --draft --repo open-goal/jak-project diff --git a/.github/workflows/inform-pages-repo.yaml b/.github/workflows/inform-pages-repo.yaml index 12c19931ca..977a6e1b58 100644 --- a/.github/workflows/inform-pages-repo.yaml +++ b/.github/workflows/inform-pages-repo.yaml @@ -14,12 +14,12 @@ on: jobs: inform: name: Inform Pages Repo + if: github.repository == 'open-goal/jak-project' runs-on: ubuntu-latest # Set some sort of timeout in the event of run-away builds. We are limited on concurrent jobs so, get rid of them. timeout-minutes: 10 steps: - name: Send Dispatch - if: github.repository == 'open-goal/jak-project' uses: peter-evans/repository-dispatch@v2 with: token: ${{ secrets.BOT_PAT }} diff --git a/.github/workflows/linter-workflow.yaml b/.github/workflows/linting.yaml similarity index 62% rename from .github/workflows/linter-workflow.yaml rename to .github/workflows/linting.yaml index 77e7bd74f0..d12c5708b7 100644 --- a/.github/workflows/linter-workflow.yaml +++ b/.github/workflows/linting.yaml @@ -1,24 +1,21 @@ -name: Linter +name: Lint -# Controls when the action will run. Triggers the workflow on push or pull request -# events but only for the master branch on: push: branches: - - master + - '*' pull_request: branches: - master jobs: lint: - name: Linting & Formatting + name: 📝 Formatting runs-on: ubuntu-20.04 - # Set some sort of timeout in the event of run-away builds. We are limited on concurrent jobs so, get rid of them. timeout-minutes: 10 steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Get Package Dependencies run: | diff --git a/.github/workflows/linux-build-clang.yaml b/.github/workflows/linux-build-clang.yaml new file mode 100644 index 0000000000..c35de0dafb --- /dev/null +++ b/.github/workflows/linux-build-clang.yaml @@ -0,0 +1,65 @@ +name: Linux Build Clang + +on: + workflow_call: + inputs: + cmakePreset: + required: true + type: string + cachePrefix: + required: true + type: string + +jobs: + build: + name: Clang + runs-on: ubuntu-20.04 + timeout-minutes: 45 + + env: # overrides: https://github.com/mbitsnbites/buildcache/blob/master/doc/configuration.md + BUILDCACHE_MAX_CACHE_SIZE: 1000000000 # 1gb + BUILDCACHE_COMPRESS_FORMAT: ZSTD + BUILDCACHE_COMPRESS_LEVEL: 19 + BUILDCACHE_DIRECT_MODE: true + BUILDCACHE_LOG_FILE: ${{ github.workspace }}/buildcache.log + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Install Package Dependencies + run: > + sudo apt install build-essential cmake + clang gcc g++ lcov make nasm libxrandr-dev + libxinerama-dev libxcursor-dev libpulse-dev + libxi-dev zip ninja-build + + - name: Setup Buildcache + uses: mikehardy/buildcache-action@v1.3.0 + with: + cache_key: linux-ubuntu-20.04-${{ inputs.cachePrefix }}-${{ inputs.cmakePreset }} + + - name: CMake Generation + env: + CC: clang + CXX: clang++ + run: | + cmake -B build --preset=${{ inputs.cmakePreset }} \ + -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache + + - name: Build Project + run: cmake --build build -j$((`nproc`+1)) + + - name: Run Tests + run: ./test.sh + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: opengoal-linux-${{ inputs.cachePrefix }} + if-no-files-found: error + path: | + ./build/goalc/goalc + ./build/decompiler/extractor + ./build/game/gk diff --git a/.github/workflows/linux-build-gcc.yaml b/.github/workflows/linux-build-gcc.yaml new file mode 100644 index 0000000000..f9e07b654e --- /dev/null +++ b/.github/workflows/linux-build-gcc.yaml @@ -0,0 +1,64 @@ +name: Linux Build GCC + +on: + workflow_call: + inputs: + cmakePreset: + required: true + type: string + cachePrefix: + required: true + type: string + +jobs: + build: + name: GCC + runs-on: ubuntu-20.04 + timeout-minutes: 45 + + env: # overrides: https://github.com/mbitsnbites/buildcache/blob/master/doc/configuration.md + BUILDCACHE_MAX_CACHE_SIZE: 1000000000 # 1gb + BUILDCACHE_COMPRESS_FORMAT: ZSTD + BUILDCACHE_COMPRESS_LEVEL: 19 + BUILDCACHE_DIRECT_MODE: true + BUILDCACHE_LOG_FILE: ${{ github.workspace }}/buildcache.log + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Install Package Dependencies + run: > + sudo apt install build-essential cmake + clang gcc g++ lcov make nasm libxrandr-dev + libxinerama-dev libxcursor-dev libpulse-dev + libxi-dev zip ninja-build + + - name: Setup Buildcache + uses: mikehardy/buildcache-action@v1.3.0 + with: + cache_key: linux-ubuntu-20.04-${{ inputs.cachePrefix }}-${{ inputs.cmakePreset }} + + - name: CMake Generation + env: + CC: gcc + CXX: g++ + run: | + cmake -B build --preset=${{ inputs.cmakePreset }} \ + -DCODE_COVERAGE=ON \ + -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache + + - name: Build Project + run: cmake --build build -j$((`nproc`+1)) -- -w dupbuild=warn + + - name: Run Tests - With Coverage + working-directory: ./build + run: ninja goalc-test_coverage -w dupbuild=warn + + - name: Submit Coverage Report to Codacy + uses: codacy/codacy-coverage-reporter-action@v1 + continue-on-error: true + with: + project-token: ${{ secrets.CODACY_PROJECT_KEY }} + coverage-reports: ./build/goalc-test_coverage.info diff --git a/.github/workflows/linux-workflow.yaml b/.github/workflows/linux-workflow.yaml deleted file mode 100644 index 6e59aee84a..0000000000 --- a/.github/workflows/linux-workflow.yaml +++ /dev/null @@ -1,146 +0,0 @@ -name: Linux - -on: - push: - branches: - - master - tags: - - v* - pull_request: - branches: - - master - -jobs: - build: - strategy: - fail-fast: false - matrix: - os: [ubuntu-20.04] - compiler: [clang, gcc] - - name: ${{ matrix.compiler }} - runs-on: ${{ matrix.os }} - timeout-minutes: 45 - - env: # overrides: https://github.com/mbitsnbites/buildcache/blob/master/doc/configuration.md - BUILDCACHE_MAX_CACHE_SIZE: 1000000000 # 1gb - BUILDCACHE_COMPRESS_FORMAT: ZSTD - BUILDCACHE_COMPRESS_LEVEL: 19 - BUILDCACHE_DIRECT_MODE: true - BUILDCACHE_LOG_FILE: ${{ github.workspace }}/buildcache.log - - # TODO - separate clang and gcc into separate workflows - - steps: - - name: Checkout Repository - uses: actions/checkout@v2 - - - name: Install Package Dependencies - run: > - sudo apt install build-essential cmake - clang gcc g++ lcov make nasm libxrandr-dev - libxinerama-dev libxcursor-dev libpulse-dev - libxi-dev zip - - - name: Setup Buildcache - uses: mikehardy/buildcache-action@v1.3.0 - with: - cache_key: ${{ matrix.os }}-${{ matrix.compiler }} - - # TODO - CMake - replace with presets! - - name: CMake Generation - Clang - ASAN - if: matrix.compiler == 'clang' && startsWith(github.ref, 'refs/tags/') == false - env: - CC: clang - CXX: clang++ - run: | - cmake -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DASAN_BUILD=ON \ - -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache \ - -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache - - # TODO - CMake - replace with presets! - - name: CMake Generation - Clang - Statically Linked - if: matrix.compiler == 'clang' && startsWith(github.ref, 'refs/tags/') - env: - CC: clang - CXX: clang++ - run: | - cmake -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DSTATICALLY_LINK=ON \ - -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache \ - -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache - - - name: CMake Generation - GCC - if: matrix.compiler == 'gcc' - env: - CC: gcc - CXX: g++ - run: | - cmake -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DCODE_COVERAGE=ON \ - -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache \ - -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache - - - name: Build Project - working-directory: ./build - run: make -j$((`nproc`+1)) - - - name: Run Tests - if: matrix.compiler == 'clang' - run: ./test.sh - - - name: Run Tests - With Coverage - if: matrix.compiler == 'gcc' - run: ./test_code_coverage.sh - - - name: Submit Coverage Report to Codacy - if: matrix.compiler == 'gcc' - uses: codacy/codacy-coverage-reporter-action@v1 - continue-on-error: true - with: - project-token: ${{ secrets.CODACY_PROJECT_KEY }} - coverage-reports: ./build/goalc-test_coverage.info - - - name: Upload artifact - # NOTE - the GCC executables are huge as they've been compiled with coverage support - if: matrix.compiler == 'clang' - uses: actions/upload-artifact@v3 - with: - name: opengoal-${{ matrix.os }}-${{ matrix.compiler }} - path: | - ./build/**/*.so - ./build/**/*.a - ./build/decompiler/decompiler - ./build/decompiler/extractor - ./build/game/gk - ./build/sound/sndplay - ./build/goalc/goalc - ./build/tools/dgo_packer - ./build/tools/dgo_unpacker - ./build/tools/memory_dump_tolls - ./build/tools/level_tools/level_dump - - # ---- Release / Tagging related steps ---- - - name: Prepare Build Artifacts - if: github.repository == 'open-goal/jak-project' && startsWith(github.ref, 'refs/tags/') && matrix.compiler == 'clang' - run: | - mkdir -p ./ci-artifacts/out - ./.github/scripts/releases/extract_build_linux.sh ./ci-artifacts/out ./ - cd ci-artifacts/out - tar czf ../linux.tar.gz . - - - name: Upload Assets and Potential Publish Release - if: github.repository == 'open-goal/jak-project' && startsWith(github.ref, 'refs/tags/') && matrix.compiler == 'clang' - env: - GITHUB_TOKEN: ${{ secrets.BOT_PAT }} - ASSET_DIR: ${{ github.WORKSPACE }}/ci-artifacts - ASSET_EXTENSION: gz - TAG_TO_SEARCH_FOR: ${{ github.REF }} - run: | - cd ./.github/scripts/releases/upload-release-artifacts - npm ci - node index.js diff --git a/.github/workflows/release-pipeline.yaml b/.github/workflows/release-pipeline.yaml new file mode 100644 index 0000000000..26871ebe27 --- /dev/null +++ b/.github/workflows/release-pipeline.yaml @@ -0,0 +1,76 @@ +name: 🏭 Release Pipeline + +on: + push: + tags: + - v* + +jobs: + # Windows + build_windows_clang: + name: "🖥️ Windows" + uses: ./.github/workflows/windows-build-clang.yaml + with: + cmakePreset: "Release-windows-clang-static" + cachePrefix: "static" + secrets: inherit + + # Linux + build_linux_clang: + name: "🐧 Linux" + uses: ./.github/workflows/linux-build-clang.yaml + with: + cmakePreset: "Release-linux-clang-static" + cachePrefix: "static" + secrets: inherit + + # Upload the Artifacts + upload_artifacts: + if: github.repository == 'open-goal/jak-project' + needs: + - build_windows_clang + - build_linux_clang + name: "Upload Artifacts" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Prepare Artifact Folder + run: mkdir -p ./ci-artifacts/final + + - uses: actions/download-artifact@v3 + name: Download all Artifacts + with: + path: ./ci-artifacts/ + + - name: Display structure of downloaded files + run: ls -Rl ./ci-artifacts/ + + - name: Prepare Linux Release Asset + run: | + mkdir -p ./ci-artifacts/linux + ./.github/scripts/releases/extract_build_linux.sh ./ci-artifacts/linux ./ci-artifacts/opengoal-linux-static ./ + cd ci-artifacts/linux + TAG_VAL=$(echo ${{ github.REF }} | awk -F'refs/tags/' '{print $2}') + tar czf ../final/opengoal-linux-${TAG_VAL}.tar.gz . + + - name: Prepare Windows Build Asset + run: | + mkdir -p ./ci-artifacts/windows + ./.github/scripts/releases/extract_build_windows.sh ./ci-artifacts/windows ./ci-artifacts/opengoal-windows-static ./ + TAG_VAL=$(echo ${{ github.REF }} | awk -F'refs/tags/' '{print $2}') + 7z a -tzip ./ci-artifacts/final/opengoal-windows-${TAG_VAL}.zip ./ci-artifacts/windows/* + + - name: Upload Assets + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + TAG_VAL=$(echo ${{ github.REF }} | awk -F'refs/tags/' '{print $2}') + gh release upload "${TAG_VAL}" ${{ github.WORKSPACE }}/ci-artifacts/final/* --repo open-goal/jak-project --clobber + + - name: Publish Release + env: + GITHUB_TOKEN: ${{ secrets.BOT_PAT }} + run: | + TAG_VAL=$(echo ${{ github.REF }} | awk -F'refs/tags/' '{print $2}') + gh release edit ${TAG_VAL} --draft=false --repo open-goal/jak-project diff --git a/.github/workflows/update-controller-db.yaml b/.github/workflows/update-controller-db.yaml index 8d4e627611..b28c075010 100644 --- a/.github/workflows/update-controller-db.yaml +++ b/.github/workflows/update-controller-db.yaml @@ -20,7 +20,4 @@ jobs: - name: commit version bump uses: EndBug/add-and-commit@v9 with: - default_author: github_actor - author_name: "OpenGOALBot" - author_email: "OpenGOALBot@users.noreply.github.com" message: "Updating Controller Database" diff --git a/.github/workflows/windows-build-clang.yaml b/.github/workflows/windows-build-clang.yaml new file mode 100644 index 0000000000..79cdd40831 --- /dev/null +++ b/.github/workflows/windows-build-clang.yaml @@ -0,0 +1,58 @@ +name: Windows Build Clang + +on: + workflow_call: + inputs: + cmakePreset: + required: true + type: string + cachePrefix: + required: true + type: string + +jobs: + build: + name: Clang + runs-on: windows-2022 + # Set some sort of timeout in the event of run-away builds. We are limited on concurrent jobs so, get rid of them. + timeout-minutes: 45 + + env: # overrides: https://github.com/mbitsnbites/buildcache/blob/master/doc/configuration.md + BUILDCACHE_MAX_CACHE_SIZE: 1000000000 # 1gb + BUILDCACHE_COMPRESS_FORMAT: ZSTD + BUILDCACHE_COMPRESS_LEVEL: 19 + BUILDCACHE_DIRECT_MODE: true + BUILDCACHE_LOG_FILE: ${{ github.workspace }}/buildcache.log + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Install NASM + run: choco install ${{ github.workspace }}/third-party/nasm/nasm.2.15.05.nupkg + + - name: Setup Buildcache + uses: mikehardy/buildcache-action@v1.3.0 + with: + cache_key: windows-2022-${{ inputs.cachePrefix }}-${{ inputs.cmakePreset }} + + - uses: ilammy/msvc-dev-cmd@v1 + + - name: CMake Generation + shell: cmd + run: cmake -B build --preset=${{ inputs.cmakePreset }} -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe . + + - name: Build Project + shell: cmd + run: cmake --build build -j 2 + + - name: Run Tests + timeout-minutes: 10 + run: ./build/bin/goalc-test.exe --gtest_color=yes --gtest_filter="-*MANUAL_TEST*" + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: opengoal-windows-${{ inputs.cachePrefix }} + if-no-files-found: error + path: ./build/bin diff --git a/.github/workflows/windows-build-msvc.yaml b/.github/workflows/windows-build-msvc.yaml new file mode 100644 index 0000000000..a26f7a4b9b --- /dev/null +++ b/.github/workflows/windows-build-msvc.yaml @@ -0,0 +1,52 @@ +name: Windows Build MSVC + +on: + workflow_call: + inputs: + cmakePreset: + required: true + type: string + cachePrefix: + required: true + type: string + +jobs: + build: + name: MSVC + runs-on: windows-2022 + timeout-minutes: 45 + + env: # overrides: https://github.com/mbitsnbites/buildcache/blob/master/doc/configuration.md + BUILDCACHE_MAX_CACHE_SIZE: 1000000000 # 1gb + BUILDCACHE_COMPRESS_FORMAT: ZSTD + BUILDCACHE_COMPRESS_LEVEL: 19 + BUILDCACHE_DIRECT_MODE: true + BUILDCACHE_LOG_FILE: ${{ github.workspace }}/buildcache.log + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Install NASM + run: choco install ${{ github.workspace }}/third-party/nasm/nasm.2.15.05.nupkg + + - name: Setup Buildcache + uses: mikehardy/buildcache-action@v1.3.0 + with: + cache_key: windows-2022-${{ inputs.cachePrefix }}-${{ inputs.cmakePreset }} + + - uses: ilammy/msvc-dev-cmd@v1 + + - name: CMake Generation - MSVC + shell: cmd + run: cmake -B build --preset=${{ inputs.cmakePreset }} -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe . + + - name: Build Project + shell: cmd + run: | + set CL=/MP + cmake --build build -j 2 + + - name: Run Tests + timeout-minutes: 10 + run: ./build/bin/goalc-test.exe --gtest_color=yes --gtest_filter="-*MANUAL_TEST*" diff --git a/.github/workflows/windows-workflow.yaml b/.github/workflows/windows-workflow.yaml deleted file mode 100644 index 8582c0c375..0000000000 --- a/.github/workflows/windows-workflow.yaml +++ /dev/null @@ -1,107 +0,0 @@ -name: Windows - -# Controls when the action will run. Triggers the workflow on push or pull request -# events but only for the master branch -on: - push: - branches: - - master - tags: - - v* - pull_request: - branches: - - master - -jobs: - build: - strategy: - # Prevent one build from failing everything (although maybe those should be included as experimental builds instead) - fail-fast: false - matrix: - os: [windows-2022] - compiler: [msvc, clang] - experimental: [false] - - name: ${{ matrix.compiler }} - runs-on: ${{ matrix.os }} - continue-on-error: ${{ matrix.experimental }} - # Set some sort of timeout in the event of run-away builds. We are limited on concurrent jobs so, get rid of them. - timeout-minutes: 45 - - env: # overrides: https://github.com/mbitsnbites/buildcache/blob/master/doc/configuration.md - BUILDCACHE_MAX_CACHE_SIZE: 1000000000 # 1gb - BUILDCACHE_COMPRESS_FORMAT: ZSTD - BUILDCACHE_COMPRESS_LEVEL: 19 - BUILDCACHE_DIRECT_MODE: true - BUILDCACHE_LOG_FILE: ${{ github.workspace }}/buildcache.log - - steps: - - name: Checkout Repository - uses: actions/checkout@v2 - - - name: Install NASM - run: choco install ${{ github.workspace }}/third-party/nasm/nasm.2.15.05.nupkg - - - name: Setup Buildcache - uses: mikehardy/buildcache-action@v1.3.0 - with: - cache_key: ${{ matrix.os }}-${{ matrix.compiler }} - - - uses: ilammy/msvc-dev-cmd@v1 - - # TODO - separate workflows! - - - name: CMake Generation - Clang - shell: cmd - if: matrix.compiler == 'clang' && startsWith(github.ref, 'refs/tags/') == false - run: cmake -B build --preset=Release-clang -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe . - - - name: CMake Generation - Clang - Statically Linked - shell: cmd - if: matrix.compiler == 'clang' && startsWith(github.ref, 'refs/tags/') - run: cmake -B build --preset=Release-clang-static -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe . - - - name: CMake Generation - MSVC - shell: cmd - if: matrix.compiler == 'msvc' - run: cmake -B build --preset=Release-msvc -DCMAKE_C_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER=${{ github.workspace }}/buildcache/bin/buildcache.exe . - - - name: Build Project - shell: cmd - run: | - if "${{ matrix.compiler }}" == "msvc" ( - set CL=/MP - ) - cmake --build build -j 2 - - - name: Run Tests - timeout-minutes: 10 - run: ./build/bin/goalc-test.exe --gtest_color=yes --gtest_filter="-*MANUAL_TEST*" - - - name: Upload artifact - if: matrix.compiler == 'clang' - uses: actions/upload-artifact@v3 - with: - name: opengoal-${{ matrix.os }}-${{ matrix.compiler }} - path: ./build/bin - - # ---- Release / Tagging related steps ---- - - name: Prepare Build Artifacts - if: github.repository == 'open-goal/jak-project' && startsWith(github.ref, 'refs/tags/') && matrix.compiler == 'clang' - shell: bash - run: | - mkdir -p ./ci-artifacts/out - ./.github/scripts/releases/extract_build_windows.sh ./ci-artifacts/out ./ - 7z a -tzip ./ci-artifacts/windows.zip ./ci-artifacts/out/* - - - name: Upload Assets and Potential Publish Release - if: github.repository == 'open-goal/jak-project' && startsWith(github.ref, 'refs/tags/') && matrix.compiler == 'clang' - env: - GITHUB_TOKEN: ${{ secrets.BOT_PAT }} - ASSET_DIR: ${{ github.WORKSPACE }}/ci-artifacts - ASSET_EXTENSION: zip - TAG_TO_SEARCH_FOR: ${{ github.REF }} - run: | - cd ./.github/scripts/releases/upload-release-artifacts - npm ci - node index.js diff --git a/CMakePresets.json b/CMakePresets.json index c195ee918e..0af9561b84 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -10,38 +10,51 @@ "strategy": "external" }, "cacheVariables": { - "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}", "INSTALL_GTEST": "True", "ASAN_BUILD": "OFF", "STATICALLY_LINK": "OFF", - "ZYDIS_BUILD_SHARED_LIB": "ON" + "ZYDIS_BUILD_SHARED_LIB": "ON", + "CODE_COVERAGE": "OFF" } }, { - "name": "base-release", + "name": "base-windows-release", "hidden": true, "inherits": "base", "binaryDir": "${sourceDir}/out/build/Release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}" } }, { - "name": "base-relwithdeb", + "name": "base-windows-relwithdeb", "hidden": true, "inherits": "base", - "binaryDir": "${sourceDir}/out/build/Release", + "binaryDir": "${sourceDir}/out/build/RelWithDeb", "cacheVariables": { - "CMAKE_BUILD_TYPE": "RelWithDebInfo" + "CMAKE_BUILD_TYPE": "RelWithDebInfo", + "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}" } }, { - "name": "base-debug", + "name": "base-windows-debug", "hidden": true, "inherits": "base", "binaryDir": "${sourceDir}/out/build/Debug", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}" + } + }, + { + "name": "base-linux-release", + "hidden": true, + "inherits": "base", + "binaryDir": "${sourceDir}/build/Release/bin", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install/${presetName}" } }, { @@ -61,44 +74,83 @@ } }, { - "name": "Debug-clang", + "name": "base-gcc", + "hidden": true, + "cacheVariables": { + "CMAKE_C_COMPILER": "gcc", + "CMAKE_CXX_COMPILER": "g++" + } + }, + { + "name": "Debug-windows-clang", "displayName": "Windows Debug (clang)", "description": "Build with Clang with Debug Symbols", - "inherits": ["base-debug", "base-clang"] + "inherits": ["base-windows-debug", "base-clang"] }, { - "name": "RelWithDebInfo-clang", + "name": "RelWithDebInfo-windows-clang", "displayName": "Windows RelWithDebInfo (clang)", "description": "Build with Clang as Release with Debug Symbols", - "inherits": ["base-relwithdeb", "base-clang"] + "inherits": ["base-windows-relwithdeb", "base-clang"] }, { - "name": "Release-clang", + "name": "Release-windows-clang", "displayName": "Windows Release (clang)", "description": "Build with Clang as Release without Debug Symbols", - "inherits": ["base-release", "base-clang"] + "inherits": ["base-windows-release", "base-clang"] }, { - "name": "Release-clang-static", + "name": "Release-windows-clang-static", "displayName": "Windows Static Release (clang)", "description": "Build with Clang as Release but statically linked", - "inherits": ["base-release", "base-clang"], + "inherits": ["base-windows-release", "base-clang"], "cacheVariables": { "STATICALLY_LINK": "true", "ZYDIS_BUILD_SHARED_LIB": "OFF" } }, { - "name": "Debug-msvc", + "name": "Debug-windows-msvc", "displayName": "Windows Debug (msvc)", "description": "Build with MSVC's CL with Debug Symbols", - "inherits": ["base-debug", "base-msvc"] + "inherits": ["base-windows-debug", "base-msvc"] }, { - "name": "Release-msvc", + "name": "Release-windows-msvc", "displayName": "Windows Release (msvc)", "description": "Build with MSVC's CL as Release without Debug Symbols", - "inherits": ["base-release", "base-msvc"] + "inherits": ["base-windows-release", "base-msvc"] + }, + { + "name": "Release-linux-clang", + "displayName": "Linux Release (clang)", + "description": "Build with Clang as Release without Debug Symbols", + "inherits": ["base-linux-release", "base-clang"] + }, + { + "name": "Release-linux-clang-asan", + "displayName": "Linux Release (clang-asan)", + "description": "Build with Clang as Release without Debug Symbols and ASAN Fuzzing", + "inherits": ["base-linux-release", "base-clang"], + "cacheVariables": { + "ASAN_BUILD": "ON" + } + }, + { + "name": "Release-linux-clang-static", + "displayName": "Linux Static Release (clang)", + "description": "Build with Clang as Release without Debug Symbols but statically linked", + "inherits": ["base-linux-release", "base-clang"], + "cacheVariables": { + "STATICALLY_LINK": "true", + "ZYDIS_BUILD_SHARED_LIB": "OFF" + } + }, + { + "name": "Release-linux-gcc", + "displayName": "Linux Release (gcc)", + "description": "Build with GCC as Release without Debug Symbols", + "inherits": ["base-linux-release", "base-gcc"] } ] } diff --git a/README.md b/README.md index ada2644bc4..272f223fea 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,7 @@

Documentation Badge - Linux - Windows + Linux and Windows Build Codacy Badge Codacy Badge Discord diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1929508bdc..84a4fb4095 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -46,6 +46,7 @@ endif() #gtest_discover_tests(goalc-test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) if(UNIX AND CMAKE_COMPILER_IS_GNUCXX AND CODE_COVERAGE) + set(BUILD_ARGS "-w" "dupbuild=warn") include(CodeCoverage) append_coverage_compiler_flags() setup_target_for_coverage_lcov(NAME goalc-test_coverage