Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: mymindstorm/setup-emsdk@v14
- uses: mymindstorm/setup-emsdk@v15

- name: Verify
run: emcc -v
Expand All @@ -24,10 +24,12 @@ To just cache emsdk:

```yaml
- name: Setup emsdk
uses: mymindstorm/setup-emsdk@v14
uses: mymindstorm/setup-emsdk@v15
with:
# Make sure to set a version number!
version: 1.38.40
# Optional emsdk version (set if not the same as emscripten version)
emsdk-version: 3.1.5
# This is the name of the cache folder.
# The cache folder will be placed in the build directory,
# so make sure it doesn't conflict with anything!
Expand Down Expand Up @@ -55,7 +57,7 @@ jobs:
with:
path: ${{env.EM_CACHE_FOLDER}}
key: ${{env.EM_VERSION}}-${{ runner.os }}
- uses: mymindstorm/setup-emsdk@v14
- uses: mymindstorm/setup-emsdk@v15
with:
version: ${{env.EM_VERSION}}
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}
Expand All @@ -71,6 +73,9 @@ jobs:
version:
description: 'Version to install'
default: 'latest'
emsdk-version:
description: 'The version of emsdk that gets downloaded instead of making it the same as version'
default: ''
no-install:
description: "If true will not download any version of Emscripten. emsdk will still be added to PATH."
default: false
Expand Down
25 changes: 14 additions & 11 deletions action.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
name: 'Setup Emscripten toolchain'
description: 'Download emsdk and optionally install a version of Emscripten'
author: 'mymindstorm'
name: "Setup Emscripten toolchain"
description: "Download emsdk and optionally install a version of Emscripten"
author: "mymindstorm"
inputs:
version:
description: 'Version to install'
default: 'latest'
description: "Version emscripten to install"
default: "latest"
emsdk-version:
description: "Version of emsdk to install (set if not the same as emscripten version)"
default: ""
no-install:
description: "If true will not download any version of Emscripten. emsdk will still be added to PATH."
default: false
Expand All @@ -13,19 +16,19 @@ inputs:
default: false
actions-cache-folder:
description: "Directory to cache emsdk in. This folder will go under $GITHUB_HOME (I.e. build dir) and be cached using @actions/cache."
default: ''
default: ""
cache-key:
description: "Override the cache key. By default, it is `{Github workflow name}-{Emscripten version}-{OS type}-${CPU architecture}`."
default: ''
default: ""
update:
description: "Fetch package information for all the new tools and SDK versions"
default: false
update-tags:
description: "Deprecated in favor of `update`."
default: false
runs:
using: 'node24'
main: 'dist/index.js'
using: "node24"
main: "dist/index.js"
branding:
icon: 'download'
color: 'green'
icon: "download"
color: "green"
60 changes: 39 additions & 21 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -40547,12 +40547,12 @@ function io_cp(source_1, dest_1) {
*/
function mv(source_1, dest_1) {
return io_awaiter(this, arguments, void 0, function* (source, dest, options = {}) {
if (yield ioUtil.exists(dest)) {
if (yield exists(dest)) {
let destExists = true;
if (yield ioUtil.isDirectory(dest)) {
if (yield isDirectory(dest)) {
// If dest is directory copy src into dest
dest = path.join(dest, path.basename(source));
destExists = yield ioUtil.exists(dest);
dest = external_path_.join(dest, external_path_.basename(source));
destExists = yield exists(dest);
}
if (destExists) {
if (options.force == null || options.force) {
Expand All @@ -40563,8 +40563,8 @@ function mv(source_1, dest_1) {
}
}
}
yield mkdirP(path.dirname(dest));
yield ioUtil.rename(source, dest);
yield mkdirP(external_path_.dirname(dest));
yield rename(source, dest);
});
}
/**
Expand Down Expand Up @@ -87093,24 +87093,38 @@ const envRegex = new RegExp(/(\S+) = (.+)/);
async function run() {
try {
const emArgs = {
version: await getInput("version"),
noInstall: await getInput("no-install"),
noCache: await getInput("no-cache"),
actionsCacheFolder: await getInput("actions-cache-folder"),
cacheKey: await getInput("cache-key"),
version: getInput("version"),
emsdkVersion: getInput("emsdk-version"),
noInstall: getBooleanInput("no-install"),
noCache: getBooleanInput("no-cache"),
actionsCacheFolder: getInput("actions-cache-folder"),
cacheKey: getInput("cache-key"),
// XXX: update-tags is deprecated and used for backwards compatibility.
update: (await getInput("update")) || (await getInput("update-tags")),
update: getBooleanInput("update") || getBooleanInput("update-tags"),
};
let emsdkVersionToUse = emArgs.emsdkVersion;
if (!emsdkVersionToUse) {
if (emArgs.version === "latest" || emArgs.version === "tot") {
emsdkVersionToUse = "main";
}
else {
emsdkVersionToUse = emArgs.version;
}
}
let emsdkFolder;
let foundInCache = false;
if (emArgs.version !== "latest" &&
const combinedVersion = emsdkVersionToUse === emArgs.version
? emsdkVersionToUse
: `${emsdkVersionToUse}-${emArgs.version}`;
if (emsdkVersionToUse !== "main" &&
emArgs.version !== "latest" &&
emArgs.version !== "tot" &&
emArgs.noCache === "false" &&
!emArgs.noCache &&
!emArgs.actionsCacheFolder) {
emsdkFolder = await find("emsdk", emArgs.version, external_os_namespaceObject.arch());
emsdkFolder = find("emsdk", combinedVersion, external_os_namespaceObject.arch());
}
const cacheKey = emArgs.cacheKey ||
`${process.env.GITHUB_WORKFLOW}-${emArgs.version}-${external_os_namespaceObject.platform()}-${external_os_namespaceObject.arch()}`;
`${process.env.GITHUB_WORKFLOW}-${combinedVersion}-${external_os_namespaceObject.platform()}-${external_os_namespaceObject.arch()}`;
if (emArgs.actionsCacheFolder && process.env.GITHUB_WORKSPACE) {
const fullCachePath = external_path_.join(process.env.GITHUB_WORKSPACE, emArgs.actionsCacheFolder);
try {
Expand All @@ -87131,8 +87145,11 @@ async function run() {
}
}
if (!emsdkFolder) {
const emsdkArchive = await downloadTool("https://github.com/emscripten-core/emsdk/archive/main.zip");
const emsdkArchive = await downloadTool(`https://github.com/emscripten-core/emsdk/archive/${emsdkVersionToUse}.zip`);
emsdkFolder = await extractZip(emsdkArchive);
if (emsdkVersionToUse !== "main") {
await mv(external_path_.join(emsdkFolder, `emsdk-${emsdkVersionToUse}`), external_path_.join(emsdkFolder, "emsdk-main"));
}
}
else {
foundInCache = true;
Expand All @@ -87141,7 +87158,7 @@ async function run() {
if (external_os_namespaceObject.platform() === "win32") {
emsdk = `powershell ${external_path_.join(emsdkFolder, "emsdk-main", "emsdk.ps1")}`;
}
if (emArgs.noInstall === "true") {
if (emArgs.noInstall) {
addPath(external_path_.join(emsdkFolder, "emsdk-main"));
exportVariable("EMSDK", external_path_.join(emsdkFolder, "emsdk-main"));
return;
Expand All @@ -87151,11 +87168,12 @@ async function run() {
await exec_exec(`${emsdk} update`);
}
await exec_exec(`${emsdk} install ${emArgs.version}`);
if (emArgs.version !== "latest" &&
if (emsdkVersionToUse !== "main" &&
emArgs.version !== "latest" &&
emArgs.version !== "tot" &&
emArgs.noCache === "false" &&
!emArgs.noCache &&
!emArgs.actionsCacheFolder) {
await cacheDir(emsdkFolder, "emsdk", emArgs.version, external_os_namespaceObject.arch());
await cacheDir(emsdkFolder, "emsdk", combinedVersion, external_os_namespaceObject.arch());
}
}
await exec_exec(`${emsdk} activate ${emArgs.version}`);
Expand Down
49 changes: 36 additions & 13 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,47 @@ import { envRegex, pathRegex } from "./matchers.js";
async function run() {
try {
const emArgs = {
version: await core.getInput("version"),
noInstall: await core.getInput("no-install"),
noCache: await core.getInput("no-cache"),
actionsCacheFolder: await core.getInput("actions-cache-folder"),
cacheKey: await core.getInput("cache-key"),
version: core.getInput("version"),
emsdkVersion: core.getInput("emsdk-version"),
noInstall: core.getBooleanInput("no-install"),
noCache: core.getBooleanInput("no-cache"),
actionsCacheFolder: core.getInput("actions-cache-folder"),
cacheKey: core.getInput("cache-key"),
// XXX: update-tags is deprecated and used for backwards compatibility.
update:
(await core.getInput("update")) || (await core.getInput("update-tags")),
core.getBooleanInput("update") || core.getBooleanInput("update-tags"),
};

let emsdkVersionToUse = emArgs.emsdkVersion;
if (!emsdkVersionToUse) {
if (emArgs.version === "latest" || emArgs.version === "tot") {
emsdkVersionToUse = "main";
} else {
emsdkVersionToUse = emArgs.version;
}
}

let emsdkFolder;
let foundInCache = false;

const combinedVersion =
emsdkVersionToUse === emArgs.version
? emsdkVersionToUse
: `${emsdkVersionToUse}-${emArgs.version}`;

if (
emsdkVersionToUse !== "main" &&
emArgs.version !== "latest" &&
emArgs.version !== "tot" &&
emArgs.noCache === "false" &&
!emArgs.noCache &&
!emArgs.actionsCacheFolder
) {
emsdkFolder = await tc.find("emsdk", emArgs.version, os.arch());
emsdkFolder = tc.find("emsdk", combinedVersion, os.arch());
}

const cacheKey =
emArgs.cacheKey ||
`${process.env.GITHUB_WORKFLOW}-${emArgs.version}-${os.platform()}-${os.arch()}`;
`${process.env.GITHUB_WORKFLOW}-${combinedVersion}-${os.platform()}-${os.arch()}`;
if (emArgs.actionsCacheFolder && process.env.GITHUB_WORKSPACE) {
const fullCachePath = path.join(
process.env.GITHUB_WORKSPACE,
Expand Down Expand Up @@ -67,9 +83,15 @@ async function run() {

if (!emsdkFolder) {
const emsdkArchive = await tc.downloadTool(
"https://github.com/emscripten-core/emsdk/archive/main.zip",
`https://github.com/emscripten-core/emsdk/archive/${emsdkVersionToUse}.zip`,
);
emsdkFolder = await tc.extractZip(emsdkArchive);
if (emsdkVersionToUse !== "main") {
await io.mv(
path.join(emsdkFolder, `emsdk-${emsdkVersionToUse}`),
path.join(emsdkFolder, "emsdk-main"),
);
}
} else {
foundInCache = true;
}
Expand All @@ -80,7 +102,7 @@ async function run() {
emsdk = `powershell ${path.join(emsdkFolder, "emsdk-main", "emsdk.ps1")}`;
}

if (emArgs.noInstall === "true") {
if (emArgs.noInstall) {
core.addPath(path.join(emsdkFolder, "emsdk-main"));
core.exportVariable("EMSDK", path.join(emsdkFolder, "emsdk-main"));
return;
Expand All @@ -94,12 +116,13 @@ async function run() {
await exec.exec(`${emsdk} install ${emArgs.version}`);

if (
emsdkVersionToUse !== "main" &&
emArgs.version !== "latest" &&
emArgs.version !== "tot" &&
emArgs.noCache === "false" &&
!emArgs.noCache &&
!emArgs.actionsCacheFolder
) {
await tc.cacheDir(emsdkFolder, "emsdk", emArgs.version, os.arch());
await tc.cacheDir(emsdkFolder, "emsdk", combinedVersion, os.arch());
}
}

Expand Down