From 4eb10fa510548891ac9c5afc5b43679096361fe3 Mon Sep 17 00:00:00 2001 From: vdbe <44153531+vdbe@users.noreply.github.com> Date: Fri, 15 Mar 2024 16:34:04 +0100 Subject: [PATCH] ci: add testing & shellcheck workflows (#159) --- .github/scripts/test.bash | 71 ++++++++++++++++++++++++++++++++ .github/workflows/shellcheck.yml | 33 +++++++++++++++ .github/workflows/test.yml | 53 ++++++++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100755 .github/scripts/test.bash create mode 100644 .github/workflows/shellcheck.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/scripts/test.bash b/.github/scripts/test.bash new file mode 100755 index 00000000..513800a7 --- /dev/null +++ b/.github/scripts/test.bash @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +# +# Usage: +# ./test.bash catpuccin-tmux/catpuccin-tmux.tmux +# ./test.bash catpuccin-tmux/catpuccin-tmux.tmux ./config-example1 +# + +SOCKET_NAME="${SOCKET_NAME:-test}" + +tmux() { + command tmux -L "$SOCKET_NAME" "$@" +} + +start_tmux_server() { + echo "Starting tmux server" >&2 + tmux new -s dummy -d +} + +kill_tmux_server() { + echo "Stopping tmux server" >&2 + tmux kill-server +} + +check() { + local out exit_code + exit_code="$1" + out="$2" + + if [ "$exit_code" -ne 0 ] || [ -n "$out" ]; then + echo "Failed with exit code $exit_code and output:" + echo "$out" + exit 1 + fi + +} + +main() { + local config_file plugin output exit_code + + plugin="$1" + config_file="$2" + + echo "Using socket '$SOCKET_NAME'" >&2 + + # Make sure its a new/clean server + kill_tmux_server 2>/dev/null + start_tmux_server + + if [ -z "$config_file" ]; then + echo "No config file provided" >&2 + else + echo "sourcing config file '$config_file'" >&2 + tmux source-file "$config_file" + fi + + if [ -z "$plugin" ]; then + echo "ERROR: No path to the plugin provided" >&2 + exit 1 + else + echo "Running plugin: $plugin" >&2 + output=$(tmux run-shell "$plugin" 2>&2) + exit_code="$?" + + check "$exit_code" "$output" + fi + + kill_tmux_server +} + +main "$@" diff --git a/.github/workflows/shellcheck.yml b/.github/workflows/shellcheck.yml new file mode 100644 index 00000000..127b0241 --- /dev/null +++ b/.github/workflows/shellcheck.yml @@ -0,0 +1,33 @@ +--- +name: Shellcheck +permissions: + contents: read +on: + pull_request: + paths-ignore: + - "*.md" + - "assets/**" + push: + paths-ignore: + - "*.md" + - "assets/**" + branches: + - main + workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + shellcheck: + name: Shellcheck + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run ShellCheck + uses: ludeeus/action-shellcheck@master + with: + severity: error + additional_files: "catppuccin.tmux" + env: + SHELLCHECK_OPTS: "-s bash" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..7b85e577 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,53 @@ +--- +name: Tests +permissions: + contents: read +on: + pull_request: + paths-ignore: + - "*.md" + - "assets/**" + push: + paths-ignore: + - "*.md" + - "assets/**" + branches: + - main + workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + ubuntu: + name: Test + runs-on: ubuntu-latest + + steps: + - name: Install tmux + run: sudo apt-get update && sudo apt-get install -y tmux=3.2a-4ubuntu0.2 + - uses: actions/checkout@v4 + - name: Config and Plugin + shell: bash + run: | + bash --version + tmux -V + ./.github/scripts/test.bash ./catppuccin.tmux + + old-bash: + name: "Old Bash" + runs-on: ubuntu-latest + container: + image: bash:3.2.57 # Bash version used by macos + steps: + - uses: actions/checkout@v4 + - name: Check Syntax is Valid + shell: bash + run: | + # No tmux available in this container + tmp="$(mktemp -d)" + touch "$tmp/tmux" + chmod +x "$tmp/tmux" + export PATH="$tmp:$PATH" + bash --version + ./.github/scripts/test.bash ./catppuccin.tmux