# NOTE: this workflow is now running on Dronecode / PX4 AWS account. # - If you want to keep the tests running in GitHub Actions you need to uncomment the "runs-on: ubuntu-latest" lines # and comment the "runs-on: [runs-on,runner=..." lines. # - If you would like to duplicate this setup try setting up "RunsOn" on your own AWS account try https://runs-on.com name: Build all targets on: workflow_dispatch: inputs: tag: required: true description: release version push: tags: - 'v*' branches: - 'main' - 'stable' - 'beta' - 'release/**' pull_request: branches: - '*' jobs: group_targets: name: Scan for Board Targets # runs-on: ubuntu-latest runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}"] outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} timestamp: ${{ steps.set-timestamp.outputs.timestamp }} tagname: ${{ steps.set-tag.outputs.tagname }} branchname: ${{ steps.set-branch.outputs.branchname }} steps: - uses: actions/checkout@v4 - name: Install Python Dependencies uses: py-actions/py-dependency-install@v4 with: path: "./Tools/setup/requirements.txt" - id: set-matrix run: echo "::set-output name=matrix::$(./Tools/ci/generate_board_targets_json.py --group)" - id: set-timestamp run: echo "::set-output name=timestamp::$(date +"%Y%m%d%H%M%S")" # This job is also triggered with versioned tags # Creating a and pushing a tag starting with "v" just as "v1.0.0" # will trigger this workflow and when all builds are done create a Github Release # then it will upload all binaries built as assets # Additionally, we can also trigger this step manually # From the Github Actions tab for this repository: # https://github.com/PX4/PX4-Autopilot/actions/workflows/build_all_targets.yml # You can now click a "Run Workflow" button that will prompt you for a tag name # This tag name has to match an existing tag otherwise the new release will be detached # Note: Only developers with "write" permission to the repository can use this feature - id: set-tag if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch' run: echo "::set-output name=tagname::${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}" - id: set-branch run: echo "::set-output name=branchname::${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" - name: Debug Matrix Output if: runner.debug == '1' run: echo "$(./Tools/ci/generate_board_targets_json.py --group --verbose)" setup: name: Build Group [${{ matrix.group }}] # runs-on: ubuntu-latest runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}"] needs: group_targets strategy: matrix: ${{ fromJson(needs.group_targets.outputs.matrix) }} container: image: ${{ matrix.container }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Git ownership workaround run: git config --system --add safe.directory '*' - name: Setup ccache uses: actions/cache@v4 with: path: ~/.ccache key: ${{ matrix.group }}-ccache-${{ needs.group_targets.outputs.timestamp }} restore-keys: ${{ matrix.group }}-ccache-${{ needs.group_targets.outputs.timestamp }} - name: Configure ccache run: | mkdir -p ~/.ccache echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf echo "compression = true" >> ~/.ccache/ccache.conf echo "compression_level = 6" >> ~/.ccache/ccache.conf echo "max_size = 120M" >> ~/.ccache/ccache.conf echo "hash_dir = false" >> ~/.ccache/ccache.conf ccache -s ccache -z - name: Building [${{ matrix.group }}] run: | ./Tools/ci/build_all_runner.sh ${{matrix.targets}} - name: Arrange Build Artifacts run: | ./Tools/ci/package_build_artifacts.sh - name: Upload Build Artifacts uses: actions/upload-artifact@v4 with: name: px4_${{matrix.group}}_build_artifacts path: artifacts/ - name: Cache Save run: ccache -s artifacts: name: Upload Artifacts to S3 # runs-on: ubuntu-latest runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}"] needs: [setup, group_targets] if: contains(fromJSON('["main", "stable", "beta"]'), needs.group_targets.outputs.branchname) steps: - name: Download Artifacts uses: actions/download-artifact@v4 with: path: artifacts/ merge-multiple: true - name: Branch Name run: | echo "${{ needs.group_targets.outputs.branchname }}" - name: Uploading Artifacts to S3 [${{ needs.group_targets.outputs.branchname == 'main' && 'master' || needs.group_targets.outputs.branchname }}] uses: jakejarvis/s3-sync-action@master with: args: --acl public-read env: AWS_S3_BUCKET: 'px4-travis' AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: 'us-west-1' SOURCE_DIR: artifacts/ DEST_DIR: Firmware/${{ needs.group_targets.outputs.branchname == 'main' && 'master' || needs.group_targets.outputs.branchname }}/ release: name: Create Release and Upload Artifacts # runs-on: ubuntu-latest runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}"] needs: [setup, group_targets] if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch' steps: - name: Download Artifacts uses: actions/download-artifact@v4 - name: Arrange Binaries run: | mkdir artifacts cp **/**/*.px4 artifacts/ - name: Upload Binaries to Release uses: softprops/action-gh-release@v2 with: name: ${{ needs.group_targets.outputs.tagname }} tag_name: ${{ needs.group_targets.outputs.tagname }} draft: true files: artifacts/*.px4