on: [push] env: ASSERT_SHELL: 'set -x ; readlink /proc/$$/exe ; readlink /proc/$$/exe | grep ' jobs: default: # docker:docker://code.forgejo.org/oci/node:22-bookworm runs-on: docker steps: - name: default is bash run: | ${{ env.ASSERT_SHELL }} /bash sh-fallback: needs: [default] # alpine:docker://code.forgejo.org/oci/alpine:latest runs-on: alpine steps: - name: default is bash but with a fallback to sh in case it does not exist run: | ${{ env.ASSERT_SHELL }} /busybox sh-fallback-with-container: needs: [sh-fallback] runs-on: docker container: image: data.forgejo.org/oci/alpine:latest steps: - name: default is bash but with a fallback to sh in case it does not exist run: | ${{ env.ASSERT_SHELL }} /busybox defaults-run: needs: [sh-fallback-with-container] # alpine:docker://code.forgejo.org/oci/alpine:latest runs-on: alpine defaults: run: shell: sh steps: - name: default is sh which is an alias for busybox in alpine run: | ${{ env.ASSERT_SHELL }} /busybox python: needs: [alpine] runs-on: docker container: image: data.forgejo.org/oci/python:slim steps: - name: python => python {0} shell: python run: | print("something") other: needs: [python] runs-on: docker container: image: data.forgejo.org/oci/node:22-bookworm steps: - name: default is bash run: | ${{ env.ASSERT_SHELL }} /bash - name: bash => bash --noprofile --norc -e -o pipefail {0} shell: bash run: | ${{ env.ASSERT_SHELL }} /bash shopt -o shopt -o | grep --quiet 'pipefail.*on' - name: sh => sh -e {0} shell: sh run: | ${{ env.ASSERT_SHELL }} /dash - name: node => node {0} shell: node run: | console.log("something") - name: dash -e {0} shell: dash -e {0} run: | ${{ env.ASSERT_SHELL }} /dash