mirror of
https://github.com/game-ci/unity-builder.git
synced 2025-07-04 12:25:19 -04:00

* Enable noImplicitAny Add types to all implicit any variables Bump target to ES2020 for recent language features (optional chaining) Code cleanup Add debug configuration for vscode Remove autorun flag from jest to remove warning Bump packages to fix dependency version mismatch warning Changed @arkweid/lefthook to @evilmartians/lefthook as @arkweid/lefthook has been deprecated in favor of @evilmartians/lefthook Added concurrency groups to integrity check and build workflows. New commits to branches will cancel superseded runs on the same branch/pr Update imports to not use require syntax Use node packages (ie node:fs rather than fs) AndroidVersionCode is now a string rather than a number as it gets converted to a string when passed out of the system Reduce timeout for windows builds Remove 2020.1.17f1 from windows builds due to repeated license activation errors Update naming scheme of workflows for consistency Update build names so target platform and unity version aren't cut off by github actions UI * Add exclude to test matrix for 2022.2 on android until Unity bug is fixed --------- Co-authored-by: AndrewKahr <AndrewKahr@users.noreply.github.com>
175 lines
5.1 KiB
TypeScript
175 lines
5.1 KiB
TypeScript
import CloudRunnerLogger from './cloud-runner/services/cloud-runner-logger';
|
|
import CloudRunner from './cloud-runner/cloud-runner';
|
|
import CloudRunnerOptions from './cloud-runner/cloud-runner-options';
|
|
import * as core from '@actions/core';
|
|
import { Octokit } from '@octokit/core';
|
|
|
|
class GitHub {
|
|
private static readonly asyncChecksApiWorkflowName = `Async Checks API`;
|
|
public static githubInputEnabled: boolean = true;
|
|
private static longDescriptionContent: string = ``;
|
|
private static startedDate: string;
|
|
private static endedDate: string;
|
|
private static get octokitDefaultToken() {
|
|
return new Octokit({
|
|
auth: process.env.GITHUB_TOKEN,
|
|
});
|
|
}
|
|
private static get octokitPAT() {
|
|
return new Octokit({
|
|
auth: CloudRunner.buildParameters.gitPrivateToken,
|
|
});
|
|
}
|
|
private static get sha() {
|
|
return CloudRunner.buildParameters.gitSha;
|
|
}
|
|
|
|
private static get checkName() {
|
|
return `Cloud Runner (${CloudRunner.buildParameters.buildGuid})`;
|
|
}
|
|
|
|
private static get nameReadable() {
|
|
return GitHub.checkName;
|
|
}
|
|
|
|
private static get checkRunId() {
|
|
return CloudRunner.githubCheckId;
|
|
}
|
|
|
|
private static get owner() {
|
|
return CloudRunnerOptions.githubOwner;
|
|
}
|
|
|
|
private static get repo() {
|
|
return CloudRunnerOptions.githubRepoName;
|
|
}
|
|
|
|
public static async createGitHubCheck(summary: string) {
|
|
if (!CloudRunnerOptions.githubChecks) {
|
|
return ``;
|
|
}
|
|
GitHub.startedDate = new Date().toISOString();
|
|
|
|
CloudRunnerLogger.log(`POST /repos/${GitHub.owner}/${GitHub.repo}/check-runs`);
|
|
|
|
const data = {
|
|
owner: GitHub.owner,
|
|
repo: GitHub.repo,
|
|
name: GitHub.checkName,
|
|
// eslint-disable-next-line camelcase
|
|
head_sha: GitHub.sha,
|
|
status: 'queued',
|
|
// eslint-disable-next-line camelcase
|
|
external_id: CloudRunner.buildParameters.buildGuid,
|
|
// eslint-disable-next-line camelcase
|
|
started_at: GitHub.startedDate,
|
|
output: {
|
|
title: GitHub.nameReadable,
|
|
summary,
|
|
text: '',
|
|
images: [
|
|
{
|
|
alt: 'Game-CI',
|
|
// eslint-disable-next-line camelcase
|
|
image_url: 'https://game.ci/assets/images/game-ci-brand-logo-wordmark.svg',
|
|
},
|
|
],
|
|
},
|
|
};
|
|
const result = await GitHub.createGitHubCheckRequest(data);
|
|
|
|
return result.data.id;
|
|
}
|
|
|
|
public static async updateGitHubCheck(
|
|
longDescription: string,
|
|
summary: any,
|
|
result = `neutral`,
|
|
status = `in_progress`,
|
|
) {
|
|
if (!CloudRunnerOptions.githubChecks) {
|
|
return;
|
|
}
|
|
GitHub.longDescriptionContent += `\n${longDescription}`;
|
|
|
|
const data: any = {
|
|
owner: GitHub.owner,
|
|
repo: GitHub.repo,
|
|
// eslint-disable-next-line camelcase
|
|
check_run_id: GitHub.checkRunId,
|
|
name: GitHub.checkName,
|
|
// eslint-disable-next-line camelcase
|
|
head_sha: GitHub.sha,
|
|
// eslint-disable-next-line camelcase
|
|
started_at: GitHub.startedDate,
|
|
status,
|
|
output: {
|
|
title: GitHub.nameReadable,
|
|
summary,
|
|
text: GitHub.longDescriptionContent,
|
|
annotations: [],
|
|
},
|
|
};
|
|
|
|
if (status === `completed`) {
|
|
if (GitHub.endedDate !== undefined) {
|
|
GitHub.endedDate = new Date().toISOString();
|
|
}
|
|
// eslint-disable-next-line camelcase
|
|
data.completed_at = GitHub.endedDate || GitHub.startedDate;
|
|
data.conclusion = result;
|
|
}
|
|
|
|
if (await CloudRunnerOptions.asyncCloudRunner) {
|
|
await GitHub.runUpdateAsyncChecksWorkflow(data, `update`);
|
|
|
|
return;
|
|
}
|
|
await GitHub.updateGitHubCheckRequest(data);
|
|
}
|
|
|
|
public static async updateGitHubCheckRequest(data: any) {
|
|
return await GitHub.octokitDefaultToken.request(`PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}`, data);
|
|
}
|
|
|
|
public static async createGitHubCheckRequest(data: any) {
|
|
return await GitHub.octokitDefaultToken.request(`POST /repos/{owner}/{repo}/check-runs`, data);
|
|
}
|
|
|
|
public static async runUpdateAsyncChecksWorkflow(data: any, mode: string) {
|
|
if (mode === `create`) {
|
|
throw new Error(`Not supported: only use update`);
|
|
}
|
|
const workflowsResult = await GitHub.octokitDefaultToken.request(
|
|
`GET /repos/${GitHub.owner}/${GitHub.repo}/actions/workflows`,
|
|
{
|
|
owner: GitHub.owner,
|
|
repo: GitHub.repo,
|
|
},
|
|
);
|
|
const workflows = workflowsResult.data.workflows;
|
|
let selectedId = ``;
|
|
for (let index = 0; index < workflowsResult.data.total_count; index++) {
|
|
if (workflows[index].name === GitHub.asyncChecksApiWorkflowName) {
|
|
selectedId = workflows[index].id;
|
|
}
|
|
}
|
|
if (selectedId === ``) {
|
|
core.info(JSON.stringify(workflows));
|
|
throw new Error(`no workflow with name "${GitHub.asyncChecksApiWorkflowName}"`);
|
|
}
|
|
await GitHub.octokitPAT.request(`POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches`, {
|
|
owner: GitHub.owner,
|
|
repo: GitHub.repo,
|
|
// eslint-disable-next-line camelcase
|
|
workflow_id: selectedId,
|
|
ref: CloudRunnerOptions.branch,
|
|
inputs: {
|
|
checksObject: JSON.stringify({ data, mode }),
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
export default GitHub;
|