Contributing
This is a FOSS project — anyone interested in using, developing, or contributing is welcome. The project follows a KISS (Keep It Simple and Stupid) philosophy.
Reporting Issues
- Open a ticket on the repository GitHub Issues page
- Clearly describe the problem, including steps to reproduce for bugs
- Note the earliest version you know has the issue
Pull Requests
- Fork the repository on GitHub
- Create a topic branch from
master:bashgit checkout -b fix/master/my_contribution master - Test your changes:
fobis build --mode tests-gnu && bash scripts/run_tests.sh(andbash scripts/docs_examples.shif you touched the documentation examples: commit the files it regenerates) - Check for unnecessary whitespace:
git diff --check - Submit a pull request with a clear commit message
Fortran Coding Style
- Clarity over brevity:
real :: gas_ideal_airis better thanreal :: gia - Single-character variable names only for loop counters
- Name all constants
implicit nonein every module and program- Declare
intentfor all procedure arguments, ordered: pass arg →inout→in→out→ optional - Indent as the surrounding code (the sources use 3 spaces), never tabs
- No trailing whitespace; blank lines must contain no spaces
- Use
>, <, ==instead of.gt., .lt., .eq. - Avoid Windows-style CRLF line endings
Recommended git whitespace settings
[color]
ui = true
[color "diff"]
whitespace = red reverse
[core]
whitespace = fix,-indent-with-non-tab,trailing-space,cr-at-eolCommit style
Use Conventional Commits so that CHANGELOG.md is generated automatically from the git log:
| Prefix | Purpose | Changelog section |
|---|---|---|
feat: | New feature or capability | Added |
fix: | Bug fix | Fixed |
perf: | Performance improvement | Performance |
refactor: | Code restructuring | Changed |
docs: | Documentation only | Documentation |
test:, build:, ci:, chore: | Tests, build system, CI, maintenance | not listed |
Append ! for breaking changes (feat!:, fix!:) and explain them in a BREAKING CHANGE: footer. Reference issues with #123: they are auto-linked.
feat(tree): select tags with a path expression
fix(values): report a field of asterisks as a value that does not fit
feat(parser)!: report malformed referencesCreating a release
Releases are made by scripts/release.sh and GitHub Actions. Install git-cliff once (cargo install git-cliff, or a binary from its releases), then:
scripts/release.sh --patch # v1.2.3 → v1.2.4
scripts/release.sh --minor # v1.2.3 → v1.3.0
scripts/release.sh --major # v1.2.3 → v2.0.0
scripts/release.sh v2.1.0 # explicit versionrelease.sh checks the branch, the remote, a clean tree and the tag, then:
- regenerates
CHANGELOG.mdfrom the git log with git-cliff; - updates
VERSIONand the version infpm.toml; - commits them as
chore(release): vX.Y.Zand creates an annotated tag; - pushes the commit and the tag.
Pushing the tag triggers the release workflow, which packages the tarball FoXy-vX.Y.Z.tar.gz and publishes a GitHub release with the changelog section as release notes. The tests and the documentation run on every push to master (the CI and Docs workflows), not on the tag. Update the Upgrading page before a release that changes behaviour.