diff --git a/.github/workflows/orangepi-image-generation.yml b/.github/workflows/orangepi-image-generation.yml new file mode 100644 index 0000000000..f584debb54 --- /dev/null +++ b/.github/workflows/orangepi-image-generation.yml @@ -0,0 +1,332 @@ +name: Build + +on: + push: + branches: [ fixes/orangepi-image-generation ] + tags: + - 'v*' + pull_request: + branches: [ fixes/orangepi-image-generation ] + +jobs: + build-client: + name: "PhotonClient Build" + defaults: + run: + working-directory: photon-client + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 18 + - name: Install Dependencies + run: npm ci + - name: Build Production Client + run: npm run build + - uses: actions/upload-artifact@v4 + with: + name: built-client + path: photon-client/dist/ + build-examples: + name: "Build Examples" + runs-on: ubuntu-22.04 + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Fetch tags + run: git fetch --tags --force + - name: Install Java 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + # Need to publish to maven local first, so that C++ sim can pick it up + # Still haven't figured out how to make the vendordep file be copied before trying to build examples + - name: Publish photonlib to maven local + run: | + chmod +x gradlew + ./gradlew publishtomavenlocal -x check + - name: Build Java examples + working-directory: photonlib-java-examples + run: | + chmod +x gradlew + ./gradlew copyPhotonlib -x check + ./gradlew build -x check --max-workers 2 + - name: Build C++ examples + working-directory: photonlib-cpp-examples + run: | + chmod +x gradlew + ./gradlew copyPhotonlib -x check + ./gradlew build -x check --max-workers 2 + build-gradle: + name: "Gradle Build" + runs-on: ubuntu-22.04 + steps: + # Checkout code. + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Fetch tags + run: git fetch --tags --force + - name: Install Java 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + - name: Install mrcal deps + run: sudo apt-get update && sudo apt-get install -y libcholmod3 liblapack3 libsuitesparseconfig5 + - name: Gradle Build + run: | + chmod +x gradlew + ./gradlew build -x check --max-workers 2 + - name: Gradle Tests + run: ./gradlew testHeadless -i --max-workers 1 --stacktrace + - name: Gradle Coverage + run: ./gradlew jacocoTestReport --max-workers 1 + - name: Publish Coverage Report + uses: codecov/codecov-action@v3 + with: + file: ./photon-server/build/reports/jacoco/test/jacocoTestReport.xml + - name: Publish Core Coverage Report + uses: codecov/codecov-action@v3 + with: + file: ./photon-core/build/reports/jacoco/test/jacocoTestReport.xml + build-offline-docs: + name: "Build Offline Docs" + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + with: + repository: 'PhotonVision/photonvision-docs.git' + ref: master + - uses: actions/setup-python@v5 + with: + python-version: '3.9' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install sphinx sphinx_rtd_theme sphinx-tabs sphinxext-opengraph doc8 + pip install -r requirements.txt + - name: Build the docs + run: | + make html + - uses: actions/upload-artifact@master + with: + name: built-docs + path: build/html + build-photonlib-host: + env: + MACOSX_DEPLOYMENT_TARGET: 12 + strategy: + fail-fast: false + matrix: + include: + - os: windows-2022 + artifact-name: Win64 + architecture: x64 + - os: macos-12 + artifact-name: macOS + architecture: x64 + - os: ubuntu-22.04 + artifact-name: Linux + + name: "Photonlib - Build Host - ${{ matrix.artifact-name }}" + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install Java 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + - run: git fetch --tags --force + - run: | + chmod +x gradlew + ./gradlew photon-lib:build --max-workers 1 + - run: ./gradlew photon-lib:publish photon-targeting:publish + name: Publish + env: + ARTIFACTORY_API_KEY: ${{ secrets.ARTIFACTORY_API_KEY }} + if: github.event_name == 'push' + build-photonlib-docker: + strategy: + fail-fast: false + matrix: + include: + - container: wpilib/roborio-cross-ubuntu:2024-22.04 + artifact-name: Athena + - container: wpilib/raspbian-cross-ubuntu:bullseye-22.04 + artifact-name: Raspbian + - container: wpilib/aarch64-cross-ubuntu:bullseye-22.04 + artifact-name: Aarch64 + + runs-on: ubuntu-22.04 + container: ${{ matrix.container }} + name: "Photonlib - Build Docker - ${{ matrix.artifact-name }}" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Config Git + run: | + git config --global --add safe.directory /__w/photonvision/photonvision + - name: Build PhotonLib + run: | + chmod +x gradlew + ./gradlew photon-lib:build --max-workers 1 + - name: Publish + run: | + chmod +x gradlew + ./gradlew photon-lib:publish photon-targeting:publish + env: + ARTIFACTORY_API_KEY: ${{ secrets.ARTIFACTORY_API_KEY }} + if: github.event_name == 'push' + build-package: + needs: [build-client, build-gradle, build-offline-docs] + + strategy: + fail-fast: false + matrix: + include: + - os: windows-latest + artifact-name: Win64 + architecture: x64 + arch-override: none + - os: macos-latest + artifact-name: macOS + architecture: x64 + arch-override: none + - os: ubuntu-latest + artifact-name: Linux + architecture: x64 + arch-override: none + - os: macos-latest + artifact-name: macOSArm + architecture: x64 + arch-override: macarm64 + - os: ubuntu-latest + artifact-name: LinuxArm32 + architecture: x64 + arch-override: linuxarm32 + - os: ubuntu-latest + artifact-name: LinuxArm64 + architecture: x64 + arch-override: linuxarm64 + + runs-on: ${{ matrix.os }} + name: "Build fat JAR - ${{ matrix.artifact-name }}" + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install Java 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + - run: | + rm -rf photon-server/src/main/resources/web/* + mkdir -p photon-server/src/main/resources/web/docs + if: ${{ (matrix.os) != 'windows-latest' }} + - run: | + del photon-server\src\main\resources\web\*.* + mkdir photon-server\src\main\resources\web\docs + if: ${{ (matrix.os) == 'windows-latest' }} + - uses: actions/download-artifact@v4 + with: + name: built-client + path: photon-server/src/main/resources/web/ + - uses: actions/download-artifact@v4 + with: + name: built-docs + path: photon-server/src/main/resources/web/docs + - run: | + chmod +x gradlew + ./gradlew photon-server:shadowJar --max-workers 2 -PArchOverride=${{ matrix.arch-override }} + if: ${{ (matrix.arch-override != 'none') }} + - run: | + chmod +x gradlew + ./gradlew photon-server:shadowJar --max-workers 2 + if: ${{ (matrix.arch-override == 'none') }} + - uses: actions/upload-artifact@v4 + with: + name: jar-${{ matrix.artifact-name }} + path: photon-server/build/libs + build-image: + needs: [build-package] + + # if: ${{ github.event_name != 'pull_request' }} + + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + artifact-name: LinuxArm64 + image_suffix: RaspberryPi + image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/v2024.0.4/photonvision_raspi.img.xz + - os: ubuntu-latest + artifact-name: LinuxArm64 + image_suffix: limelight2 + image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/v2024.0.4/photonvision_limelight.img.xz + - os: ubuntu-latest + artifact-name: LinuxArm64 + image_suffix: orangepi5 + image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/v2024.0.4/photonvision_opi5.img.xz + + runs-on: ${{ matrix.os }} + name: "Build image - ${{ matrix.image_url }}" + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/download-artifact@v4 + with: + name: jar-${{ matrix.artifact-name }} + # TODO- replace with the arm-runner action and run this inside of the chroot. but this works for now. + - name: Generate image + run: | + chmod +x scripts/generatePiImage.sh + ./scripts/generatePiImage.sh ${{ matrix.image_url }} ${{ matrix.image_suffix }} + - uses: actions/upload-artifact@v4 + name: Upload image + with: + name: image-${{ matrix.image_suffix }} + path: photonvision*.xz + release: + needs: [build-package, build-image] + runs-on: ubuntu-22.04 + steps: + # Download literally every single artifact. This also downloads client and docs, + # but the filtering below won't pick these up (I hope) + - uses: actions/download-artifact@v4 + - run: find + # Push to dev release + - uses: pyTooling/Actions/releaser@r0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + tag: 'Dev' + rm: true + files: | + **/*.xz + **/*.jar + if: github.event_name == 'push' + # Upload all jars and xz archives + - uses: softprops/action-gh-release@v1 + with: + files: | + **/*.xz + **/*.jar + if: startsWith(github.ref, 'refs/tags/v') + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}