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

Add shellcheck to pre-commit and fix warnings #1788

Open
wants to merge 2 commits into
base: branch-25.02
Choose a base branch
from

Conversation

gforsyth
Copy link

@gforsyth gforsyth commented Jan 21, 2025

Description

shellcheck is a fast, static analysis tool for shell scripts. It's good at
flagging up unused variables, unintentional glob expansions, and other potential
execution and security headaches that arise from the wonders of bash (and other shlangs).

This PR adds a pre-commit hook to run shellcheck on all of the sh-lang files in the ci/ directory, and the changes requested by shellcheck to make the existing files pass the check.

xref: rapidsai/build-planning#135

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.

@gforsyth gforsyth requested a review from a team as a code owner January 21, 2025 20:07
@gforsyth gforsyth requested a review from msarahan January 21, 2025 20:07
@github-actions github-actions bot added the ci label Jan 21, 2025
@gforsyth gforsyth added non-breaking Non-breaking change improvement Improvement / enhancement to an existing function and removed ci labels Jan 21, 2025
Comment on lines -16 to -19
CURRENT_MAJOR=$(echo $CURRENT_TAG | awk '{split($0, a, "."); print a[1]}')
CURRENT_MINOR=$(echo $CURRENT_TAG | awk '{split($0, a, "."); print a[2]}')
CURRENT_PATCH=$(echo $CURRENT_TAG | awk '{split($0, a, "."); print a[3]}')
CURRENT_SHORT_TAG=${CURRENT_MAJOR}.${CURRENT_MINOR}
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These variables are used in a few rapids projects (cudf, cuml, cuvs) but not others. Happy to keep them and just ignore the shellcheck warnings if we'd like to have these available across projects.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a lot of discrepancies in the update-version.sh scripts across repos. We will want to keep an eye out for any best practices that we can unify across repos.

In the meantime, I am okay with removing unused variables.

ci/build_cpp.sh Outdated Show resolved Hide resolved
Comment on lines +12 to +13
RAPIDS_VERSION_MAJOR_MINOR="$(rapids-version-major-minor)"
export RAPIDS_VERSION_MAJOR_MINOR
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not like this style because it requires two lines where only one was used before. export VAR="value" seems like a very common and well-understood pattern in shell scripts. Is there a justification for why this is better practice?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doing it as a single line masks the return value of the captured command. so if the captured command fails, even with set -e, the script won't fail because the export still succeeds.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TIL! I need to read the shellcheck docs, probably.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bash is a gnarly language. footguns all the way down

Comment on lines -16 to -19
CURRENT_MAJOR=$(echo $CURRENT_TAG | awk '{split($0, a, "."); print a[1]}')
CURRENT_MINOR=$(echo $CURRENT_TAG | awk '{split($0, a, "."); print a[2]}')
CURRENT_PATCH=$(echo $CURRENT_TAG | awk '{split($0, a, "."); print a[3]}')
CURRENT_SHORT_TAG=${CURRENT_MAJOR}.${CURRENT_MINOR}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a lot of discrepancies in the update-version.sh scripts across repos. We will want to keep an eye out for any best practices that we can unify across repos.

In the meantime, I am okay with removing unused variables.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci improvement Improvement / enhancement to an existing function non-breaking Non-breaking change
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

2 participants