diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..e0eb6ef --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,108 @@ +# wcurl - a simple wrapper around curl to easily download files. +# +# This is wcurl's test pipeline. +# +# Copyright (C) Samuel Henrique , Sergio Durigan +# Junior and many contributors, see the AUTHORS +# file. +# +# Permission to use, copy, modify, and distribute this software for any purpose +# with or without fee is hereby granted, provided that the above copyright +# notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +# NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +# OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall not be +# used in advertising or otherwise to promote the sale, use or other dealings in +# this Software without prior written authorization of the copyright holder. +# +# SPDX-License-Identifier: curl +--- +name: Test + +on: + push: + branches: + - main + pull_request: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install tools + run: | + sudo apt-get update + sudo apt-get install -y shellcheck devscripts + + - name: Run shellcheck + run: shellcheck wcurl tests/* + + - name: Run checkbashisms + run: checkbashisms wcurl tests/* + + debian: + name: debian + runs-on: ubuntu-latest + container: + image: debian:stable + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install curl and shunit2 + run: | + apt-get update + apt-get install -y curl shunit2 + + - name: Run shunit2 tests + run: ./tests/tests.sh + + fedora: + name: fedora + runs-on: ubuntu-latest + container: + image: fedora:latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install git and shunit2 + run: | + dnf install -y git + git clone \ + --depth 1 --branch v2.1.8 \ + https://github.com/kward/shunit2.git + cd shunit2 + cp shunit2 /usr/local/bin/shunit2 + + - name: Run shunit2 tests + run: ./tests/tests.sh + + macos: + name: macos + runs-on: macos-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install shunit2 + run: brew install shunit2 + + - name: Run shunit2 tests + run: ./tests/tests.sh diff --git a/README.md b/README.md index a6391ad..114f357 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,21 @@ script: ./tests/tests.sh ``` +# Lint + +To lint the shell scripts, you need to install `shellcheck` and `checkbashisms`. Those tools will check the scripts for issues and ensure they follow best practices. + +- On Debian-like systems: `apt install shellcheck devscripts` +- On Fedora-like systems: `dnf install shellcheck devscripts` + +After installation, you can run `shellcheck` and `checkbashisms` by executing the following commands: + +```sh +shellcheck wcurl ./tests/* + +checkbashisms wcurl ./tests/* +``` + # Authors Samuel Henrique <[samueloph@debian.org](mailto:samueloph@debian.org)> diff --git a/tests/tests.sh b/tests/tests.sh index 0cf0356..ffc3082 100755 --- a/tests/tests.sh +++ b/tests/tests.sh @@ -26,7 +26,8 @@ # # SPDX-License-Identifier: curl -readonly ROOTDIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +ROOTDIR=$(CDPATH=$(cd -- "$(dirname -- "$0")/.." && pwd)) +readonly ROOTDIR export PATH="${ROOTDIR}:${PATH}" readonly WCURL_CMD="wcurl --dry-run " @@ -67,8 +68,9 @@ testParallelIfMoreThanOneUrl() { # TODO: This test is wrong for curl 7.65 or older, since --parallel was only introduced in 7.66. # We should check curl's version and skip this test instead. - urls='example.com/1 example.com/2' - ret=$(${WCURL_CMD} ${urls}) + url_1='example.com/1' + url_2='example.com/2' + ret=$(${WCURL_CMD} ${url_1} ${url_2}) assertContains "Verify whether 'wcurl' uses '--parallel' if more than one url is provided" "${ret}" '--parallel' } @@ -82,7 +84,7 @@ testEncodingWhitespace() testDoubleDash() { params='example.com --curl-options=abc' - ret=$(${WCURL_CMD} -- ${params}) + ret=$(${WCURL_CMD} -- "${params}") assertTrue "Verify whether 'wcurl' accepts '--' without erroring" "$?" assertContains "Verify whether 'wcurl' considers everywhing after '--' a url" "${ret}" '--curl-options=abc' } @@ -90,7 +92,7 @@ testDoubleDash() testCurlOptions() { params='example.com --curl-options=--foo --curl-options --bar' - ret=$(${WCURL_CMD} ${params}) + ret=$(${WCURL_CMD} "${params}") assertTrue "Verify 'wcurl' accepts '--curl-options' with and without trailing '='" "$?" assertContains "Verify 'wcurl' correctly passes through --curl-options=