Compare commits

..

19 Commits

Author SHA1 Message Date
Alexei Lozovsky 62f16bb530 msvc-dev-cmv v1.8.1
Also updating and adding whatever the new version of npm wants to be
updated and added in its package files. This should not affect the
behavior of the action.
2021-05-26 22:40:20 +09:00
Mozi 985d494a0f Print the error message from conf scripts at once (#41)
Printing them line by line will generate a bunch of error messages on
the summary page of GitHub Actions workflow. I think it's a bit
annoying.

Note that this change will also affect the format of the final output
error message, but no information will be lost.
2021-05-26 16:32:04 +03:00
Mozi c5426bf30a Separate output content from CMD with form feed (#40)
The command "cls" will produce a '\f' (0x0c, page break or form feed)
character.
2021-05-26 14:53:04 +03:00
Mozi 100402d805 Make eslint work in CI (#42) 2021-05-26 14:51:43 +03:00
Alexei Lozovsky 5611a7cba9 msvc-dev-cmd v1.8.0 2021-05-08 18:02:11 +09:00
Alexei Lozovsky 08b850b4d0 Allow repeated invocation (#37)
* Workaround for repeated invocations

As noted in the comment, repeated invocations of this action might have
caused environment variables to overflow. This cute hack avoid this,
allowing to reconfigure environment.

* Note caveats in README

While this approach mostly works, I still have reservations so let's
leave some cautionary notes.

* Test repeated reconfiguration on CI

Well, let's build our "Hello, world!" four times, for four different
architectures, because why not.
2021-05-08 11:54:58 +03:00
Alexei Lozovsky ff72ae9ce3 Update usage examples (#36)
* Use newer actions/checkout@v2 in examples

That's the current version. Even our own build scripts use it.

* Correct actions syntax

By the way, it's been ages since steps get their own section...

* Provide an example with matrix

Finally, have some example to showcase input usage.

* Move inputs after examples

Since they are more useful, put copy-pastable examples first. Then you
can look at all available inputs, now that you know how to use them.
2021-05-08 11:14:35 +03:00
Alexei Lozovsky 18f5f2cef4 Update npm format and resolve advisories (#35)
Just another day in JavaScriptLand: some "HIGH PRIORITY" vulnerability
has been fixed (CVE-2021-23337). Update our package-lock.json version
too because npm wants that.

(cherry picked from commit f5e8657374)

I'm doing this to shut GitHub Actions CI. It might be a good idea to
make a minor release with this as well. We'll see. But CI is going to
use the "release/v1" branch code and "npm audit" will complain.
2021-05-08 16:56:37 +09:00
Alexei Lozovsky f5e8657374 Update npm format and resolve advisories (#35)
Just another day in JavaScriptLand: some "HIGH PRIORITY" vulnerability
has been fixed (CVE-2021-23337). Update our package-lock.json version
too because npm wants that.
2021-05-08 10:51:14 +03:00
Alexei Lozovsky d39d8f7626 msvc-dev-cmd v1.7.0 2021-03-17 22:30:38 +09:00
Alexei Lozovsky 24b406e1cf msvc-dev-cmd v1.6.0 2021-03-07 15:29:22 +09:00
Alexei Lozovsky 376515093d msvc-dev-cmd v1.5.0 2020-12-13 15:07:07 +09:00
ilammy ed94116c4d msvc-dev-cmd v1.4.1 2020-10-03 17:54:54 +03:00
ilammy b44b596ee5 msvc-dev-cmd v1.4.0 2020-09-27 12:21:25 +03:00
ilammy 6bcb337df2 msvc-dev-cmd v1.3.0 2020-06-14 20:57:29 +03:00
ilammy 074eec8db2 msvc-dev-cmd v1.2.0 2020-04-30 21:28:00 +03:00
ilammy b5113e7e9d msvc-dev-cmd v1.1.0 2020-03-19 08:51:27 +02:00
ilammy 1eed9c1215 msvc-dev-cmd v1.0.1 2020-02-13 23:51:26 +02:00
ilammy 233eac407f msvc-dev-cmd v1.0.0 2019-10-02 01:10:16 +03:00
9 changed files with 1437 additions and 81 deletions
-19
View File
@@ -1,19 +0,0 @@
name: z5-build-env
channels:
- conda-forge
dependencies:
- cmake
- compilers
- bzip2
- lz4-c
- xz
- zlib
- boost-cpp>=1.63
- xtensor>=0.21,<0.22
- xtensor-python>=0.24,<0.25
- xsimd
- blosc
- imageio
- nlohmann_json
- zarr
- h5py
+34 -20
View File
@@ -6,42 +6,56 @@ on:
branches:
- master
- release/*
- new-windows
schedule:
- cron: '0 6 * * *'
jobs:
test:
name: default
runs-on: ${{ matrix.windows }}
strategy:
matrix:
windows: [windows-2016, windows-2019]
runs-on: windows-latest
steps:
- name: Check out source code
uses: actions/checkout@v2
- name: Setup miniconda
uses: conda-incubator/setup-miniconda@v2
with:
activate-environment: z5-build-env
auto-update-conda: true
channels: conda-forge
environment-file: .github/workflows/environment.yaml
python-version: 3.7
auto-activate-base: false
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
- name: Download Internet
run: npm install
- name: Enable Developer Command Prompt
- name: Run eslint
run: npm run lint
- name: Enable Developer Command Prompt (amd64)
uses: ./
- name: Compile and run some C code
with:
arch: amd64
- name: Compile and run some C code (amd64)
shell: cmd
run: |
cl.exe hello.c
hello.exe
- name: Enable Developer Command Prompt (amd64_x86)
uses: ./
with:
arch: amd64_x86
- name: Compile and run some C code (x86)
shell: cmd
run: |
cl.exe hello.c
hello.exe
- name: Enable Developer Command Prompt (amd64_arm)
uses: ./
with:
arch: amd64_arm
- name: Compile some C code (arm)
shell: cmd
run: |
cl.exe hello.c
dumpbin /headers hello.exe
- name: Enable Developer Command Prompt (amd64_arm64)
uses: ./
with:
arch: amd64_arm64
- name: Compile some C code (arm64)
shell: cmd
run: |
cl.exe hello.c
dumpbin /headers hello.exe
audit:
name: npm audit
runs-on: windows-latest
+1 -4
View File
@@ -10,10 +10,7 @@ on:
jobs:
test:
name: release
runs-on: ${{ matrix.windows }}
strategy:
matrix:
windows: [windows-2016, windows-2019]
runs-on: windows-latest
steps:
- name: Setup Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
-1
View File
@@ -1 +0,0 @@
node_modules
+87 -16
View File
@@ -8,14 +8,57 @@ This sets up the environment for compiling C/C++ code from command line.
Supports Windows. Does nothing on Linux and macOS.
## Example usage
Basic usage for default compilation settings is like this:
```yaml
jobs:
test:
steps:
- uses: actions/checkout@v2
- uses: ilammy/msvc-dev-cmd@v1
- name: Build something requiring CL.EXE
run: |
cmake -G "NMake Makefiles" .
nmake
# ...
```
If you want something non-default,
like using a specific version of Visual Studio,
or cross-compling for a differen target,
you will need to configure those settings via inputs:
```yaml
jobs:
test:
# Run a job for each of the specified target architectures:
strategy:
matrix:
arch:
- amd64
- amd64_x86
- amd64_arm64
steps:
- uses: actions/checkout@v2
- uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.arch }}
- name: Build something requiring CL.EXE
run: |
cmake -G "NMake Makefiles" .
nmake
# ...
```
## Inputs
- `arch` target architecture
- 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`
- cross-compilation: `x86_amd64`, `x86_arm`, `x86_arm64`, `amd64_x86`, `amd64_arm`, `amd64_arm64`
- `sdk` Windows SDK to use
- do not specify to use the default SDK
- or specify full Windows 10 SDK number (e.g, `10.0.10240.0`)
@@ -28,20 +71,6 @@ Supports Windows. Does nothing on Linux and macOS.
- `uwp` set `true` to build for Universal Windows Platform (i.e., for Windows Store)
- `spectre` set `true` to use Visual Studio libraries with [Spectre](https://meltdownattack.com) mitigations
## Example usage
```yaml
jobs:
test:
- uses: actions/checkout@v1
- uses: ilammy/msvc-dev-cmd@v1
- name: Build something requiring CL.EXE
run: |
cmake -G "NMake Makefiles" .
nmake
# ...
```
## Caveats
### Name conflicts with `shell: bash`
@@ -58,6 +87,48 @@ If you experience compilation errors where `link` complains about unreasonable c
Recommended workaround is to remove `/usr/bin/link` if that interferes with your builds.
If this is not acceptable, please file an issue, then we'll figure out something better.
### Reconfiguration
You can invoke `ilammy/msvc-dev-cmd` multiple times during your jobs with different inputs
to reconfigure the environment for building with different settings
(e.g., to target multiple architectures).
```yaml
jobs:
release:
steps:
# ...
- name: Configure build for amd64
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64
- run: build # (for amd64)
- name: Configure build for x86
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64_x86
- run: build # (for x86)
- name: Configure build for ARM64
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64_arm64
- run: build # (for ARM64)
# ...
```
This mostly works but it's not really recommended
since Developer Command Prompt was not meant for recursive reconfiguration.
That said, if it does not work for you, please file an issue.
Consider using [`strategy.matrix`](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix)
to execute different build configuration in parallel, independent environments.
## License
MIT, see [LICENSE](LICENSE).
+37 -13
View File
@@ -55,6 +55,21 @@ function findVcvarsall() {
throw new Error('Microsoft Visual Studio not found')
}
function isPathVariable(name) {
const pathLikeVariables = ['PATH', 'INCLUDE', 'LIB', 'LIBPATH']
return pathLikeVariables.indexOf(name.toUpperCase()) != -1
}
function filterPathValue(path) {
let paths = path.split(';')
// Remove duplicates by keeping the first occurance and preserving order.
// This keeps path shadowing working as intended.
function unique(value, index, self) {
return self.indexOf(value) === index
}
return paths.filter(unique).join(';')
}
function main() {
if (process.platform != 'win32') {
core.info('This is not a Windows virtual environment, bye!')
@@ -101,25 +116,27 @@ function main() {
const vcvars = `"${findVcvarsall()}" ${args.join(' ')}`
core.debug(`vcvars command-line: ${vcvars}`)
const old_environment = child_process.execSync(`set`, {shell: "cmd"}).toString().split('\r\n')
const new_environment = child_process.execSync(`${vcvars} && set`, {shell: "cmd"}).toString().split('\r\n')
const cmd_output_string = child_process.execSync(`set && cls && ${vcvars} && cls && set`, {shell: "cmd"}).toString()
const cmd_output_parts = cmd_output_string.split('\f')
const old_environment = cmd_output_parts[0].split('\r\n')
const vcvars_output = cmd_output_parts[1].split('\r\n')
const new_environment = cmd_output_parts[2].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 new_environment) {
const error_messages = vcvars_output.filter((line) => {
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
if (!line.match(/Error in script usage. The correct usage is:$/)) {
return true
}
core.error(line)
}
}
if (failed) {
throw new Error('invalid parameters')
return false
})
if (error_messages.length > 0) {
throw new Error('invalid parameters' + '\r\n' + error_messages.join('\r\n'))
}
// Convert old environment lines into a dictionary for easier lookup.
@@ -139,11 +156,18 @@ function main() {
if (!string.includes('=')) {
continue;
}
const [name, new_value] = string.split('=')
const old_value = old_env_vars[name]
let [name, new_value] = string.split('=')
let old_value = old_env_vars[name]
// For new variables "old_value === undefined".
if (new_value !== old_value) {
core.info(`Setting ${name}`)
// Special case for a bunch of PATH-like variables: vcvarsall.bat
// just prepends its stuff without checking if its already there.
// This makes repeated invocations of this action fail after some
// point, when the environment variable overflows. Avoid that.
if (isPathVariable(name)) {
new_value = filterPathValue(new_value)
}
core.exportVariable(name, new_value)
}
}
+13
View File
@@ -0,0 +1,13 @@
{
"name": "msvc-dev-cmd",
"version": "1.8.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"node_modules/@actions/core": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.6.tgz",
"integrity": "sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA=="
}
}
}
+1263 -5
View File
File diff suppressed because it is too large Load Diff
+2 -3
View File
@@ -1,11 +1,10 @@
{
"name": "msvc-dev-cmd",
"version": "1.1.1",
"version": "1.8.1",
"description": "GitHub Action to setup Developer Command Prompt for Microsoft Visual C++",
"main": "index.js",
"scripts": {
"lint": "eslint index.js",
"test": "eslint index.js"
"lint": "eslint index.js"
},
"repository": {
"type": "git",