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
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @AndreNijman
19 changes: 19 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
## What changed

<!-- One or two sentences. -->

## OpMode(s) touched

<!-- Names of the OpModes added, changed or deleted. Write "none" if this PR does not touch an OpMode. -->

## Tested on the robot

<!-- Yes or no. If yes, say what you ran and what the robot actually did. If no, say why not. -->

## Control Hub configuration

<!-- Config names added or renamed, and the ports they are on. These must match the table in README.md. Write "none" if unchanged. -->

## Anything a driver needs to know

<!-- Changed controls, new init requirements, changed behaviour during a match. Write "none" if nothing. -->
52 changes: 52 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: build

on:
pull_request:
push:
branches:
- main

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v4

- name: Validate the Gradle wrapper
uses: gradle/actions/wrapper-validation@v4

# AGP 8.13.2 requires JDK 17.
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'

- name: Set up the Android SDK command-line tools
uses: android-actions/setup-android@v3

# build.common.gradle sets compileSdkVersion 30, which the runner image does
# not ship, so the platform has to be installed. Build-tools 35.0.0 is the
# revision AGP 8.13.2 resolves to by default; the image happens to carry it
# today, but it is pinned here so an image update cannot silently break the
# build. Both versions were read off the build log, not chosen.
#
# build.common.gradle also declares ndkVersion 21.3.6528147. Neither module
# has native sources, so AGP never resolves it and the NDK is not installed.
- name: Install Android SDK packages
run: sdkmanager --install "platforms;android-30" "build-tools;35.0.0"

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4

- name: Assemble the TeamCode debug APK
run: ./gradlew :TeamCode:assembleDebug --no-daemon --stacktrace
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,9 @@ captures/

# Keystore files
# Uncomment the following lines if you do not want to check your keystore files in.
#*.jks
#*.keystore
*.jks
*.keystore
!libs/ftc.debug.keystore

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
Expand Down
85 changes: 84 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,85 @@
# Lebob-BioBuzz
Current season · FIRST Tech Challenge BIOBUZZ 2026/27 robot code, team 29550. Competing at the Western Australia Qualifier.

Robot code for Lebob Robotics, team 29550, competing in FIRST Tech Challenge
BIOBUZZ 2026/27 at the Western Australia Qualifier.

This repository is an unmodified import of the FIRST Tech Challenge SDK with the
team's own code in `TeamCode`. Everything outside `TeamCode` belongs to the SDK
and is replaced wholesale when a new SDK version is merged, so team code must
not depend on edits made there.

## Requirements

- Android Studio, with the Android SDK it installs.
- JDK 17. The Android Gradle Plugin used by this SDK version will not run on an
older JDK, and Android Studio's bundled JDK is the simplest way to get it.
- FIRST Tech Challenge SDK v11.2.1. This is already in the repository; nothing
needs to be downloaded separately.

## Build and deploy

Build the team's APK from the repository root:

```
./gradlew :TeamCode:assembleDebug
```

To put that build on the robot, open the project in Android Studio, connect to
the Control Hub over ADB — either by USB or over wifi to the Control Hub's
network — and run the `TeamCode` configuration. Android Studio installs the APK
onto the Control Hub directly.

GitHub is history and review only. Nothing in this repository is on the deploy
path: pushing a branch, merging a pull request and passing the build check do
not change what is running on the robot. The only thing that changes the robot
is somebody installing a build onto the Control Hub from Android Studio.

## Control Hub configuration

The Control Hub configuration is created on the Driver Station, not in this
repository. This table is the record of what that configuration is meant to be.

| Device | Config name | Port | Notes |
| --- | --- | --- | --- |
| TODO | TODO | TODO | TODO |
| TODO | TODO | TODO | TODO |
| TODO | TODO | TODO | TODO |
| TODO | TODO | TODO | TODO |

Config names used in code must match this table exactly, including case. A name
that differs from the Control Hub configuration fails at run time, when an
OpMode is initialised, not at build time.

## Branch policy

`main` is protected:

- Changes reach `main` through a pull request, merged as a squash.
- History on `main` is linear.
- No direct pushes to `main`.
- No force pushes to `main`.

Work on a branch named `feature/<short-name>`.

## Updating the SDK

The SDK is updated by merging an upstream release tag. Add the upstream remote
once:

```
git remote add upstream https://github.com/FIRST-Tech-Challenge/FtcRobotController.git
```

Then, for each update, fetch the tags and merge the one you want:

```
git fetch upstream --tags
git merge <tag>
```

The BIOBUZZ SDK release is expected on 2026-09-12. Do the merge on a branch and
land it through a pull request like any other change, so the build check runs
against it before it reaches `main`.

Conflicts in the merge are a signal that something outside `TeamCode` was
edited. Keeping those files untouched is what makes SDK updates cheap.
Empty file modified gradlew
100644 → 100755
Empty file.
Loading