1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-24 15:19:26 -05:00

ci: use non-XL runners more (#18675)

![image](https://user-images.githubusercontent.com/1609021/231593822-b9d7c9db-4416-4735-bd89-f28a260607f1.png)

Non-xl runners are faster than the linux xl job, so let's use them for
now

Closes #17103
This commit is contained in:
David Sherret 2023-04-13 05:44:39 -04:00 committed by Levente Kurusa
parent b3ff0eaee0
commit dc37f414ee
No known key found for this signature in database
GPG key ID: 9F72F3C05BA137C4
2 changed files with 125 additions and 72 deletions

View file

@ -2,14 +2,19 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
import * as yaml from "https://deno.land/std@0.173.0/encoding/yaml.ts";
const windowsRunnerCondition =
"github.repository == 'denoland/deno' && 'windows-2022-xl' || 'windows-2022'";
const Runners = {
linux:
"${{ github.repository == 'denoland/deno' && 'ubuntu-22.04-xl' || 'ubuntu-22.04' }}",
macos: "macos-12",
windows: `\${{ ${windowsRunnerCondition} }}`,
};
const Runners = (() => {
const ubuntuRunner = "ubuntu-22.04";
const ubuntuXlRunner = "ubuntu-22.04-xl";
return {
ubuntuXl:
`\${{ github.repository == 'denoland/deno' && '${ubuntuXlRunner}' || '${ubuntuRunner}' }}`,
ubuntu: ubuntuRunner,
linux: ubuntuRunner,
macos: "macos-12",
windows: "windows-2022",
};
})();
// bump the number at the start when you want to purge the cache
const prCacheKeyPrefix =
"18-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ matrix.job }}-";
@ -184,6 +189,55 @@ function withCondition(
};
}
function removeSurroundingExpression(text: string) {
if (text.startsWith("${{")) {
return text.replace(/^\${{/, "").replace(/}}$/, "").trim();
} else {
return `'${text}'`;
}
}
function handleMatrixItems(items: {
skip_pr?: string | true;
os: string;
profile?: string;
job?: string;
use_sysroot?: boolean;
wpt?: string;
}[]) {
function getOsDisplayName(os: string) {
if (os.includes("ubuntu")) {
return "ubuntu-x86_64";
} else if (os.includes("windows")) {
return "windows-x86_64";
} else if (os.includes("macos")) {
return "macos-x86_64";
} else {
throw new Error(`Display name not found: ${os}`);
}
}
return items.map((item) => {
// use a free "ubuntu" runner on jobs that are skipped on pull requests
if (item.skip_pr != null) {
let text = "${{ github.event_name == 'pull_request' && ";
if (typeof item.skip_pr === "string") {
text += removeSurroundingExpression(item.skip_pr.toString()) + " && ";
}
text += `'${Runners.ubuntu}' || ${
removeSurroundingExpression(item.os)
} }}`;
// deno-lint-ignore no-explicit-any
(item as any).runner = text;
}
return {
...item,
os_display_name: getOsDisplayName(item.os),
};
});
}
const ci = {
name: "ci",
on: {
@ -229,7 +283,8 @@ const ci = {
]),
},
build: {
name: "${{ matrix.job }} ${{ matrix.profile }} ${{ matrix.os }}",
name:
"${{ matrix.job }} ${{ matrix.profile }} ${{ matrix.os_display_name }}",
needs: ["pre_build"],
if: "${{ needs.pre_build.outputs.skip_build != 'true' }}",
"runs-on": "${{ matrix.runner || matrix.os }}",
@ -243,63 +298,51 @@ const ci = {
},
strategy: {
matrix: {
include: [
{
os: Runners.macos,
job: "test",
profile: "debug",
},
{
os: Runners.macos,
job: "test",
profile: "release",
skip_pr: true,
},
{
os: Runners.windows,
job: "test",
profile: "debug",
},
{
os: Runners.windows,
// use a free runner on PRs since this will be skipped
runner:
`\${{ github.event_name == 'pull_request' && 'windows-2022' || (${windowsRunnerCondition}) }}`,
job: "test",
profile: "release",
skip_pr: true,
},
{
os: Runners.linux,
job: "test",
profile: "release",
use_sysroot: true,
// TODO(ry): Because CI is so slow on for OSX and Windows, we
// currently run the Web Platform tests only on Linux.
wpt: "${{ !startsWith(github.ref, 'refs/tags/') }}",
},
{
os: Runners.linux,
job: "bench",
profile: "release",
use_sysroot: true,
skip_pr:
"${{ !contains(github.event.pull_request.labels.*.name, 'ci-bench') }}",
},
{
os: Runners.linux,
job: "test",
profile: "debug",
use_sysroot: true,
wpt:
"${{ github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') }}",
},
{
os: Runners.linux,
job: "lint",
profile: "debug",
},
],
include: handleMatrixItems([{
os: Runners.macos,
job: "test",
profile: "debug",
}, {
os: Runners.macos,
job: "test",
profile: "release",
skip_pr: true,
}, {
os: Runners.windows,
job: "test",
profile: "debug",
}, {
os: Runners.windows,
job: "test",
profile: "release",
skip_pr: true,
}, {
os: Runners.ubuntuXl,
job: "test",
profile: "release",
use_sysroot: true,
// TODO(ry): Because CI is so slow on for OSX and Windows, we
// currently run the Web Platform tests only on Linux.
wpt: "${{ !startsWith(github.ref, 'refs/tags/') }}",
}, {
os: Runners.ubuntuXl,
job: "bench",
profile: "release",
use_sysroot: true,
skip_pr:
"${{ !contains(github.event.pull_request.labels.*.name, 'ci-bench') }}",
}, {
os: Runners.ubuntu,
job: "test",
profile: "debug",
use_sysroot: true,
wpt:
"${{ github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') }}",
}, {
os: Runners.ubuntu,
job: "lint",
profile: "debug",
}]),
},
// Always run main branch builds to completion. This allows the cache to
// stay mostly up-to-date in situations where a single job fails due to

View file

@ -41,7 +41,7 @@ jobs:
echo $GIT_MESSAGE | grep '\[ci\]' || (echo 'Exiting due to draft PR. Commit with [ci] to bypass.' ; echo 'skip_build=true' >> $GITHUB_OUTPUT)
if: github.event.pull_request.draft == true
build:
name: '${{ matrix.job }} ${{ matrix.profile }} ${{ matrix.os }}'
name: '${{ matrix.job }} ${{ matrix.profile }} ${{ matrix.os_display_name }}'
needs:
- pre_build
if: '${{ needs.pre_build.outputs.skip_build != ''true'' }}'
@ -56,36 +56,46 @@ jobs:
- os: macos-12
job: test
profile: debug
os_display_name: macos-x86_64
- os: macos-12
job: test
profile: release
skip_pr: true
- os: '${{ github.repository == ''denoland/deno'' && ''windows-2022-xl'' || ''windows-2022'' }}'
runner: '${{ github.event_name == ''pull_request'' && ''ubuntu-22.04'' || ''macos-12'' }}'
os_display_name: macos-x86_64
- os: windows-2022
job: test
profile: debug
- os: '${{ github.repository == ''denoland/deno'' && ''windows-2022-xl'' || ''windows-2022'' }}'
runner: '${{ github.event_name == ''pull_request'' && ''windows-2022'' || (github.repository == ''denoland/deno'' && ''windows-2022-xl'' || ''windows-2022'') }}'
os_display_name: windows-x86_64
- os: windows-2022
job: test
profile: release
skip_pr: true
runner: '${{ github.event_name == ''pull_request'' && ''ubuntu-22.04'' || ''windows-2022'' }}'
os_display_name: windows-x86_64
- os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
job: test
profile: release
use_sysroot: true
wpt: '${{ !startsWith(github.ref, ''refs/tags/'') }}'
os_display_name: ubuntu-x86_64
- os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
job: bench
profile: release
use_sysroot: true
skip_pr: '${{ !contains(github.event.pull_request.labels.*.name, ''ci-bench'') }}'
- os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
runner: '${{ github.event_name == ''pull_request'' && !contains(github.event.pull_request.labels.*.name, ''ci-bench'') && ''ubuntu-22.04'' || github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
os_display_name: ubuntu-x86_64
- os: ubuntu-22.04
job: test
profile: debug
use_sysroot: true
wpt: '${{ github.ref == ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/'') }}'
- os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
os_display_name: ubuntu-x86_64
- os: ubuntu-22.04
job: lint
profile: debug
os_display_name: ubuntu-x86_64
fail-fast: '${{ github.event_name == ''pull_request'' || (github.ref != ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/'')) }}'
env:
CARGO_TERM_COLOR: always