feat: support env-mapping
option
#73
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Tests | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
permissions: | |
contents: read | |
concurrency: | |
group: main-${{ github.head_ref || github.ref }} | |
cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
env: | |
NPM_CONFIG_AUDIT: "false" | |
NPM_CONFIG_FUND: "false" | |
jobs: | |
checks: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Install Dependencies | |
run: npm install | |
- name: Run tsc | |
run: npm run build | |
- name: Run fmt check | |
run: npm run fmt-check | |
- name: Run lint check | |
run: npm run lint | |
audit: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- run: npm install | |
- run: npm audit --audit-level moderate --omit dev | |
test-defaults: | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
uses: ./ | |
test-declare-inputs: | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
uses: ./ | |
with: | |
drive-size: 2GB | |
drive-format: NTFS | |
drive-type: Fixed | |
drive-path: "my_awesome_drive.vhdx" | |
mount-path: "" | |
mount-if-exists: false | |
workspace-copy: true | |
native-dev-drive: false | |
env-mapping: '' | |
test-formats: | |
strategy: | |
fail-fast: false | |
matrix: | |
drive-format: [ FAT, FAT32, exFAT, NTFS, ReFS ] | |
with-mount-path: [ true, false ] | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
uses: ./ | |
with: | |
drive-format: ${{ matrix.drive-format }} | |
# This should fall back to Drive Letter on unsupported drive formats. | |
mount-path: ${{ matrix.with-mount-path && 'mount' || '' }} | |
test-large-size: | |
strategy: | |
fail-fast: false | |
matrix: | |
drive-type: [ Fixed, Dynamic ] | |
with-mount-path: [ true, false ] | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
id: setup-drive | |
uses: ./ | |
with: | |
drive-size: 10GB | |
drive-type: ${{ matrix.drive-type }} | |
mount-path: ${{ matrix.with-mount-path && 'mount' || '' }} | |
test-paths-with-spaces: | |
strategy: | |
fail-fast: false | |
matrix: | |
with-mount-path: [ true, false ] | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
uses: ./ | |
with: | |
drive-size: 50MB | |
drive-format: NTFS | |
drive-path: "path/to/my/dev drive with spaces.vhdx" | |
mount-path: ${{ matrix.with-mount-path && 'my mount/location/with spaces' || '' }} | |
- name: Write File to Dev Drive | |
working-directory: ${{ env.DEV_DRIVE }} | |
run: New-Item test.txt | |
test-mount-path: | |
strategy: | |
fail-fast: false | |
matrix: | |
is-relative: [ true, false ] | |
drive-format: [ ReFS, NTFS ] | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
uses: ./ | |
with: | |
drive-format: ${{ matrix.drive-format }} | |
mount-path: ${{ matrix.is-relative && 'mount' || format('{0}/mount', github.workspace) }} | |
- name: Write File to Dev Drive | |
working-directory: ${{ env.DEV_DRIVE }} | |
run: | | |
New-Item test.txt | |
test-workspace-copy: | |
strategy: | |
fail-fast: false | |
matrix: | |
with-mount-path: [ true, false ] | |
workspace-copy: [ true ] | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
id: setup-drive | |
uses: ./ | |
with: | |
mount-path: ${{ matrix.with-mount-path && format('{0}/../mount', github.workspace) || '' }} | |
workspace-copy: ${{ matrix.workspace-copy }} | |
- name: Check workspace was copied | |
working-directory: ${{ env.DEV_DRIVE_WORKSPACE }} | |
run: | | |
Get-ChildItem -Force | |
if (-not $env:DEV_DRIVE_WORKSPACE) { | |
exit 1 | |
} | |
if (-not (Test-Path -Path action.yml -PathType Leaf)) { | |
exit 1 | |
} | |
test-workspace-copy-edge-cases: | |
strategy: | |
fail-fast: false | |
matrix: | |
with-mount-path: [ true, false ] | |
workspace-copy: [ true, false ] | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
id: setup-drive | |
continue-on-error: true | |
uses: ./ | |
with: | |
drive-path: "${{ github.workspace }}/dev_drive.vhdx" | |
mount-path: ${{ matrix.with-mount-path && format('{0}/mount', github.workspace) || '' }} | |
workspace-copy: ${{ matrix.workspace-copy }} | |
# Dev Drive Location | |
- name: Check dev drive is inside GitHub workspace | |
run: | | |
Get-ChildItem -Force | |
if (-not (Test-Path -Path dev_drive.vhdx -PathType Leaf)) { | |
exit 1 | |
} | |
- name: Check workspace was copied, filtering the dev drive | |
if: ${{ !matrix.with-mount-path && matrix.workspace-copy }} | |
working-directory: ${{ env.DEV_DRIVE_WORKSPACE }} | |
run: | | |
Get-ChildItem -Force | |
if (-not $env:DEV_DRIVE_WORKSPACE) { | |
exit 1 | |
} | |
if (Test-Path -Path dev_drive.vhdx -PathType Leaf) { | |
exit 1 | |
} | |
if (-not (Test-Path -Path action.yml -PathType Leaf)) { | |
exit 1 | |
} | |
# Drive Letter (with Dev Drive inside workspace) | |
- name: Fail when `workspace-copy` and success is not the outcome when drive letter is being used | |
if: ${{ !matrix.with-mount-path && matrix.workspace-copy && steps.setup-drive.outcome != 'success' }} | |
run: exit 1 | |
- name: Fail when not `workspace-copy` and success is not the outcome when drive letter is being used | |
if: ${{ !matrix.with-mount-path && !matrix.workspace-copy && steps.setup-drive.outcome != 'success' }} | |
run: exit 1 | |
# Mount Path (with mount inside workspace) | |
- name: Fail when `workspace-copy` and failure is not the outcome when mount path is inside workspace | |
if: ${{ matrix.with-mount-path && matrix.workspace-copy && steps.setup-drive.outcome != 'failure' }} | |
run: exit 1 | |
- name: Fail when not `workspace-copy` and success is not the outcome when mount path inside workspace | |
if: ${{ matrix.with-mount-path && !matrix.workspace-copy && steps.setup-drive.outcome != 'success' }} | |
run: exit 1 | |
test-unsupported-os: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
uses: ./ | |
test-legacy-runners: | |
runs-on: windows-2019 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
id: setup-drive | |
continue-on-error: true | |
uses: ./ | |
- name: Fail when failure is not the outcome | |
if: steps.setup-drive.outcome != 'failure' | |
run: exit 1 | |
test-cache-storage: | |
strategy: | |
fail-fast: false | |
matrix: | |
with-mount-path: [ true, false ] | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
uses: ./ | |
with: | |
drive-size: 50MB | |
drive-format: NTFS | |
drive-path: "my_cached_drive.vhdx" | |
mount-path: ${{ matrix.with-mount-path && format('{0}/mount', github.workspace) || '' }} | |
mount-if-exists: true | |
- name: Write File to Dev Drive | |
working-directory: ${{ env.DEV_DRIVE }} | |
# Dismount so we can always force-cache the disk via actions/cache/save | |
run: | | |
New-Item test.txt | |
Dismount-VHD -Path ${{ env.DEV_DRIVE_PATH }} | |
- name: Cache Dev Drive | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ env.DEV_DRIVE_PATH }} | |
key: ${{ matrix.with-mount-path && format('test-cache-mount-path-{0}', github.run_id) || format('test-cache-drive-letter-{0}', github.run_id) }} | |
outputs: | |
dev-drive-path: ${{ env.DEV_DRIVE_PATH }} | |
test-cache-retrieval: | |
strategy: | |
fail-fast: false | |
matrix: | |
with-mount-path: [ true, false ] | |
runs-on: windows-2022 | |
needs: [test-cache-storage] | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Retrieve Cached Dev Drive | |
uses: actions/cache/restore@v4 | |
with: | |
path: ${{ needs.test-cache-storage.outputs.dev-drive-path }} | |
key: ${{ matrix.with-mount-path && format('test-cache-mount-path-{0}', github.run_id) || format('test-cache-drive-letter-{0}', github.run_id) }} | |
fail-on-cache-miss: true | |
- name: Setup Dev Drive | |
uses: ./ | |
with: | |
drive-path: "my_cached_drive.vhdx" | |
mount-path: ${{ matrix.with-mount-path && format('{0}/mount', github.workspace) || '' }} | |
mount-if-exists: true | |
- name: Check File in Dev Drive | |
working-directory: ${{ env.DEV_DRIVE }} | |
run: | | |
Get-ChildItem -Force | |
if (-not (Test-Path -Path test.txt -PathType Leaf)) { | |
exit 1 | |
} | |
test-env-mapping: | |
runs-on: windows-2022 | |
steps: | |
- name: Check out source code | |
uses: actions/checkout@v4 | |
- name: Setup Dev Drive | |
uses: ./ | |
with: | |
workspace-copy: true | |
env-mapping: | | |
CARGO_HOME,{{ DEV_DRIVE }}/.cargo | |
RUSTUP_HOME,{{ DEV_DRIVE }}/.rustup | |
MY_ENV_VAR , {{ DEV_DRIVE_PATH }} | |
MY_OTHER_ENV_VAR,{{ DEV_DRIVE_WORKSPACE }}\other\path | |
SHOULD_WARN, | |
should_also_warn,about_template | |
invalid-env-var,??? | |
invalid.env.var,!!! | |
ENV_VAR_VALUE_INCLUDES_COMMAS,{{ DEV_DRIVE}}/my file name, with commas.txt | |
a | |
, | |
42,{{ DEV_DRIVE }}/42 | |
does_it_substitute_1137,{{ DEV_DRIVE }}/$DEV_DRIVE | |
- name: Verify Env Mapping | |
run: | | |
if ($Env:CARGO_HOME -ne '${{ env.DEV_DRIVE }}/.cargo') { Write-Error 'Failed CARGO_HOME'; exit 1 } | |
if ($Env:RUSTUP_HOME -ne '${{ env.DEV_DRIVE }}/.rustup') { Write-Error 'Failed RUSTUP_HOME'; exit 1 } | |
if ($Env:MY_ENV_VAR -ne '${{ env.DEV_DRIVE_PATH }}') { Write-Error 'Failed MY_ENV_VAR'; exit 1 } | |
if ($Env:MY_OTHER_ENV_VAR -ne '${{ env.DEV_DRIVE_WORKSPACE }}\other\path') { Write-Error 'Failed MY_OTHER_ENV_VAR'; exit 1 } | |
if ($Env:SHOULD_WARN -ne $null) { Write-Error 'Failed SHOULD_WARN'; exit 1 } | |
if ($Env:should_also_warn -ne $null) { Write-Error 'Failed should_also_warn'; exit 1 } | |
if (${Env:invalid-env-var} -ne $null) { Write-Error 'Failed invalid-env-var'; exit 1 } | |
if (${Env:invalid.env.var} -ne $null) { Write-Error 'Failed invalid.env.var'; exit 1 } | |
if ($Env:ENV_VAR_VALUE_INCLUDES_COMMAS -ne '${{ env.DEV_DRIVE }}/my file name, with commas.txt') { Write-Error 'Failed ENV_VAR_VALUE_INCLUDES_COMMAS'; exit 1 } | |
if ($Env:a -ne $null) { Write-Error 'Failed a'; exit 1 } | |
if (${Env:,} -ne $null) { Write-Error 'Failed ,'; exit 1 } | |
if (${Env:42} -ne $null) { Write-Error 'Failed 42'; exit 1 } | |
if ($Env:does_it_substitute_1137 -ne '${{ env.DEV_DRIVE }}/$DEV_DRIVE') { Write-Error 'Failed does_it_substitute_1137'; exit 1 } |