Build and Test #1018
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
# Copyright 2020-2024 Björn Kautler | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
# This file was generated using Kotlin DSL (.github/workflows/test.main.kts). | |
# If you want to modify the workflow, please change the Kotlin file and regenerate this YAML file. | |
# Generated with https://github.com/typesafegithub/github-workflows-kt | |
name: 'Build and Test' | |
on: | |
push: {} | |
pull_request: {} | |
schedule: | |
- cron: '0 0 * * *' | |
jobs: | |
check_yaml_consistency: | |
name: 'Check YAML consistency' | |
runs-on: 'ubuntu-latest' | |
steps: | |
- id: 'step-0' | |
name: 'Check out' | |
uses: 'actions/checkout@v4' | |
- id: 'step-1' | |
name: 'Execute script' | |
run: 'rm ''.github/workflows/test.yaml'' && ''.github/workflows/test.main.kts''' | |
- id: 'step-2' | |
name: 'Consistency check' | |
run: 'git diff --exit-code ''.github/workflows/test.yaml''' | |
build: | |
name: 'Build' | |
runs-on: 'windows-latest' | |
needs: | |
- 'check_yaml_consistency' | |
steps: | |
- id: 'step-0' | |
name: 'Configure Git' | |
run: 'git config --global core.autocrlf input' | |
- id: 'step-1' | |
name: 'Checkout' | |
uses: 'actions/checkout@v4' | |
- id: 'step-2' | |
name: 'Setup Java 11' | |
uses: 'actions/setup-java@v4' | |
with: | |
java-version: '11' | |
distribution: 'temurin' | |
- id: 'step-3' | |
name: 'Build' | |
uses: 'burrunan/gradle-cache-action@v1' | |
with: | |
debug: 'false' | |
concurrent: 'true' | |
arguments: |- | |
--show-version | |
build | |
--info | |
--stacktrace | |
--scan | |
- id: 'step-4' | |
name: 'Save built artifacts to cache' | |
uses: 'actions/cache/save@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
test_invalid_distribution: | |
name: 'Test "${{ matrix.distribution.label }}" distribution on ${{ matrix.environment }}' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distribution: | |
- user-id: 'invalid' | |
label: 'invalid' | |
- user-id: '' | |
label: '' | |
- user-id: null | |
label: 'null' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action' | |
continue-on-error: true | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
- id: 'step-2' | |
name: 'Test - action should fail if an invalid distribution is given' | |
shell: 'cmd' | |
run: 'if ''${{ steps.step-1.outcome }}'' NEQ ''failure'' exit 1' | |
test_default_distribution: | |
name: 'Test default distribution on ${{ matrix.environment }}' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distribution: | |
- wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action' | |
uses: './' | |
with: | |
update: 'true' | |
- id: 'step-2' | |
name: 'Test - wsl-bash should be available as custom shell' | |
shell: 'wsl-bash {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-3' | |
name: 'Test - wsl-bash should fail if the script fails (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: 'false' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-4' | |
name: 'Test - wsl-bash should fail if the script fails (verification)' | |
shell: 'cmd' | |
run: 'IF ''${{ steps.step-3.outcome }}'' NEQ ''failure'' EXIT /B 1' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-5' | |
name: 'Test - wsl-bash should fail if one of the commands fails (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: |- | |
false | |
: | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-6' | |
name: 'Test - wsl-bash should fail if one of the commands fails (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-5.outcome }}'' == ''failure'' ] || exit 1' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-7' | |
name: 'Test - wsl-bash should fail if an undefined variable is used (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: '$foo' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-8' | |
name: 'Test - wsl-bash should fail if an undefined variable is used (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-7.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-9' | |
name: 'Test - wsl-bash should fail if any command in a pipe fails (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: 'false | true' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-10' | |
name: 'Test - wsl-bash should fail if any command in a pipe fails (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-9.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-11' | |
name: 'Test - the default distribution should be correct' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(wsl.exe --list || true) <(wsl.exe --list || true | iconv -f UTF-16LE -t UTF-8) <(wslconfig.exe /list || true) <(wslconfig.exe /list || true | iconv -f UTF-16LE -t UTF-8) | |
[[ "$(cat <(wsl.exe --list || true) <(wsl.exe --list || true | iconv -f UTF-16LE -t UTF-8) <(wslconfig.exe /list || true) <(wslconfig.exe /list || true | iconv -f UTF-16LE -t UTF-8))" == *${{ matrix.distribution.wsl-id }}\ \(Default\)* ]] | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-12' | |
name: 'Test - wsl-bash should use the correct distribution' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distribution.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-13' | |
name: 'Test - multi-line commands should not be disturbed by CRLF line endings' | |
shell: 'wsl-bash {0}' | |
run: |- | |
: # this comment catches the CR if present | |
! grep -q $'\r' "$0" # this comment catches the CR if present | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-14' | |
name: 'Test - wsl-bash should fail if no script file is given (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-15' | |
name: 'Test - wsl-bash should fail if no script file is given (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-14.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-16' | |
name: 'Test - wsl-bash should fail if more than one parameter is given and first is not -u (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash user {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-17' | |
name: 'Test - wsl-bash should fail if more than one parameter is given and first is not -u (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-16.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-18' | |
name: 'Test - wsl-bash should fail if only user is given (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash -u {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-19' | |
name: 'Test - wsl-bash should fail if only user is given (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-18.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-20' | |
name: 'Test - wsl-bash should fail if excess argument is given (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash -u user {0} foo' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-21' | |
name: 'Test - wsl-bash should fail if excess argument is given (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-20.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-22' | |
name: 'Test - wsl-bash should fail if given script file does not exist (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash -u user {0}foo' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-23' | |
name: 'Test - wsl-bash should fail if given script file does not exist (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-22.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
test: | |
name: 'Test "${{ matrix.distribution.user-id }}" distribution on ${{ matrix.environment }}' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distribution: | |
- wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Alpine' | |
user-id: 'Alpine' | |
match-pattern: '*Alpine*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'kali-linux' | |
user-id: 'kali-linux' | |
match-pattern: '*Kali*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'openSUSE-Leap-15.2' | |
user-id: 'openSUSE-Leap-15.2' | |
match-pattern: '*openSUSE*Leap*15.2*' | |
default-absent-tool: 'which' | |
- wsl-id: 'Ubuntu-24.04' | |
user-id: 'Ubuntu-24.04' | |
match-pattern: '*Ubuntu*24.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-22.04' | |
match-pattern: '*Ubuntu*22.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-16.04' | |
user-id: 'Ubuntu-16.04' | |
match-pattern: '*Ubuntu*16.04*' | |
default-absent-tool: 'dos2unix' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
use-cache: 'false' | |
- id: 'step-2' | |
name: 'Test - wsl-bash should fail if bash is not present by default (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id == 'Alpine') | |
- id: 'step-3' | |
name: 'Test - wsl-bash should fail if bash is not present by default (verification)' | |
run: 'wsl sh -euc "[ ''${{ steps.step-2.outcome }}'' = ''failure'' ]"' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id == 'Alpine') | |
- id: 'step-4' | |
name: 'Delete wsl-bash' | |
shell: 'cmd' | |
run: 'DEL /F "${{ steps.step-1.outputs.wsl-shell-wrapper-path }}"' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id == 'Alpine') | |
- id: 'step-5' | |
name: 'Install Bash on Alpine' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
additional-packages: 'bash' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id == 'Alpine') | |
- id: 'step-6' | |
name: 'Test - wsl-bash should be available as custom shell' | |
shell: 'wsl-bash {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-7' | |
name: 'Test - wsl-bash should fail if the script fails (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: 'false' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-8' | |
name: 'Test - wsl-bash should fail if the script fails (verification)' | |
shell: 'cmd' | |
run: 'IF ''${{ steps.step-7.outcome }}'' NEQ ''failure'' EXIT /B 1' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-9' | |
name: 'Test - wsl-bash should fail if one of the commands fails (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: |- | |
false | |
: | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-10' | |
name: 'Test - wsl-bash should fail if one of the commands fails (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-9.outcome }}'' == ''failure'' ] || exit 1' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-11' | |
name: 'Test - wsl-bash should fail if an undefined variable is used (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: '$foo' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-12' | |
name: 'Test - wsl-bash should fail if an undefined variable is used (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-11.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-13' | |
name: 'Test - wsl-bash should fail if any command in a pipe fails (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: 'false | true' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-14' | |
name: 'Test - wsl-bash should fail if any command in a pipe fails (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-13.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-15' | |
name: 'Test - the default distribution should be correct' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(wsl.exe --list || true) <(wsl.exe --list || true | iconv -f UTF-16LE -t UTF-8) <(wslconfig.exe /list || true) <(wslconfig.exe /list || true | iconv -f UTF-16LE -t UTF-8) | |
[[ "$(cat <(wsl.exe --list || true) <(wsl.exe --list || true | iconv -f UTF-16LE -t UTF-8) <(wslconfig.exe /list || true) <(wslconfig.exe /list || true | iconv -f UTF-16LE -t UTF-8))" == *${{ matrix.distribution.wsl-id }}\ \(Default\)* ]] | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-16' | |
name: 'Test - wsl-bash should use the correct distribution' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distribution.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-17' | |
name: 'Test - multi-line commands should not be disturbed by CRLF line endings' | |
shell: 'wsl-bash {0}' | |
run: |- | |
: # this comment catches the CR if present | |
! grep -q $'\r' "$0" # this comment catches the CR if present | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-18' | |
name: 'Test - ${{ matrix.distribution.default-absent-tool }} should not be installed by default (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: '${{ matrix.distribution.default-absent-tool }} --version' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-19' | |
name: 'Test - ${{ matrix.distribution.default-absent-tool }} should not be installed by default (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-18.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-20' | |
name: 'Test - bash should be installed by default' | |
shell: 'wsl-bash {0}' | |
run: 'bash -c true' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-21' | |
name: 'Test - sh should be installed by default' | |
shell: 'wsl-bash {0}' | |
run: 'sh -c true' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-22' | |
name: 'Test - wsl-sh should not be present (provocation)' | |
continue-on-error: true | |
shell: 'wsl-sh {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-23' | |
name: 'Test - wsl-sh should not be present (verification)' | |
shell: 'wsl-bash {0}' | |
run: '[ ''${{ steps.step-22.outcome }}'' == ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-24' | |
name: 'Add wsl-sh wrapper' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
wsl-shell-command: 'sh -eu' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-25' | |
name: 'Test - wsl-sh should be present' | |
shell: 'wsl-sh {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-24.outcome == 'success') | |
- id: 'step-26' | |
name: 'Test - wsl-bash should use bash' | |
shell: 'wsl-bash {0}' | |
run: |- | |
ps -o pid='' -o comm='' | grep "^\s\+$$\s\+" | grep -o '\S\+$' | |
[ "$(ps -o pid='' -o comm='' 2>/dev/null | grep "^\s\+$$\s\+" | grep -o '\S\+$')" == 'bash' ] | |
if: |- | |
always() | |
&& (steps.step-24.outcome == 'success') | |
- id: 'step-27' | |
name: 'Test - wsl-sh should use sh' | |
shell: 'wsl-sh {0}' | |
run: |- | |
ps -o pid='' -o comm='' | grep "^\s\+$$\s\+" | grep -o '\S\+$' | |
[ "$(ps -o pid='' -o comm='' 2>/dev/null | grep "^\s\+$$\s\+" | grep -o '\S\+$')" = 'sh' ] | |
if: |- | |
always() | |
&& (steps.step-24.outcome == 'success') | |
- id: 'step-28' | |
name: 'Delete wsl-bash' | |
shell: 'cmd' | |
run: 'DEL /F "${{ steps.step-1.outputs.wsl-shell-wrapper-path }}"' | |
if: |- | |
always() | |
&& (steps.step-24.outcome == 'success') | |
- id: 'step-29' | |
name: 'Test - wsl-bash should not be present (provocation)' | |
continue-on-error: true | |
shell: 'wsl-bash {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-24.outcome == 'success') | |
- id: 'step-30' | |
name: 'Test - wsl-bash should not be present (verification)' | |
shell: 'wsl-sh {0}' | |
run: '[ ''${{ steps.step-29.outcome }}'' = ''failure'' ]' | |
if: |- | |
always() | |
&& (steps.step-24.outcome == 'success') | |
- id: 'step-31' | |
name: 'Re-add wsl-bash wrapper' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
if: |- | |
always() | |
&& (steps.step-24.outcome == 'success') | |
- id: 'step-32' | |
name: 'Test - wsl-bash should be present' | |
shell: 'wsl-bash {0}' | |
run: ':' | |
if: |- | |
always() | |
&& (steps.step-31.outcome == 'success') | |
- id: 'step-33' | |
name: 'Test - wsl-bash should use bash' | |
shell: 'wsl-bash {0}' | |
run: |- | |
ps -o pid='' -o comm='' | grep "^\s\+$$\s\+" | grep -o '\S\+$' | |
[ "$(ps -o pid='' -o comm='' 2>/dev/null | grep "^\s\+$$\s\+" | grep -o '\S\+$')" == 'bash' ] | |
if: |- | |
always() | |
&& (steps.step-31.outcome == 'success') | |
- id: 'step-34' | |
name: 'Test - wsl-bash should use root as default user' | |
shell: 'wsl-bash {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'root' ] | |
if: |- | |
always() | |
&& (steps.step-31.outcome == 'success') | |
- id: 'step-35' | |
name: 'Add user test' | |
shell: 'wsl-bash {0}' | |
run: 'useradd -m -p 4qBD5NWD3IkbU test' | |
if: |- | |
always() | |
&& (steps.step-31.outcome == 'success') | |
- id: 'step-36' | |
name: 'Set wsl-bash wrapper to use user test by default' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
additional-packages: 'sudo' | |
wsl-shell-command: 'bash -c "sudo -u test bash --noprofile --norc -euo pipefail "\' | |
if: |- | |
always() | |
&& (steps.step-31.outcome == 'success') | |
- id: 'step-37' | |
name: 'Test - wsl-bash should use test as default user' | |
shell: 'wsl-bash {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'test' ] | |
if: |- | |
always() | |
&& (steps.step-36.outcome == 'success') | |
- id: 'step-38' | |
name: 'Set wsl-bash wrapper to use user test by default with inline script usage' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
wsl-shell-command: 'bash -c "sudo -u test bash --noprofile --norc -euo pipefail ''{0}''"' | |
if: |- | |
always() | |
&& (steps.step-36.outcome == 'success') | |
- id: 'step-39' | |
name: 'Test - wsl-bash should use test as default user with inline script usage' | |
shell: 'wsl-bash {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'test' ] | |
if: |- | |
always() | |
&& (steps.step-38.outcome == 'success') | |
- id: 'step-40' | |
name: 'Delete wsl-bash' | |
shell: 'cmd' | |
run: 'DEL /F "${{ steps.step-38.outputs.wsl-shell-wrapper-path }}"' | |
if: |- | |
always() | |
&& (steps.step-38.outcome == 'success') | |
- id: 'step-41' | |
name: 'Set wsl-bash wrapper to use default user by default' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
if: |- | |
always() | |
&& (steps.step-38.outcome == 'success') | |
- id: 'step-42' | |
name: 'Test - wsl-bash should use root as default user' | |
shell: 'wsl-bash {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'root' ] | |
if: |- | |
always() | |
&& (steps.step-41.outcome == 'success') | |
- id: 'step-43' | |
name: 'Test - test user does already exist' | |
shell: 'wsl-bash {0}' | |
run: 'id -u test' | |
if: |- | |
always() | |
&& (steps.step-41.outcome == 'success') | |
- id: 'step-44' | |
name: 'Delete wsl-bash' | |
shell: 'cmd' | |
run: 'DEL /F "${{ steps.step-41.outputs.wsl-shell-wrapper-path }}"' | |
if: |- | |
always() | |
&& (steps.step-41.outcome == 'success') | |
- id: 'step-45' | |
name: 'Set wsl-bash wrapper to use existing user test by default with extra parameter' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
wsl-shell-user: 'test' | |
if: |- | |
always() | |
&& (steps.step-41.outcome == 'success') | |
- id: 'step-46' | |
name: 'Test - wsl-bash should use existing user test as default user with extra parameter' | |
shell: 'wsl-bash {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'test' ] | |
if: |- | |
always() | |
&& (steps.step-45.outcome == 'success') | |
- id: 'step-47' | |
name: 'Test - test2 user does not exist' | |
shell: 'wsl-bash {0}' | |
run: '! id -u test2' | |
if: |- | |
always() | |
&& (steps.step-45.outcome == 'success') | |
- id: 'step-48' | |
name: 'Delete wsl-bash' | |
shell: 'cmd' | |
run: 'DEL /F "${{ steps.step-45.outputs.wsl-shell-wrapper-path }}"' | |
if: |- | |
always() | |
&& (steps.step-45.outcome == 'success') | |
- id: 'step-49' | |
name: 'Set wsl-bash wrapper to use non-existing user test2 by default with extra parameter' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
wsl-shell-user: 'test2' | |
if: |- | |
always() | |
&& (steps.step-45.outcome == 'success') | |
- id: 'step-50' | |
name: 'Test - wsl-bash should use auto-generated user test2 as default user' | |
shell: 'wsl-bash {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'test2' ] | |
if: |- | |
always() | |
&& (steps.step-49.outcome == 'success') | |
- id: 'step-51' | |
name: 'Test - wsl-bash should use ad-hoc user test' | |
shell: 'wsl-bash -u test {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'test' ] | |
if: |- | |
always() | |
&& (steps.step-49.outcome == 'success') | |
- id: 'step-52' | |
name: 'Test - wsl-bash should use ad-hoc user root' | |
shell: 'wsl-bash -u root {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'root' ] | |
if: |- | |
always() | |
&& (steps.step-49.outcome == 'success') | |
- id: 'step-53' | |
name: 'Make a no-op execution of the action' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
if: |- | |
always() | |
&& (steps.step-49.outcome == 'success') | |
- id: 'step-54' | |
name: 'Test - wsl-bash should still use test2 as default user' | |
shell: 'wsl-bash {0}' | |
run: |- | |
whoami | |
[ "$(whoami)" == 'test2' ] | |
if: |- | |
always() | |
&& (steps.step-53.outcome == 'success') | |
test_wsl-conf_on_initial_execution: | |
name: 'Test /etc/wsl.conf handling on initial execution for "${{ matrix.distribution.user-id }}" distribution on ${{ matrix.environment }}' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distribution: | |
- wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Alpine' | |
user-id: 'Alpine' | |
match-pattern: '*Alpine*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'kali-linux' | |
user-id: 'kali-linux' | |
match-pattern: '*Kali*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'openSUSE-Leap-15.2' | |
user-id: 'openSUSE-Leap-15.2' | |
match-pattern: '*openSUSE*Leap*15.2*' | |
default-absent-tool: 'which' | |
- wsl-id: 'Ubuntu-24.04' | |
user-id: 'Ubuntu-24.04' | |
match-pattern: '*Ubuntu*24.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-22.04' | |
match-pattern: '*Ubuntu*22.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-16.04' | |
user-id: 'Ubuntu-16.04' | |
match-pattern: '*Ubuntu*16.04*' | |
default-absent-tool: 'dos2unix' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
wsl-conf: |- | |
[automount] | |
options = uid=1000 | |
- id: 'step-2' | |
name: 'Delete wsl-bash' | |
shell: 'cmd' | |
run: 'DEL /F "${{ steps.step-1.outputs.wsl-shell-wrapper-path }}"' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id == 'Alpine') | |
- id: 'step-3' | |
name: 'Install Bash on Alpine' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
additional-packages: 'bash' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id == 'Alpine') | |
- id: 'step-4' | |
name: 'Test - /etc/wsl.conf should exist' | |
shell: 'wsl-bash {0}' | |
run: |- | |
[ -f /etc/wsl.conf ] | |
cat /etc/wsl.conf | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-5' | |
name: 'Test - /mnt/c should be mounted with uid 1000' | |
shell: 'wsl-bash {0}' | |
run: |- | |
ls -alh /mnt | |
[[ "$(stat -c %u /mnt/c)" == 1000 ]] | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
test_wsl-conf_on_subsequent_execution: | |
name: 'Test /etc/wsl.conf handling on subsequent execution for "${{ matrix.distribution.user-id }}" distribution on ${{ matrix.environment }}' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distribution: | |
- wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Alpine' | |
user-id: 'Alpine' | |
match-pattern: '*Alpine*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'kali-linux' | |
user-id: 'kali-linux' | |
match-pattern: '*Kali*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'openSUSE-Leap-15.2' | |
user-id: 'openSUSE-Leap-15.2' | |
match-pattern: '*openSUSE*Leap*15.2*' | |
default-absent-tool: 'which' | |
- wsl-id: 'Ubuntu-24.04' | |
user-id: 'Ubuntu-24.04' | |
match-pattern: '*Ubuntu*24.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-22.04' | |
match-pattern: '*Ubuntu*22.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-16.04' | |
user-id: 'Ubuntu-16.04' | |
match-pattern: '*Ubuntu*16.04*' | |
default-absent-tool: 'dos2unix' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
- id: 'step-2' | |
name: 'Delete wsl-bash' | |
shell: 'cmd' | |
run: 'DEL /F "${{ steps.step-1.outputs.wsl-shell-wrapper-path }}"' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id == 'Alpine') | |
- id: 'step-3' | |
name: 'Install Bash on Alpine' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
additional-packages: 'bash' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id == 'Alpine') | |
- id: 'step-4' | |
name: 'Test - /etc/wsl.conf should not exist' | |
shell: 'wsl-bash {0}' | |
run: '[ ! -f /etc/wsl.conf ] || { cat /etc/wsl.conf; false; }' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
&& (matrix.distribution.user-id != 'Ubuntu-24.04') | |
- id: 'step-5' | |
name: 'Test - C: should be mounted at /mnt/c' | |
shell: 'wsl-bash {0}' | |
run: |- | |
mount | |
mount | grep 'C:.* on /mnt/c' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-6' | |
name: 'Test - /mnt/c should be mounted with uid 0' | |
shell: 'wsl-bash {0}' | |
run: |- | |
ls -alh /mnt | |
[[ "$(stat -c %u /mnt/c)" == 0 ]] | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-7' | |
name: 'Execute action' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
wsl-conf: |- | |
[automount] | |
root = / | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-8' | |
name: 'Test - /etc/wsl.conf should exist' | |
shell: 'wsl-bash {0}' | |
run: |- | |
[ -f /etc/wsl.conf ] | |
cat /etc/wsl.conf | |
if: |- | |
always() | |
&& (steps.step-7.outcome == 'success') | |
- id: 'step-9' | |
name: 'Test - C: should be mounted at /c' | |
shell: 'wsl-bash {0}' | |
run: |- | |
mount | |
mount | grep 'C:.* on /c' | |
if: |- | |
always() | |
&& (steps.step-7.outcome == 'success') | |
test_additional_packages: | |
name: 'Test additional packages for "${{ matrix.distribution.user-id }}" distribution on ${{ matrix.environment }}' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distribution: | |
- wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Alpine' | |
user-id: 'Alpine' | |
match-pattern: '*Alpine*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'kali-linux' | |
user-id: 'kali-linux' | |
match-pattern: '*Kali*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'openSUSE-Leap-15.2' | |
user-id: 'openSUSE-Leap-15.2' | |
match-pattern: '*openSUSE*Leap*15.2*' | |
default-absent-tool: 'which' | |
- wsl-id: 'Ubuntu-24.04' | |
user-id: 'Ubuntu-24.04' | |
match-pattern: '*Ubuntu*24.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-22.04' | |
match-pattern: '*Ubuntu*22.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-16.04' | |
user-id: 'Ubuntu-16.04' | |
match-pattern: '*Ubuntu*16.04*' | |
default-absent-tool: 'dos2unix' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
additional-packages: '${{ matrix.distribution.default-absent-tool }} bash' | |
- id: 'step-2' | |
name: 'Test - ${{ matrix.distribution.default-absent-tool }} should be installed' | |
shell: 'wsl-bash {0}' | |
run: '${{ matrix.distribution.default-absent-tool }} --version' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-3' | |
name: 'Test - bash should be installed' | |
shell: 'wsl-bash {0}' | |
run: 'bash -c true' | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
test_multiple_usage_with_different_distributions: | |
name: 'Test multiple usage with different distributions ("${{ matrix.distributions.distribution1.user-id }}" / "${{ matrix.distributions.distribution2.user-id }}" / "${{ matrix.distributions.distribution3.user-id }}") on ${{ matrix.environment }}' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distributions: | |
- distribution1: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
distribution3: | |
wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
- distribution1: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
distribution3: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- distribution1: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution3: | |
wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
- distribution1: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
distribution3: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
- distribution1: | |
wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution3: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- distribution1: | |
wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
distribution3: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action for ${{ matrix.distributions.distribution1.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution1.user-id }}' | |
- id: 'step-2' | |
name: 'Execute action for ${{ matrix.distributions.distribution2.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution2.user-id }}' | |
- id: 'step-3' | |
name: 'Execute action for ${{ matrix.distributions.distribution3.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution3.user-id }}' | |
set-as-default: 'false' | |
- id: 'step-4' | |
name: 'Execute action for ${{ matrix.distributions.distribution1.user-id }} again' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution1.user-id }}' | |
- id: 'step-5' | |
name: 'Test - the default distribution should be the last installed distribution with set-as-default true' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(wsl.exe --list || true) <(wsl.exe --list || true | iconv -f UTF-16LE -t UTF-8) <(wslconfig.exe /list || true) <(wslconfig.exe /list || true | iconv -f UTF-16LE -t UTF-8) | |
[[ "$(cat <(wsl.exe --list || true) <(wsl.exe --list || true | iconv -f UTF-16LE -t UTF-8) <(wslconfig.exe /list || true) <(wslconfig.exe /list || true | iconv -f UTF-16LE -t UTF-8))" == *${{ matrix.distributions.distribution2.wsl-id }}\ \(Default\)* ]] | |
if: |- | |
always() | |
&& (steps.step-4.outcome == 'success') | |
- id: 'step-6' | |
name: 'Test - wsl-bash should use the last installed distribution with set-as-default true' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution2.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-4.outcome == 'success') | |
test_multiple_usage_with_same_distribution: | |
name: 'Test multiple usage with "${{ matrix.distribution.user-id }}" distribution on ${{ matrix.environment }}' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distribution: | |
- wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Alpine' | |
user-id: 'Alpine' | |
match-pattern: '*Alpine*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'kali-linux' | |
user-id: 'kali-linux' | |
match-pattern: '*Kali*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'openSUSE-Leap-15.2' | |
user-id: 'openSUSE-Leap-15.2' | |
match-pattern: '*openSUSE*Leap*15.2*' | |
default-absent-tool: 'which' | |
- wsl-id: 'Ubuntu-24.04' | |
user-id: 'Ubuntu-24.04' | |
match-pattern: '*Ubuntu*24.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-22.04' | |
match-pattern: '*Ubuntu*22.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
- wsl-id: 'Ubuntu-16.04' | |
user-id: 'Ubuntu-16.04' | |
match-pattern: '*Ubuntu*16.04*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
- wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
exclude: | |
- environment: 'windows-2019' | |
distribution: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
- environment: 'windows-2022' | |
distribution: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
- environment: 'windows-latest' | |
distribution: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
include: | |
- environment: 'windows-2019' | |
distribution: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- environment: 'windows-2022' | |
distribution: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
- environment: 'windows-latest' | |
distribution: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
additional-packages: 'bash' | |
- id: 'step-2' | |
name: 'Update distribution' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
update: 'true' | |
if: |- | |
(matrix.distribution.user-id != 'kali-linux') | |
&& (matrix.distribution.user-id != 'Ubuntu-24.04') | |
- id: 'step-3' | |
name: 'Install default absent tool' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
additional-packages: '${{ matrix.distribution.default-absent-tool }}' | |
- id: 'step-4' | |
name: 'Test - ${{ matrix.distribution.default-absent-tool }} should be installed' | |
shell: 'wsl-bash {0}' | |
run: '${{ matrix.distribution.default-absent-tool }} --version' | |
if: |- | |
always() | |
&& (steps.step-3.outcome == 'success') | |
- id: 'step-5' | |
name: 'Execute action for ${{ matrix.distribution2.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution2.user-id }}' | |
if: |- | |
always() | |
&& (steps.step-3.outcome == 'success') | |
- id: 'step-6' | |
name: 'Test - "${{ matrix.distribution2.user-id }}" should be the default distribution after installation' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distribution2.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-5.outcome == 'success') | |
- id: 'step-7' | |
name: 'Re-execute action' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
if: |- | |
always() | |
&& (steps.step-5.outcome == 'success') | |
- id: 'step-8' | |
name: 'Test - "${{ matrix.distribution2.user-id }}" should still be the default distribution after re-running for "${{ matrix.distribution.user-id }}"' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distribution2.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-7.outcome == 'success') | |
- id: 'step-9' | |
name: 'Set as default' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distribution.user-id }}' | |
set-as-default: 'true' | |
if: |- | |
always() | |
&& (steps.step-7.outcome == 'success') | |
- id: 'step-10' | |
name: 'Test - "${{ matrix.distribution.user-id }}" should be the default distribution after re-running with set-as-default true' | |
shell: 'wsl-bash {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distribution.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-9.outcome == 'success') | |
test_distribution_specific_wsl_bash_scripts: | |
name: 'Test distribution specific wsl-bash scripts on ${{ matrix.environment }} (without ${{ matrix.distributions.incompatibleUbuntu }})' | |
runs-on: '${{ matrix.environment }}' | |
needs: | |
- 'build' | |
- 'check_yaml_consistency' | |
strategy: | |
fail-fast: false | |
matrix: | |
environment: | |
- 'windows-2019' | |
- 'windows-2022' | |
- 'windows-latest' | |
distributions: | |
- incompatibleUbuntu: 'Ubuntu-22.04' | |
distribution1: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Alpine' | |
user-id: 'Alpine' | |
match-pattern: '*Alpine*' | |
default-absent-tool: 'dos2unix' | |
distribution3: | |
wsl-id: 'kali-linux' | |
user-id: 'kali-linux' | |
match-pattern: '*Kali*' | |
default-absent-tool: 'dos2unix' | |
distribution4: | |
wsl-id: 'openSUSE-Leap-15.2' | |
user-id: 'openSUSE-Leap-15.2' | |
match-pattern: '*openSUSE*Leap*15.2*' | |
default-absent-tool: 'which' | |
distribution5: | |
wsl-id: 'Ubuntu-24.04' | |
user-id: 'Ubuntu-24.04' | |
match-pattern: '*Ubuntu*24.04*' | |
default-absent-tool: 'dos2unix' | |
distribution6: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-20.04' | |
match-pattern: '*Ubuntu*20.04*' | |
default-absent-tool: 'dos2unix' | |
distribution7: | |
wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
distribution8: | |
wsl-id: 'Ubuntu-16.04' | |
user-id: 'Ubuntu-16.04' | |
match-pattern: '*Ubuntu*16.04*' | |
default-absent-tool: 'dos2unix' | |
- incompatibleUbuntu: 'Ubuntu-20.04' | |
distribution1: | |
wsl-id: 'Debian' | |
user-id: 'Debian' | |
match-pattern: '*Debian*' | |
default-absent-tool: 'dos2unix' | |
distribution2: | |
wsl-id: 'Alpine' | |
user-id: 'Alpine' | |
match-pattern: '*Alpine*' | |
default-absent-tool: 'dos2unix' | |
distribution3: | |
wsl-id: 'kali-linux' | |
user-id: 'kali-linux' | |
match-pattern: '*Kali*' | |
default-absent-tool: 'dos2unix' | |
distribution4: | |
wsl-id: 'openSUSE-Leap-15.2' | |
user-id: 'openSUSE-Leap-15.2' | |
match-pattern: '*openSUSE*Leap*15.2*' | |
default-absent-tool: 'which' | |
distribution5: | |
wsl-id: 'Ubuntu-24.04' | |
user-id: 'Ubuntu-24.04' | |
match-pattern: '*Ubuntu*24.04*' | |
default-absent-tool: 'dos2unix' | |
distribution6: | |
wsl-id: 'Ubuntu' | |
user-id: 'Ubuntu-22.04' | |
match-pattern: '*Ubuntu*22.04*' | |
default-absent-tool: 'dos2unix' | |
distribution7: | |
wsl-id: 'Ubuntu-18.04' | |
user-id: 'Ubuntu-18.04' | |
match-pattern: '*Ubuntu*18.04*' | |
default-absent-tool: 'dos2unix' | |
distribution8: | |
wsl-id: 'Ubuntu-16.04' | |
user-id: 'Ubuntu-16.04' | |
match-pattern: '*Ubuntu*16.04*' | |
default-absent-tool: 'dos2unix' | |
steps: | |
- id: 'step-0' | |
name: 'Restore built artifacts from cache' | |
uses: 'actions/cache/restore@v4' | |
with: | |
path: |- | |
action.yml | |
build/distributions/ | |
key: '${{ github.run_id }}' | |
fail-on-cache-miss: 'true' | |
- id: 'step-1' | |
name: 'Execute action for ${{ matrix.distributions.distribution1.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution1.user-id }}' | |
- id: 'step-2' | |
name: 'Execute action for ${{ matrix.distributions.distribution2.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution2.user-id }}' | |
additional-packages: 'bash' | |
- id: 'step-3' | |
name: 'Execute action for ${{ matrix.distributions.distribution3.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution3.user-id }}' | |
set-as-default: 'false' | |
- id: 'step-4' | |
name: 'Execute action for ${{ matrix.distributions.distribution4.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution4.user-id }}' | |
set-as-default: 'false' | |
- id: 'step-5' | |
name: 'Execute action for ${{ matrix.distributions.distribution5.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution5.user-id }}' | |
set-as-default: 'false' | |
- id: 'step-6' | |
name: 'Execute action for ${{ matrix.distributions.distribution6.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution6.user-id }}' | |
set-as-default: 'false' | |
- id: 'step-7' | |
name: 'Execute action for ${{ matrix.distributions.distribution7.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution7.user-id }}' | |
set-as-default: 'false' | |
- id: 'step-8' | |
name: 'Execute action for ${{ matrix.distributions.distribution8.user-id }}' | |
uses: './' | |
with: | |
distribution: '${{ matrix.distributions.distribution8.user-id }}' | |
set-as-default: 'false' | |
- id: 'step-9' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution1.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_Debian {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution1.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-1.outcome == 'success') | |
- id: 'step-10' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution2.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_Alpine {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution2.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-2.outcome == 'success') | |
- id: 'step-11' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution3.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_kali-linux {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution3.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-3.outcome == 'success') | |
- id: 'step-12' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution4.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_openSUSE-Leap-15.2 {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution4.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-4.outcome == 'success') | |
- id: 'step-13' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution5.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_Ubuntu-24.04 {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution5.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-5.outcome == 'success') | |
- id: 'step-14' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution6.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_Ubuntu-22.04 {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution6.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-6.outcome == 'success') | |
&& (matrix.distributions.distribution6.user-id != 'Ubuntu-20.04') | |
- id: 'step-15' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution6.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_Ubuntu-20.04 {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution6.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-6.outcome == 'success') | |
&& (matrix.distributions.distribution6.user-id != 'Ubuntu-22.04') | |
- id: 'step-16' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution7.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_Ubuntu-18.04 {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution7.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-7.outcome == 'success') | |
- id: 'step-17' | |
name: 'Test - wsl-bash_${{ matrix.distributions.distribution8.user-id }} should use the correct distribution' | |
shell: 'wsl-bash_Ubuntu-16.04 {0}' | |
run: |- | |
cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true) | |
[[ "$(cat <(lsb_release -a || true) <(uname -a || true) <([ -d /etc ] && find /etc -maxdepth 1 -type f \( -name '*release' -or -name 'issue*' \) -exec cat {} + || true) <([ -d /etc/products.d ] && find /etc/products.d -maxdepth 1 -type f -name '*.prod' -exec cat {} + || true) <([ -f /proc/version ] && cat /proc/version || true))" == ${{ matrix.distributions.distribution8.match-pattern }} ]] | |
if: |- | |
always() | |
&& (steps.step-8.outcome == 'success') |