Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create pipeline to lint and test #32

Merged
merged 2 commits into from
Dec 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# wcurl - a simple wrapper around curl to easily download files.
#
# This is wcurl's test pipeline.
#
# Copyright (C) Samuel Henrique <[email protected]>, Sergio Durigan
# Junior <[email protected]> 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
arthurbdiniz marked this conversation as resolved.
Show resolved Hide resolved
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
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 &lt;[[email protected]](mailto:[email protected])&gt;
Expand Down
21 changes: 13 additions & 8 deletions tests/tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 "
Expand Down Expand Up @@ -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'
}

Expand All @@ -82,24 +84,26 @@ 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'
}

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=<option>" "${ret}" '--foo'
assertContains "Verify 'wcurl' correctly passes through --curl-options <option>" "${ret}" '--bar'
}

testNextAmount()
{
urls='example.com/1 example.com/2 example.com3'
ret=$(${WCURL_CMD} ${urls})
url_1='example.com/1'
url_2='example.com/2'
url_3='example.com3'
ret=$(${WCURL_CMD} ${url_1} ${url_2} ${url_3})
next_count=$(printf '%s' "${ret}" | grep -c -- --next)
assertEquals "Verify whether 'wcurl' includes '--next' for every url besides the first" "${next_count}" "2"
}
Expand Down Expand Up @@ -168,7 +172,7 @@ testUrlDecodingDisabled()
testUrlDecodingWhitespacesQueryString()
{
url='example.com/filename%20with%20spaces?query=string'
ret=$(${WCURL_CMD} ${url} 2>&1)
ret=$(${WCURL_CMD} "${url}" 2>&1)
assertContains "Verify whether 'wcurl' successfully decodes percent-encoded whitespaces in URLs with query strings" "${ret}" 'filename with spaces'
}

Expand Down Expand Up @@ -217,4 +221,5 @@ testUrlDecodingNonLatinLanguages()
## - Options are the same for all URLs (except --next)
## - URLs beginning with '-' (with and without using '--')

# shellcheck disable=SC1091
. shunit2
Loading