Skip to content

.github/workflows/dump.yml #190

.github/workflows/dump.yml

.github/workflows/dump.yml #190

Workflow file for this run

on:
push:
schedule:
- cron: 0 22 */7 * *
workflow_dispatch:
inputs:
FORCE_UPDATE:
type: boolean
required: false
jobs:
dump:
if: github.event_name != 'schedule' || vars.ENABLE_SCHEDULE == 'true'
strategy:
matrix:
runner:
- ubuntu-20.04
- ubuntu-22.04
- ubuntu-24.04
fail-fast: false
runs-on: ${{ matrix.runner }}
permissions: write-all
env:
SUFFIX: -${{ github.run_id }}.${{ github.run_attempt }}
UP: |-
| tee >(sha256sum | awk '{ print $1 }' > sha.txt) | gzip -9 -c | tee >(sha256sum | awk '{ print $1 }' > sha2.txt) | node script.js
FORCE_UPDATE: ${{ inputs.FORCE_UPDATE }}
steps:
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 20
- name: Create Script
run: |
var fs = require("fs");
var showProgress = setInterval(() => {
console.log("Bytes read: " + process.stdin.bytesRead);
}, 5000);
(async () => {
try {
var token = "";
var refresh = async () => {
console.log("Authenticate against registry");
var resp = await fetch("https://ghcr.io/token?service=registry.docker.io&scope=repository:${{ github.repository_owner }}/runner-images:pull,push", { method: "GET", redirect: "manual", credentials: "include", headers: {
"Authorization": "Basic " + btoa("${{ github.actor }}:${{ github.token }}")
} });
console.log(JSON.stringify(resp.status));
token = (await resp.json()).token;
}
if(process.env.UPLOAD_LAYER) {
console.log("Uploading Layer");
await refresh();
var resp = await fetch("https://ghcr.io/v2/${{ github.repository_owner }}/runner-images/blobs/uploads/", { method: "POST", redirect: "manual", body: "", credentials: "include", headers: {
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
var location = resp.headers.get("Location");
console.log("NEXT_URL:" + location);
resp = await fetch("https://ghcr.io" + location, { method: "PATCH", redirect: "manual", body: process.stdin, duplex: "half", credentials: "include", headers: {
"Content-Type": "application/octet-stream",
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
location = resp.headers.get("Location");
console.log("NEXT_URL:" + location);
console.log("Committing Layer");
var commitLayer = async () => {
await refresh();
var url = "https://ghcr.io" + location + "?digest=sha256:" + (await fs.promises.readFile("sha2.txt", { encoding: "utf-8" })).trim();
console.log("url:" + url);
resp = await fetch(url, { method: "PUT", redirect: "manual", duplex: "half", credentials: "include", headers: {
"Content-Type": "application/octet-stream",
"Content-Length": "0",
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
location = resp.headers.get("Location");
console.log("NEXT_URL:" + location);
};
var finish = false;
var lastException = null;
for(var i = 0; i < 10 && !finish; i++) {
try {
await commitLayer();
finish = true;
} catch(ex) {
lastException = ex;
console.log("Failed to commit to registry, attempt: " + i + " Cause: " + ex.toString());
}
}
if(!finish) {
throw lastException;
}
}
clearInterval(showProgress);
var environment = await fs.promises.readFile("/etc/environment", { encoding: "utf-8" });
var envMap = {};
var envList = [];
var trimQuotes = str => {
if(str.startsWith("\"") && str.endsWith("\"")) {
return str.substring(1, str.length - 1);
}
return str;
};
for(var line of environment.split("\n")) {
if(line.length > 0) {
var i = line.indexOf("=");
var key = line.substring(0, i);
var val = trimQuotes(line.substring(i + 1));
envList.push(key + "=" + val);
envMap[key] = val;
}
}
var friendlyTag = envMap["ImageOS"] && envMap["ImageVersion"] ? envMap["ImageOS"] + "-" + process.env.TAG + "-" + envMap["ImageVersion"] : null;
var latestTag = envMap["ImageOS"] && envMap["ImageVersion"] ? envMap["ImageOS"] + "-" + process.env.TAG + "-latest" : null;
var config = {
"architecture": "amd64",
"os": "linux",
"config": {
"Env": envList,
"Entrypoint": null,
"Cmd": [ "bash" ],
"User": process.getuid() + ":" + process.getgid(),
"Labels": {
"org.opencontainers.image.authors": ${{ toJson(format('{0}/{1}', github.server_url, github.repository_owner)) }},
"org.opencontainers.image.created": new Date().toISOString(),
"org.opencontainers.image.description": "Dump of the runner image",
"org.opencontainers.image.documentation": ${{ toJson(format('{0}/{1}/tree/{2}', github.server_url, github.repository, github.sha)) }},
"org.opencontainers.image.ref.name": ("ghcr.io/" + ${{ toJson(github.repository_owner) }} + "/runner-images").toLowerCase(),
"org.opencontainers.image.revision": ${{ toJson(github.sha) }},
"org.opencontainers.image.source": ${{ toJson(format('{0}/{1}/tree/{2}', github.server_url, github.repository, github.sha)) }},
"org.opencontainers.image.title": "runner-image-amd64",
"org.opencontainers.image.url": ${{ toJson(format('{0}/{1}/tree/{2}', github.server_url, github.repository, github.sha)) }},
"org.opencontainers.image.vendor": ${{ toJson(github.repository_owner) }},
"org.opencontainers.image.version": friendlyTag
},
},
"rootfs": {
"type": "layers",
"diff_ids": []
}
};
if(process.env.LAYER_DIFF_IDS) {
var layer_diff_ids = JSON.parse(process.env.LAYER_DIFF_IDS);
var diff_ids = [];
for(var layer_diff_id of layer_diff_ids) {
if(layer_diff_id.diff_id && layer_diff_id.layer) {
diff_ids.push(JSON.parse(layer_diff_id.diff_id));
}
}
config.rootfs.diff_ids = diff_ids.concat(config.rootfs.diff_ids);
}
if(process.env.UPLOAD_LAYER) {
var diff_id = "sha256:" + (await fs.promises.readFile("sha.txt", { encoding: "utf-8" })).trim();
config.rootfs.diff_ids.push(diff_id);
await fs.promises.appendFile(process.env.GITHUB_OUTPUT, "diff_id=" + JSON.stringify(diff_id) + "\n", { encoding: "utf-8" });
}
var strconfig = JSON.stringify(config);
console.log(strconfig);
var crypto = require('crypto');
var hash = crypto.createHash('sha256').update(strconfig).digest('hex');
await refresh();
var resp = await fetch("https://ghcr.io/v2/${{ github.repository_owner }}/runner-images/blobs/uploads/", { method: "POST", redirect: "manual", body: "", credentials: "include", headers: {
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
var location = resp.headers.get("Location");
console.log("NEXT_URL:" + location);
resp = await fetch("https://ghcr.io" + location, { method: "PATCH", redirect: "manual", body: strconfig, duplex: "half", credentials: "include", headers: {
"Content-Type": "application/octet-stream",
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
location = resp.headers.get("Location");
console.log("NEXT_URL:" + location);
await refresh();
url = "https://ghcr.io" + location + "?digest=sha256:" + hash;
console.log("url:" + url);
resp = await fetch(url, { method: "PUT", redirect: "manual", duplex: "half", credentials: "include", headers: {
"Content-Type": "application/octet-stream",
"Content-Length": "0",
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
location = resp.headers.get("Location");
console.log("NEXT_URL:" + location);
var manifest = {
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": strconfig.length,
"digest": "sha256:" + hash
},
"layers": []
};
if(process.env.LAYER_DIFF_IDS) {
var layer_diff_ids = JSON.parse(process.env.LAYER_DIFF_IDS);
var layers = [];
for(var layer_diff_id of layer_diff_ids) {
if(layer_diff_id.diff_id && layer_diff_id.layer) {
layers.push(JSON.parse(layer_diff_id.layer));
}
}
manifest.layers = layers.concat(manifest.layers);
}
if(process.env.UPLOAD_LAYER) {
var layer = {
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": process.stdin.bytesRead,
"digest": "sha256:" + (await fs.promises.readFile("sha2.txt", { encoding: "utf-8" })).trim()
};
manifest.layers.push(layer);
await fs.promises.appendFile(process.env.GITHUB_OUTPUT, "layer=" + JSON.stringify(layer) + "\n", { encoding: "utf-8" })
}
var strmanifest = JSON.stringify(manifest);
console.log(strmanifest);
await refresh();
var tag = process.env.TAG + (process.env.SUFFIX || '');
if(envMap["ImageOS"]) {
tag = envMap["ImageOS"] + "-" + tag;
}
resp = await fetch("https://ghcr.io/v2/${{ github.repository_owner }}/runner-images/manifests/" + tag, { method: "PUT", redirect: "manual", body: strmanifest, duplex: "half", credentials: "include", headers: {
"Content-Type": "application/vnd.docker.distribution.manifest.v2+json",
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
if(friendlyTag) {
await refresh();
resp = await fetch("https://ghcr.io/v2/${{ github.repository_owner }}/runner-images/manifests/" + friendlyTag, { method: "GET", redirect: "manual", credentials: "include", headers: {
"Accept": "application/vnd.docker.distribution.manifest.v2+json",
"Authorization": "Bearer " + token
} });
if(resp.status < 200 || resp.status > 299 || process.env.FORCE_UPDATE === "true") {
resp = await fetch("https://ghcr.io/v2/${{ github.repository_owner }}/runner-images/manifests/" + friendlyTag, { method: "PUT", redirect: "manual", body: strmanifest, duplex: "half", credentials: "include", headers: {
"Content-Type": "application/vnd.docker.distribution.manifest.v2+json",
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
console.log("Move latest tag forward");
resp = await fetch("https://ghcr.io/v2/${{ github.repository_owner }}/runner-images/manifests/" + latestTag, { method: "PUT", redirect: "manual", body: strmanifest, duplex: "half", credentials: "include", headers: {
"Content-Type": "application/vnd.docker.distribution.manifest.v2+json",
"Authorization": "Bearer " + token
} });
console.log(JSON.stringify(resp.status));
}
}
process.exitCode = 0;
} catch(ex) {
console.log(ex);
process.exitCode = 1;
} finally {
clearInterval(showProgress);
}
process.exit();
})()
shell: mv {0} script.js
- name: Dump Base Image
id: baseImage
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /run /run/user /run/user/* --recursion "--exclude=$GITHUB_WORKSPACE" "--exclude=/proc/*" "--exclude=/dev/*" "--exclude=/run" "--exclude=/sys/*" "--exclude=/tmp/*" "--exclude=/opt/*" "--exclude=/var/cache/*" "--exclude=/var/snap" "--exclude=/var/run/*" "--exclude=/var/tmp/*" "--exclude=/var/crash/*" "--exclude=/var/lib/docker/*" "--exclude=/var/lib/apt/lists/*" "--exclude=/usr/local/*/*" "--exclude=/mnt/*" "--exclude=/snap/*" "--exclude=/boot" "--exclude=/data" "--exclude=/boot" "--exclude=/imagegeneration/installers/*.tar.*" "--exclude=/home/runner/runners" "--exclude=/home/runner/work" "--exclude=/usr/share/dotnet" "--exclude=/etc/skel" "--exclude=/home/runner/.rustup" "--exclude=/home/runner/.cargo" "--exclude=/home/runner/.dotnet" "--exclude=/home/runneradmin" "--exclude=/usr/share/swift" "--exclude=/usr/share/miniconda" "--exclude=/usr/lib/google-cloud-sdk" "--exclude=/usr/lib/jvm" "--exclude=/usr/lib/mono" "--exclude=/usr/lib/gcc" "--exclude=/usr/lib/llvm-*" "--exclude=/usr/lib/firefox" "--exclude=/usr/lib/python3" / ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-base
shell: bash
- name: Dump /usr/local
id: usr-local
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c "--exclude=/usr/local/lib/android" "--exclude=/usr/local/.ghcup" "--exclude=/usr/local/share/powershell" --no-recursion /usr --recursion /usr/local ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-usr-local
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump /opt
id: opt
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c "--exclude=/opt/hostedtoolcache" /opt ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-opt
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump /opt/hostedtoolcache
id: hostedtoolcache
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /opt --recursion /opt/hostedtoolcache ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-hostedtoolcache
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump rust
id: rust
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /home /home/runner --recursion /home/runner/.rustup /home/runner/.cargo ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-rust
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump /usr/share/dotnet
id: dotnet
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /home /home/runner /usr /usr/share --recursion /usr/share/dotnet /home/runner/.dotnet ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-dotnet
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump /usr/share/swift
id: swift
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/share --recursion /usr/share/swift ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-swift
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump /usr/share/miniconda
id: miniconda
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/share --recursion /usr/share/miniconda ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-miniconda
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump /usr/lib/google-cloud-sdk
id: google-cloud-sdk
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/lib --recursion /usr/lib/google-cloud-sdk ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-google-cloud-sdk
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump /usr/lib/jvm
id: jvm
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/lib --recursion /usr/lib/jvm ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-jvm
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump /usr/lib/mono
id: mono
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/lib --recursion /usr/lib/mono ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-mono
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump gcc
id: gcc
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/lib --recursion /usr/lib/gcc ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-gcc
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump llvm
id: llvm
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/lib --recursion /usr/lib/llvm-* ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-llvm
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.gcc.outputs) }}
]
shell: bash
- name: Dump firefox
id: firefox
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/lib --recursion /usr/lib/firefox ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-firefox
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump python3
id: python3
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/lib --recursion /usr/lib/python3 ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-python3
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Dump android
id: android
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/local /usr/local/lib --recursion /usr/local/lib/android ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-usr-android
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }}
]
shell: bash
- name: Dump haskell
id: haskell
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/local --recursion /usr/local/.ghcup ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-usr-haskell
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }}
]
shell: bash
- name: Dump powershell
id: powershell
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c --no-recursion /usr /usr/local /usr/local/share --recursion /usr/local/share/powershell ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-usr-powershell
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }}
]
shell: bash
- name: Dump /snap
id: snap
run: |
${{ env.CMD }} || ${{ env.CMD }}
env:
CMD: sudo tar --ignore-failed-read -C / -c /snap ${{ env.UP }}
UPLOAD_LAYER: 1
TAG: runner-snap
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }}
]
shell: bash
- name: Upload runner-usr-local-opt
run: |
node script.js
env:
TAG: runner-usr-local-opt
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }}
]
shell: bash
- name: Upload runner-usr-local-opt-snap
run: |
node script.js
env:
TAG: runner-usr-local-opt-snap
LAYER_LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.snap.outputs) }},
${{ tojson(steps.dotnet.outputs) }},
${{ tojson(steps.swift.outputs) }},
${{ tojson(steps.miniconda.outputs) }},
${{ tojson(steps.google-cloud-sdk.outputs) }},
${{ tojson(steps.jvm.outputs) }},
${{ tojson(steps.mono.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.firefox.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.android.outputs) }},
${{ tojson(steps.haskell.outputs) }},
${{ tojson(steps.powershell.outputs) }},
${{ tojson(steps.hostedtoolcache.outputs) }},
${{ tojson(steps.rust.outputs) }}
]
shell: bash
- name: Upload runner-large
run: |
node script.js
env:
TAG: runner-large
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.dotnet.outputs) }},
${{ tojson(steps.swift.outputs) }},
${{ tojson(steps.miniconda.outputs) }},
${{ tojson(steps.google-cloud-sdk.outputs) }},
${{ tojson(steps.jvm.outputs) }},
${{ tojson(steps.mono.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.firefox.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.android.outputs) }},
${{ tojson(steps.haskell.outputs) }},
${{ tojson(steps.powershell.outputs) }},
${{ tojson(steps.hostedtoolcache.outputs) }},
${{ tojson(steps.rust.outputs) }}
]
shell: bash
- name: Upload runner-medium
run: |
node script.js
env:
TAG: runner-medium
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }}
]
shell: bash
- name: Upload runner-medium-powershell
run: |
node script.js
env:
TAG: runner-medium-powershell
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.powershell.outputs) }}
]
shell: bash
- name: Upload runner-medium-haskell
run: |
node script.js
env:
TAG: runner-medium-haskell
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.haskell.outputs) }}
]
shell: bash
- name: Upload runner-medium-dotnet
run: |
node script.js
env:
TAG: runner-medium-dotnet
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.dotnet.outputs) }}
]
shell: bash
- name: Upload runner-medium-rust
run: |
node script.js
env:
TAG: runner-medium-rust
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.rust.outputs) }}
]
shell: bash
- name: Upload runner-medium-swift
run: |
node script.js
env:
TAG: runner-medium-swift
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.swift.outputs) }}
]
shell: bash
- name: Upload runner-medium-firefox
run: |
node script.js
env:
TAG: runner-medium-firefox
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.firefox.outputs) }}
]
shell: bash
- name: Upload runner-medium-google-cloud-sdk
run: |
node script.js
env:
TAG: runner-medium-google-cloud-sdk
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.google-cloud-sdk.outputs) }}
]
shell: bash
- name: Upload runner-medium-miniconda
run: |
node script.js
env:
TAG: runner-medium-miniconda
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.miniconda.outputs) }}
]
shell: bash
- name: Upload runner-medium-hostedtoolcache
run: |
node script.js
env:
TAG: runner-medium-hostedtoolcache
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.hostedtoolcache.outputs) }}
]
shell: bash
- name: Upload runner-medium-mono
run: |
node script.js
env:
TAG: runner-medium-mono
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.mono.outputs) }}
]
shell: bash
- name: Upload runner-medium-android
run: |
node script.js
env:
TAG: runner-medium-android
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.android.outputs) }}
]
shell: bash
- name: Upload runner-medium-jvm
run: |
node script.js
env:
TAG: runner-medium-jvm
LAYER_DIFF_IDS: |
[
${{ tojson(steps.baseImage.outputs) }},
${{ tojson(steps.usr-local.outputs) }},
${{ tojson(steps.opt.outputs) }},
${{ tojson(steps.gcc.outputs) }},
${{ tojson(steps.llvm.outputs) }},
${{ tojson(steps.python3.outputs) }},
${{ tojson(steps.jvm.outputs) }}
]
shell: bash