Skip to content

feat: support env-mapping option (#11) #74

feat: support env-mapping option (#11)

feat: support env-mapping option (#11) #74

Workflow file for this run

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 }