Skip to content
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
15 changes: 15 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

[*.{yml,yaml}]
indent_size = 2

[*.md]
trim_trailing_whitespace = false
41 changes: 41 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Bug report
description: Report something that isn't working
labels: ["bug"]
body:
- type: textarea
id: what-happened
attributes:
label: What happened?
description: What did you expect, and what happened instead?
validations:
required: true
- type: input
id: command
attributes:
label: Command you ran
placeholder: java -jar fox.jar --callsign W1ABC --wpm 20
validations:
required: true
- type: input
id: java-version
attributes:
label: Java version
description: Output of `java -version`
placeholder: openjdk 26
validations:
required: true
- type: input
id: os
attributes:
label: Operating system
placeholder: macOS 15 / Ubuntu 24.04 / Windows 11
validations:
required: true
- type: textarea
id: logs
attributes:
label: Log output
description: Paste any relevant console output.
render: shell
validations:
required: false
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blank_issues_enabled: false
24 changes: 24 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Feature request
description: Suggest an idea or improvement
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: What problem would this solve?
description: Describe the use case or the limitation you're hitting.
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
description: How might it work? A sketch of the CLI flags or behavior helps.
validations:
required: false
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
validations:
required: false
18 changes: 18 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## What does this PR do?

<!-- A short description of the change and why it's needed. -->

## Related issue

<!-- e.g. Closes #12 -->

## How was it tested?

<!-- The command(s) you ran and what you observed. -->

## Checklist

- [ ] CI passes (compiles, packages, smoke-tests the jar)
- [ ] No new external dependencies
- [ ] README / `--help` updated if behavior or options changed
- [ ] CHANGELOG.md updated under "Unreleased"
35 changes: 35 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: build

on:
push:
branches: ["**"]
tags: ["v*"]
pull_request:

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "26"
- name: Compile
run: javac -d out/classes src/fox/*.java
- name: Package jar
run: jar --create --file fox.jar --main-class fox.Fox -C out/classes .
- name: Smoke test
run: java -jar fox.jar --help
- uses: actions/upload-artifact@v4
with:
name: fox-jar
path: fox.jar
- name: Attach jar to release
if: startsWith(github.ref, 'refs/tags/v')
env:
GH_TOKEN: ${{ github.token }}
run: gh release create "$GITHUB_REF_NAME" fox.jar --generate-notes
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Build output
out/
*.class

# macOS
.DS_Store

# IntelliJ
.idea/workspace.xml
.idea/shelf/
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

100 changes: 0 additions & 100 deletions .idea/workspace.xml

This file was deleted.

36 changes: 36 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Changelog

All notable changes to this project are documented here. The format is based
on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [2.0.0] - 2026-06-11

### Added
- Synthesize the morse ID from `--callsign` in memory (configurable `--wpm`
and `--tone`); no audio recordings required.
- `--morse-file` to play a recorded WAV as the ID instead.
- `--gap` and `--random-gap` for fixed or randomized quiet periods.
- `--start`/`--stop` times for timed hunts.
- `--cycles` to limit the number of transmit cycles (`0` = run until stopped).
- Timestamped logging of every transmission.
- GitHub Actions workflow that builds, smoke-tests, and releases `fox.jar`.
- Contributor scaffolding: CONTRIBUTING, code of conduct, issue/PR templates.

### Changed
- Requires Java 26.
- Default behavior is now run-until-stopped instead of a fixed 4000 cycles.

### Fixed
- Filename case mismatch that broke playback on case-sensitive filesystems.
- Native audio line leak from opening a new clip per playback.
- Inaccurate playback timing; playback now waits for the real end-of-clip event.
- Errors are reported instead of silently swallowed.

### Removed
- Bundled `morse.wav` and `shh.wav`; the ID is synthesized and gaps are timed.

[Unreleased]: https://github.com/rbibby53/HAMRadioFoxHuntControllerJava/compare/v2.0.0...HEAD
[2.0.0]: https://github.com/rbibby53/HAMRadioFoxHuntControllerJava/releases/tag/v2.0.0
40 changes: 40 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Code of Conduct

## Our pledge

We as members, contributors, and maintainers pledge to make participation in
this project a harassment-free experience for everyone, regardless of age,
body size, visible or invisible disability, ethnicity, sex characteristics,
gender identity and expression, level of experience, education, socio-economic
status, nationality, personal appearance, race, religion, or sexual identity
and orientation.

## Our standards

Examples of behavior that contributes to a positive environment:

- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes
- Focusing on what is best for the community

Examples of unacceptable behavior:

- The use of sexualized language or imagery, and sexual attention or advances
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information without their explicit permission

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the project maintainer through a GitHub issue or direct contact.
All complaints will be reviewed and investigated promptly and fairly.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

[homepage]: https://www.contributor-covenant.org
45 changes: 45 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Contributing

Thanks for your interest in improving the Fox Hunt Controller! Bug reports,
feature ideas, and pull requests are all welcome.

## Reporting bugs and requesting features

Open an issue using the matching template. For bugs, include your OS, Java
version (`java -version`), the exact command you ran, and what happened.

## Development setup

You need Java 26 or newer — nothing else.

```sh
git clone https://github.com/rbibby53/HAMRadioFoxHuntControllerJava.git
cd HAMRadioFoxHuntControllerJava
javac -d out/classes src/fox/*.java
jar --create --file fox.jar --main-class fox.Fox -C out/classes .
```

## Testing your changes

There's no test suite (yet — contributions welcome!), so test by running:

```sh
java -jar fox.jar --help
java -jar fox.jar --callsign N0CALL --wpm 25 --repeats 1 --gap 1 --cycles 2
```

You should hear the callsign in morse twice, with a quiet gap between, and
see a timestamped log line for each transmission. Please also exercise any
option your change touches.

## Pull requests

- Branch from `master` and keep PRs focused on one change.
- CI must pass — it compiles, packages, and smoke-tests the jar.
- Match the existing code style: plain Java, 4-space indent, no external
dependencies. Part of this project's appeal is that it's a single small
jar with zero dependencies; please keep it that way.

## Questions

Open an issue — happy to discuss ideas before you write code.
Loading
Loading