From ca918769ec37df75483e9b1ce7e401dbe5e671f0 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 23 Jan 2025 03:10:43 +0100 Subject: [PATCH] [ci] feat: add GitHub actions workflows for building/testing/docs (#2) * disable windows runner for now (chocolatey jack package is broken) * install jack and pcre from homebrew for macOS workflow * install libjack-jackd2-dev libpcre3-dev for linux workflow * add additional libjack location candidate for macOS / homebrew * make library name patterns const strings Signed-off-by: Christopher Arndt --- .github/workflows/build.yml | 58 +++++++++++++++++++++++++++++++++++++ .github/workflows/docs.yml | 26 +++++++++++++++++ src/jacket.nim | 19 ++++++------ 3 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..411e53d --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,58 @@ +name: Run tests and build examples +on: [push, pull_request] +env: + nim_version: "2.2.0" +jobs: + build: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + #os: [ubuntu-latest, macos-latest, windows-latest] + + runs-on: ${{ matrix.os }} + + steps: + - name: Check out sources + uses: actions/checkout@v4 + - name: Nim Runtime Cache + id: cache-nim + uses: actions/cache@v4 + with: + path: ".nim_runtime" + key: ${{ runner.os }}-nim-${{ env.nim_version }} + - name: Install Nim + id: install-nim + if: ${{ hashFiles('.nim_runtime/bin/nim*') == '' }} + uses: jiro4989/setup-nim-action@v2 + with: + nim-version: ${{ env.nim_version }} + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Set PATH for Unix + if: ${{ runner.os != 'Windows' && steps.install-nim.outcome == 'skipped' }} + shell: bash + run: | + echo "$(pwd)/.nim_runtime/bin" >> "$GITHUB_PATH" + echo "$HOME/.nimble/bin" >> "$GITHUB_PATH" + - name: Set PATH for Windows + if: ${{ runner.os == 'Windows' && steps.install-nim.outcome == 'skipped' }} + shell: pwsh + run: | + echo "$(Get-Location)\.nim_runtime\bin" >> $Env:GITHUB_PATH + mkdir -Force ~\.nimble\bin + (Resolve-Path ~\.nimble\bin).Path >> $Env:GITHUB_PATH + - name: Install dependency packages (jack) + uses: ConorMacBride/install-package@v1 + with: + brew: jack pcre + apt: libjack-jackd2-dev libpcre3-dev + choco: jack + - name: Update PATH (Windows) + if: runner.os == 'Windows' + run: Add-Content $env:GITHUB_PATH "C:\Program Files\jack\bin" + - name: Run tests + run: nimble test -y + - name: Build examples (debug) + run: nimble examples_debug + - name: Build examples (release) + run: nimble examples diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..47ea7ea --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,26 @@ +name: Build and publish API docs +on: + push: + branches: + - master +env: + nim-version: "stable" + nim-src: src/jacket.nim + deploy-dir: .gh-pages +jobs: + docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: jiro4989/setup-nim-action@v2 + with: + nim-version: ${{ env.nim-version }} + - run: nimble install -y + - run: nimble doc --index:on --project --git.url:https://github.com/${{ github.repository }} --git.commit:master --out:${{ env.deploy-dir }} ${{ env.nim-src }} + - name: "Copy to index.html" + run: cp ${{ env.deploy-dir }}/jacket.html ${{ env.deploy-dir }}/index.html + - name: Deploy documents + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ${{ env.deploy-dir }} diff --git a/src/jacket.nim b/src/jacket.nim index 86e8302..3753f8d 100644 --- a/src/jacket.nim +++ b/src/jacket.nim @@ -2,18 +2,17 @@ # Possible names/install locations of libjack, according to: # https://github.com/x42/weakjack/blob/master/weak_libjack.c#L108 -proc getJackLibName: string = - when system.hostOS == "windows": - when sizeof(int) == 4: - result = "libjack.dll" - else: - result = "libjack64.dll" - elif system.hostOS == "macosx": - result = "(|/usr/local/lib/|/opt/homebrew/lib/|/opt/local/lib/)libjack.dylib" +when defined(windows): + when sizeof(int) == 4: + const soname = "(|lib)jack.dll" else: - result = "libjack.so.0" + const soname = "(|lib)jack64.dll" +elif defined(macosx): + const soname = "(|/usr/local/lib/|/opt/homebrew/lib/|/opt/homebrew/opt/jack/lib/|/opt/local/lib/)libjack.dylib" +else: + const soname = "libjack.so.0" -{.push dynlib: getJackLibName().} +{.push dynlib: soname.} # ------------------------------ Constants --------------------------------