name: Build on: push: branches: [ master ] tags: - 'v*' pull_request: branches: [ master ] 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: Gradle Build run: | chmod +x gradlew ./gradlew photon-server:build photon-lib: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 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://api.github.com/repos/photonvision/photon-pi-gen/releases/tags/v2023.1.3_arm64 - os: ubuntu-latest artifact-name: LinuxArm64 image_suffix: limelight2 image_url: https://api.github.com/repos/photonvision/photon-pi-gen/releases/tags/v2023.2.2_limelight-arm64 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 }} - 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 }}