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
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- name: Check the README changelogs
run: python3 .github/scripts/check_changelog.py
2 changes: 1 addition & 1 deletion .github/workflows/shared-code.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- name: Compare the shared blocks of the sprayer and the seed drill programs
run: python3 .github/scripts/check_shared_blocks.py
10 changes: 5 additions & 5 deletions .github/workflows/simulator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ jobs:
group: simulator-build-${{ github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- name: Build the simulator
run: python3 Firmware/simulator/build.py _site

- uses: actions/setup-node@v4
- uses: actions/setup-node@v7
with:
node-version: 22

Expand All @@ -71,7 +71,7 @@ jobs:

- name: Keep the screenshots
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: simulator-screenshots
path: shots
Expand All @@ -94,7 +94,7 @@ jobs:

- name: Pack the site for Pages
if: github.event_name != 'pull_request'
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v5
with:
path: _site

Expand All @@ -115,5 +115,5 @@ jobs:
steps:
- name: Publish on GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v5
# fails with "Get Pages site failed" until Pages is switched on: Settings → Pages → Source "GitHub Actions"
6 changes: 3 additions & 3 deletions .github/workflows/teensy-firmware.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
run:
shell: bash # -eo pipefail: a failed compile is not hidden by tee
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- name: Find the newest firmware folder
id: fw
Expand All @@ -58,7 +58,7 @@ jobs:
echo "sha=${sha::7}" >> "$GITHUB_OUTPUT"
echo "Firmware folder: $dir"

- uses: arduino/setup-arduino-cli@v2
- uses: arduino/setup-arduino-cli@v2 # built for Node 20 (no Node 24 release yet); the runner runs it on Node 24 and says so in a warning, which is harmless

- name: Install Teensyduino ${{ env.TEENSYDUINO }}
run: |
Expand Down Expand Up @@ -118,7 +118,7 @@ jobs:
echo '```'
} >> "$GITHUB_STEP_SUMMARY"

- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v7
with:
name: ${{ steps.fw.outputs.name }}-${{ steps.fw.outputs.sha }}
path: ${{ steps.fw.outputs.name }}.hex
Expand Down
4 changes: 2 additions & 2 deletions Firmware/simulator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ One row per day, in short; the details are in the sections of this file (the lin

| Date | What changed |
|---|---|
| 9 Nov 2026 | **Set up AgOpenWeb from your measures** 1.3: the turn clears the front corner, the drawbar meets the tyre, turns by headland, reasons ([the page](#set-up-agopenweb-from-your-measures)). Seed drill page: 19 sections before the program talks. Shorter start page and strip notes. |
| 9 Nov 2026 | **Set up AgOpenWeb from your measures** 1.3: the turn clears the front corner, the drawbar meets the tyre, turns by headland, reasons ([the page](#set-up-agopenweb-from-your-measures)). Seed drill page: 19 sections offline. Shorter start page and strip notes. [Action](#how-it-is-built) on Node 24. |
| 8 Nov 2026 | **Set up AgOpenWeb from your measures**: a calculator that turns the tractor and implement measures into the U-turn, headland and tramline settings, with the reasons, a drawing, examples and drawbars kept off the rear tyres ([the page](#set-up-agopenweb-from-your-measures)). |
| 7 Nov 2026 | The seed drill page's four tabs and Firmware tab checked, with a made-up newer `.bin` "on GitHub"; `firmware.json` lists the seed drill `.bin` once it is on `main`; the modules' names on the network ([How it is built](#how-it-is-built)). |
| 4 Nov 2026 | The Teensy's clock and temperature, the receivers' and the TM171's temperatures and the XIAO's in the pretend modules' answers. |
Expand All @@ -42,7 +42,7 @@ One row per day, in short; the details are in the sections of this file (the lin

## How it is built

`build.py` cuts the pages out of the newest `Firmware/vX.Y_AiO_WEB` folder, `Seeder/Seeder_ESP32` and `Sprayer/Sprayer_ESP32` exactly as the firmware serves them and puts the simulator scripts in their `<head>` (a module page also gets its implement, `window.SIM_IMPL`). The scripts answer the page's `/api/...` requests (and the firmware upload) instead of the module, so the page's own JavaScript is not changed: what you see is the page as it is in the firmware. The GitHub Action `.github/workflows/simulator.yml` runs on every change under `Firmware/`, `Seeder/Seeder_ESP32/` or `Sprayer/Sprayer_ESP32/`, opens every tab in a browser as a check (`smoke-test.js`), and publishes the result on GitHub Pages when the change reaches `main`. A pull request only builds and checks: the simulator shows the merged firmware.
`build.py` cuts the pages out of the newest `Firmware/vX.Y_AiO_WEB` folder, `Seeder/Seeder_ESP32` and `Sprayer/Sprayer_ESP32` exactly as the firmware serves them and puts the simulator scripts in their `<head>` (a module page also gets its implement, `window.SIM_IMPL`). The scripts answer the page's `/api/...` requests (and the firmware upload) instead of the module, so the page's own JavaScript is not changed: what you see is the page as it is in the firmware. The GitHub Action `.github/workflows/simulator.yml` runs on every change under `Firmware/`, `Seeder/Seeder_ESP32/` or `Sprayer/Sprayer_ESP32/`, opens every tab in a browser as a check (`smoke-test.js`), and publishes the result on GitHub Pages when the change reaches `main`. A pull request only builds and checks: the simulator shows the merged firmware. Since 9 Nov 2026 it uses the versions of GitHub's own actions that run on Node 24 (`checkout@v7`, `setup-node@v7`, `upload-artifact@v7`, `upload-pages-artifact@v5`, `deploy-pages@v5`): the runners now run every action on Node 24 and warn about one built for Node 20.

`build.py` also writes `firmware.json` at the top of the site: the Teensy `.hex` and the two XIAO `.bin` files of the newest version folder, each with the date and time it was compiled, read from the file itself (the `__DATE__ __TIME__` text every program carries). The Teensy page and the XIAO page fetch it from `https://renatorgr.github.io/Boards/firmware.json` for **Install from GitHub**, so a new build of the same version shows as new once its file is on `main` and the site is published again. The pretend Teensy and XIAO run those same builds. It also has the sprayer module's `Sprayer/Sprayer_ESP32/Sprayer_ESP32.ino.bin` (`"sprayer"`): its version, board and build date, read from the text its `/api/status` answer starts with, for the sprayer page's **Firmware** tab; the pretend sprayer module runs that build. The same for the seed drill module's `Seeder/Seeder_ESP32/Seeder_ESP32.ino.bin` (`"seeder"`), once that file is on `main`.

Expand Down
Loading