diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 486fded..b5cb384 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,11 +13,9 @@ jobs: test: name: default runs-on: windows-latest - strategy: - fail-fast: false steps: - name: Check out source code - uses: actions/checkout@v1 + uses: actions/checkout@v2 - name: Download Internet run: npm install - name: Enable Developer Command Prompt @@ -32,6 +30,23 @@ jobs: runs-on: windows-latest steps: - name: Check out source code - uses: actions/checkout@v1 + uses: actions/checkout@v2 - run: npm install - run: npm audit --audit-level=moderate + alias-arch: + name: arch aliases + runs-on: windows-latest + steps: + - name: Check out source code + uses: actions/checkout@v2 + - name: Download Internet + run: npm install + - name: Enable Developer Command Prompt + uses: ./ + with: + arch: Win32 + - name: Compile and run some C code + shell: cmd + run: | + cl.exe hello.c + hello.exe diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 03e739d..e9c853f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,13 +11,11 @@ jobs: test: name: release runs-on: windows-latest - strategy: - fail-fast: false steps: - name: Setup Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1 - name: Check out source code - uses: actions/checkout@v1 + uses: actions/checkout@v2 - name: Compile and run some C code shell: cmd run: | @@ -28,5 +26,5 @@ jobs: runs-on: windows-latest steps: - name: Check out source code - uses: actions/checkout@v1 + uses: actions/checkout@v2 - run: npm audit --audit-level=moderate diff --git a/README.md b/README.md index cd72800..71b3128 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,9 @@ Supports Windows. Does nothing on Linux and macOS. ## Inputs - `arch` – target architecture - - native compilation: `x86`, `x64` (default), `amd64` (synonym for x64) + - native compilation: + - `x64` (default) or its synonyms: `amd64`, `win64` + - `x86` or its synonyms: `win32` - cross-compilation: `x86_amd64`, `x86_arm`, `x86_arm64`, `amd64_x86`, `amd64_arm`, `amd64_arm64` - `sdk` – Windows SDK to use diff --git a/index.js b/index.js index fec3981..a5a31a6 100644 --- a/index.js +++ b/index.js @@ -77,12 +77,23 @@ function main() { // Add standard location of "vswhere" to PATH, in case it's not there. process.env.PATH += path.delimiter + VSWHERE_PATH - const arch = core.getInput('arch') + var arch = core.getInput('arch') const sdk = core.getInput('sdk') const toolset = core.getInput('toolset') const uwp = core.getInput('uwp') const spectre = core.getInput('spectre') + // There are all sorts of way the architectures are called. In addition to + // values supported by Microsoft Visual C++, recognize some common aliases. + let arch_aliases = { + "win32": "x86", + "win64": "x64", + } + // Ignore case when matching as that's what humans expect. + if (arch.toLowerCase() in arch_aliases) { + arch = arch_aliases[arch.toLowerCase()] + } + // Due to the way Microsoft Visual C++ is configured, we have to resort to the following hack: // Call the configuration batch file and then output *all* the environment variables. @@ -104,6 +115,24 @@ function main() { core.debug(`Running: ${command}`) const environment = child_process.execSync(command, {shell: "cmd"}).toString().split('\r\n') + // If vsvars.bat is given an incorrect command line, it will print out + // an error and *still* exit successfully. Parse out errors from output + // which don't look like environment variables, and fail if appropriate. + var failed = false + for (let line of environment) { + if (line.match(/^\[ERROR.*\]/)) { + failed = true + // Don't print this particular line which will be confusing in output. + if (line.match(/Error in script usage. The correct usage is:$/)) { + continue + } + core.error(line) + } + } + if (failed) { + throw new Error('invalid parameters') + } + for (let string of environment) { const [name, value] = string.split('=') for (let pattern of InterestingVariables) { diff --git a/package-lock.json b/package-lock.json index ee228cc..e8c95d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "msvc-dev-cmd", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 549521d..5e14d1d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "msvc-dev-cmd", - "version": "1.5.0", + "version": "1.6.0", "description": "GitHub Action to setup Developer Command Prompt for Microsoft Visual C++", "main": "index.js", "scripts": {