Skip to content

Test install script #1193

Test install script

Test install script #1193

name: Test install script
on:
push:
paths:
- ".github/workflows/test-install-script.yml"
- "other/installation-script/install.sh"
pull_request:
paths:
- ".github/workflows/test-install-script.yml"
- "other/installation-script/install.sh"
schedule:
# Run every day at 03:00 UTC to catch breakage caused by external events
- cron: "0 3 * * *"
# workflow_dispatch event allows the workflow to be triggered manually.
# See: https://docs.github.com/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch
workflow_dispatch:
env:
SCRIPT_NAME: install.sh
SCRIPT_ARTIFACT_NAME: script
TOOL_NAME: arduino-lint # The executable's file name
jobs:
configure:
runs-on: ubuntu-latest
permissions: {}
env:
# Placeholder value of the PROJECT_OWNER variable in the template script
PROJECT_OWNER_PLACEHOLDER: arduino
# Replacement value used for the tests
PROJECT_OWNER: arduino
# Placeholder value of the PROJECT_NAME variable in the template script
PROJECT_NAME_PLACEHOLDER: TODO_PROJECT_NAME
# Replacement value used for the tests
PROJECT_NAME: arduino-lint
SCRIPT_FOLDER: other/installation-script
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Configure script for testing
run: |
sed \
--in-place \
's/PROJECT_OWNER="${{ env.PROJECT_OWNER_PLACEHOLDER }}"/PROJECT_OWNER="${{ env.PROJECT_OWNER }}"/' \
"${{ env.SCRIPT_FOLDER }}/${{ env.SCRIPT_NAME }}"
sed \
--in-place \
's/PROJECT_NAME="${{ env.PROJECT_NAME_PLACEHOLDER }}"/PROJECT_NAME="${{ env.PROJECT_NAME }}"/' \
"${{ env.SCRIPT_FOLDER }}/${{ env.SCRIPT_NAME }}"
- name: Save configured script as workflow artifact
uses: actions/upload-artifact@v3
with:
if-no-files-found: error
path: ${{ env.SCRIPT_FOLDER }}/${{ env.SCRIPT_NAME }}
name: ${{ env.SCRIPT_ARTIFACT_NAME }}
default:
needs: configure
permissions: {}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- name: Download script artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.SCRIPT_ARTIFACT_NAME }}
- name: Make script executable
run: chmod u+x "${{ github.workspace }}/${{ env.SCRIPT_NAME }}"
- name: Run script with defaults
shell: sh
run: |
"${{ github.workspace }}/${{ env.SCRIPT_NAME }}"
- name: Verify installation
shell: bash
run: |
"${PWD}/bin/${{ env.TOOL_NAME }}" --version
bindir:
needs: configure
permissions: {}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- name: Set install path environment variable
shell: bash
run: |
# See: https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable
echo "BINDIR=${{ runner.temp }}/custom-installation-folder" >> "$GITHUB_ENV"
- name: Download script artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.SCRIPT_ARTIFACT_NAME }}
- name: Make script executable
run: chmod u+x "${{ github.workspace }}/${{ env.SCRIPT_NAME }}"
- name: Run script with custom install location
shell: sh
run: |
mkdir -p "${{ env.BINDIR }}"
"${{ github.workspace }}/${{ env.SCRIPT_NAME }}"
- name: Verify installation
shell: bash
run: |
"${{ env.BINDIR }}/${{ env.TOOL_NAME }}" --version
version:
needs: configure
permissions: {}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
env:
VERSION: "1.0.0"
steps:
- name: Download script artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.SCRIPT_ARTIFACT_NAME }}
- name: Make script executable
run: chmod u+x "${{ github.workspace }}/${{ env.SCRIPT_NAME }}"
- name: Run script with version argument
shell: sh
run: |
"${{ github.workspace }}/${{ env.SCRIPT_NAME }}" "${{ env.VERSION }}"
- name: Verify installation
shell: bash
run: |
"${PWD}/bin/${{ env.TOOL_NAME }}" --version | grep --fixed-strings "${{ env.VERSION }}"
nightly:
needs: configure
permissions: {}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- name: Download script artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.SCRIPT_ARTIFACT_NAME }}
- name: Make script executable
run: chmod u+x "${{ github.workspace }}/${{ env.SCRIPT_NAME }}"
- name: Run script with nightly build version argument
shell: sh
run: |
"${{ github.workspace }}/${{ env.SCRIPT_NAME }}" "nightly-latest"
- name: Verify installation
shell: bash
run: |
"${PWD}/bin/${{ env.TOOL_NAME }}" --version | grep "^nightly-"
path-suggestions:
needs: configure
permissions: {}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- name: Set install path environment variables
shell: bash
run: |
# See: https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable
FIRST_INSTALLATION_FOLDER="first-installation-folder"
echo "FIRST_INSTALLATION_FOLDER=${FIRST_INSTALLATION_FOLDER}" >> "$GITHUB_ENV"
echo "FIRST_BINDIR=${{ runner.temp }}/${FIRST_INSTALLATION_FOLDER}" >> "$GITHUB_ENV"
SECOND_INSTALLATION_FOLDER="second-installation-folder"
echo "SECOND_INSTALLATION_FOLDER=${SECOND_INSTALLATION_FOLDER}" >> "$GITHUB_ENV"
echo "SECOND_BINDIR=${{ runner.temp }}/${SECOND_INSTALLATION_FOLDER}" >> "$GITHUB_ENV"
- name: Download script artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.SCRIPT_ARTIFACT_NAME }}
- name: Make script executable
run: chmod u+x "${{ github.workspace }}/${{ env.SCRIPT_NAME }}"
- name: Check script output without previous installation in PATH
shell: sh
env:
BINDIR: ${{ env.FIRST_BINDIR }}
run: |
mkdir -p "${{ env.BINDIR }}"
"${{ github.workspace }}/${{ env.SCRIPT_NAME }}" | \
grep \
-F \
'${{ env.TOOL_NAME }} not found. You might want to add "${{ env.FIRST_BINDIR }}" to your $PATH'
- name: Add first installation to PATH
shell: bash
run: |
# See: https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-system-path
echo "${{ env.FIRST_BINDIR }}" >> "$GITHUB_PATH"
- name: Check script output with previous installation in PATH (non-Windows)
if: runner.os != 'Windows'
shell: sh
env:
BINDIR: ${{ env.SECOND_BINDIR }}
run: |
mkdir -p "${{ env.BINDIR }}"
"${{ github.workspace }}/${{ env.SCRIPT_NAME }}" | \
grep \
-F \
'${{ env.TOOL_NAME }} was found at ${{ env.FIRST_BINDIR }}/${{ env.TOOL_NAME }}. Please prepend "${{ env.BINDIR }}" to your $PATH'
# ${{ runner.temp }} is a Windows style path on the windows runner, but the script output uses the equivalent
# POSIX style path.
# So a regex is used for the output check on Windows.
- name: Check script output with previous installation in PATH (Windows)
if: runner.os == 'Windows'
shell: sh
env:
BINDIR: ${{ env.SECOND_BINDIR }}
run: |
mkdir -p "${{ env.BINDIR }}"
"${{ github.workspace }}/${{ env.SCRIPT_NAME }}" | \
grep \
'${{ env.TOOL_NAME }} was found at .*/${{ env.FIRST_INSTALLATION_FOLDER }}/${{ env.TOOL_NAME }}\. Please prepend ".*/${{ env.SECOND_INSTALLATION_FOLDER }}" to your \$PATH'