diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3c87572cf5..f24b4244e3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,123 +2,14 @@ name: Build on: push: - branches: [ master ] + 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: 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 @@ -188,179 +79,3 @@ jobs: 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 - cpu: cortex-a7 - image_additional_mb: 0 - - 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 - cpu: cortex-a7 - image_additional_mb: 0 - - os: ubuntu-latest - artifact-name: LinuxArm64 - image_suffix: limelight3 - image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/v2024.0.5/photonvision_limelight3.img.xz - cpu: cortex-a7 - image_additional_mb: 0 - - os: ubuntu-latest - artifact-name: LinuxArm64 - image_suffix: orangepi5 - image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/v2024.0.9/photonvision_opi5.img.xz - cpu: cortex-a8 - image_additional_mb: 4096 - - os: ubuntu-latest - artifact-name: LinuxArm64 - image_suffix: orangepi5plus - image_url: https://github.com/PhotonVision/photon-image-modifier/releases/download/v2024.0.9/photonvision_opi5plus.img.xz - cpu: cortex-a8 - image_additional_mb: 4096 - - 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 }} - - uses: pguyot/arm-runner-action@v2 - name: Generate image - id: generate_image - with: - base_image: ${{ matrix.image_url }} - image_additional_mb: ${{ matrix.image_additional_mb }} - optimize_image: yes - cpu: ${{ matrix.cpu }} - # We do _not_ wanna copy photon into the image. Bind mount instead - bind_mount_repository: true - commands: | - chmod +x scripts/armrunner.sh - ./scripts/armrunner.sh - - name: Compress image - run: | - new_jar=$(realpath $(find . -name photonvision\*-linuxarm64.jar)) - new_image_name=$(basename "${new_jar/.jar/_${{ matrix.image_suffix }}.img}") - mv ${{ steps.generate_image.outputs.image }} $new_image_name - sudo xz -T 0 -v $new_image_name - - 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 - **/photonlib*.json - if: github.event_name == 'push' - # Upload all jars and xz archives - - uses: softprops/action-gh-release@v1 - with: - files: | - **/*.xz - **/*.jar - **/photonlib*.json - if: startsWith(github.ref, 'refs/tags/v') - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml deleted file mode 100644 index 67d9cd203a..0000000000 --- a/.github/workflows/documentation.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: Documentation - -on: - push: - # For now, run on all commits to master - branches: [ master ] - # and also all tags starting with v - tags: - - 'v*' - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -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-demo - - uses: actions/upload-artifact@v4 - with: - name: built-client - path: photon-client/dist/ - - run_docs: - 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@v3 - with: - java-version: 17 - distribution: temurin - - - name: Build javadocs/doxygen - run: | - chmod +x gradlew - ./gradlew docs:generateJavaDocs docs:doxygen - - - uses: actions/upload-artifact@v4 - with: - name: built-docs - path: docs/build/docs - - release: - needs: [build-client, run_docs] - - runs-on: ubuntu-22.04 - steps: - - # Download literally every single artifact. - - uses: actions/download-artifact@v4 - - - run: find . - - name: copy file via ssh password - uses: appleboy/scp-action@v0.1.7 - with: - host: ${{ secrets.WEBMASTER_SSH_HOST }} - username: ${{ secrets.WEBMASTER_SSH_USERNAME }} - password: ${{ secrets.WEBMASTER_SSH_KEY }} - port: ${{ secrets.WEBMASTER_SSH_PORT }} - source: "*" - target: /var/www/html/photonvision-docs/ diff --git a/.github/workflows/lint-format.yml b/.github/workflows/lint-format.yml deleted file mode 100644 index 0fd220a02e..0000000000 --- a/.github/workflows/lint-format.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: Lint and Format - -on: - push: - branches: [ master ] - tags: - - 'v*' - pull_request: - branches: [ master ] - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} - cancel-in-progress: true - -jobs: - wpiformat: - name: "wpiformat" - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v3 - - name: Fetch all history and metadata - run: | - git fetch --prune --unshallow - git checkout -b pr - git branch -f master origin/master - - name: Set up Python 3.8 - uses: actions/setup-python@v4 - with: - python-version: 3.8 - - name: Install wpiformat - run: pip3 install wpiformat - - name: Run - run: wpiformat - - name: Check output - run: git --no-pager diff --exit-code HEAD - - name: Generate diff - run: git diff HEAD > wpiformat-fixes.patch - if: ${{ failure() }} - - uses: actions/upload-artifact@v3 - with: - name: wpiformat fixes - path: wpiformat-fixes.patch - if: ${{ failure() }} - javaformat: - name: "Java Formatting" - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - uses: actions/setup-java@v3 - with: - java-version: 17 - distribution: temurin - - run: | - chmod +x gradlew - ./gradlew spotlessCheck - - client-lint-format: - name: "PhotonClient Lint and Formatting" - defaults: - run: - working-directory: photon-client - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v3 - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 18 - - name: Install Dependencies - run: npm ci - - name: Check Linting - run: npm run lint-ci - - name: Check Formatting - run: npm run format-ci - server-index: - name: "Check server index.html not changed" - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v3 - - name: Fetch all history and metadata - run: | - git fetch --prune --unshallow - git checkout -b pr - git branch -f master origin/master - - name: Check index.html not changed - run: git --no-pager diff --exit-code origin/master photon-server/src/main/resources/web/index.html diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml deleted file mode 100644 index 2fdbda352c..0000000000 --- a/.github/workflows/python.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Build and Distribute PhotonLibPy - -permissions: - id-token: write # IMPORTANT: this permission is mandatory for trusted publishing - -on: - push: - branches: [ master ] - tags: - - 'v*' - pull_request: - branches: [ master ] - -jobs: - buildAndDeploy: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: 3.11 - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install setuptools wheel pytest - - - name: Build wheel - working-directory: ./photon-lib/py - run: | - python setup.py sdist bdist_wheel - - - name: Run Unit Tests - working-directory: ./photon-lib/py - run: | - pip install --no-cache-dir dist/*.whl - pytest - - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: dist - path: ./photon-lib/py/dist/ - - - name: Publish package distributions to TestPyPI - # Only upload on tags - if: startsWith(github.ref, 'refs/tags/v') - uses: pypa/gh-action-pypi-publish@release/v1 - with: - packages_dir: ./photon-lib/py/dist/ - - permissions: - id-token: write # IMPORTANT: this permission is mandatory for trusted publishing diff --git a/build.gradle b/build.gradle index d1b9cbf706..bc9cac7d6a 100644 --- a/build.gradle +++ b/build.gradle @@ -13,8 +13,9 @@ allprojects { repositories { mavenCentral() mavenLocal() - maven { url = "https://maven.photonvision.org/repository/internal/" } - maven { url = "https://maven.photonvision.org/repository/snapshots/" } + maven { url = "https://maven.photonvision.org/releases" } + maven { url = "https://maven.photonvision.org/snapshots" } + maven { url = "https://jogamp.org/deployment/maven/" } } wpilibRepositories.addAllReleaseRepositories(it) wpilibRepositories.addAllDevelopmentRepositories(it) @@ -50,6 +51,10 @@ ext { println("Building for platform " + jniPlatform + " wpilib: " + wpilibNativeName) println("Using Wpilib: " + wpilibVersion) println("Using OpenCV: " + openCVversion) + + + photonMavenURL = 'https://maven.photonvision.org/' + (isDev ? 'snapshots' : 'releases'); + println("Publishing Photonlib to " + photonMavenURL) } spotless { diff --git a/photonlib-cpp-examples/build.gradle b/photonlib-cpp-examples/build.gradle index 0d262a1504..6404a00c56 100644 --- a/photonlib-cpp-examples/build.gradle +++ b/photonlib-cpp-examples/build.gradle @@ -6,7 +6,7 @@ allprojects { repositories { mavenCentral() mavenLocal() - maven { url = "https://maven.photonvision.org/repository/internal/" } + maven { url = "https://maven.photonvision.org/releases" } } } diff --git a/photonlib-java-examples/build.gradle b/photonlib-java-examples/build.gradle index 35f533e690..270e2ab600 100644 --- a/photonlib-java-examples/build.gradle +++ b/photonlib-java-examples/build.gradle @@ -8,7 +8,7 @@ allprojects { repositories { mavenCentral() mavenLocal() - maven { url = "https://maven.photonvision.org/repository/internal/" } + maven { url = "https://maven.photonvision.org/releases" } } } diff --git a/shared/javacommon.gradle b/shared/javacommon.gradle index 49a998e198..14ea2753d5 100644 --- a/shared/javacommon.gradle +++ b/shared/javacommon.gradle @@ -79,7 +79,7 @@ publishing { repositories { maven { - url ('https://maven.photonvision.org/repository/' + (isDev ? 'snapshots' : 'internal')) + url(photonMavenURL) credentials { username 'ghactions' password System.getenv("ARTIFACTORY_API_KEY") diff --git a/shared/javacpp/publish.gradle b/shared/javacpp/publish.gradle index 22389e2342..4a2ec250cb 100644 --- a/shared/javacpp/publish.gradle +++ b/shared/javacpp/publish.gradle @@ -70,7 +70,7 @@ model { repositories { maven { - url ('https://maven.photonvision.org/repository/' + (isDev ? 'snapshots' : 'internal')) + url(photonMavenURL) credentials { username 'ghactions' password System.getenv("ARTIFACTORY_API_KEY")