Skip to content

Commit

Permalink
ci: Upload Artifacts to S3
Browse files Browse the repository at this point in the history
- replaces metadata and deploy workflows
- move ci scripts under Tools/ci
mrpollo authored and dagar committed Oct 4, 2024

Verified

This commit was signed with the committer’s verified signature.
rouault Even Rouault
1 parent 8ae83a8 commit 652bb82
Showing 6 changed files with 135 additions and 219 deletions.
66 changes: 52 additions & 14 deletions .github/workflows/build_all_targets.yml
Original file line number Diff line number Diff line change
@@ -32,6 +32,7 @@ jobs:
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

@@ -41,7 +42,7 @@ jobs:
path: "./Tools/setup/requirements.txt"

- id: set-matrix
run: echo "::set-output name=matrix::$(./Tools/generate_board_targets_json.py --group)"
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")"
@@ -60,6 +61,13 @@ jobs:
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
@@ -74,17 +82,17 @@ jobs:
with:
fetch-depth: 0

- name: ownership workaround
- name: Git ownership workaround
run: git config --system --add safe.directory '*'

- name: ccache setup keys
- 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: setup ccache
- name: Configure ccache
run: |
mkdir -p ~/.ccache
echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
@@ -95,24 +103,54 @@ jobs:
ccache -s
ccache -z
- name: building [${{ matrix.group }}]
- name: Building [${{ matrix.group }}]
run: |
./Tools/ci/build_all_runner.sh ${{matrix.targets}}
- name: Arrange Build Artifacts
run: |
./Tools/ci_build_all_runner.sh ${{matrix.targets}}
./Tools/ci/package_build_artifacts.sh
- name: Upload px4 package
- name: Upload Build Artifacts
uses: actions/upload-artifact@v4
with:
name: px4_${{matrix.group}}_build_artifacts
path: |
build/**/*.px4
build/**/*.bin
compression-level: 0
path: artifacts/

- name: ccache post-run
- 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: Release and Upload
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]
@@ -126,7 +164,7 @@ jobs:
mkdir artifacts
cp **/**/*.px4 artifacts/
- name: Upload Binaries
- name: Upload Binaries to Release
uses: softprops/action-gh-release@v2
with:
name: ${{ needs.group_targets.outputs.tagname }}
56 changes: 0 additions & 56 deletions .github/workflows/deploy_all.yml

This file was deleted.

133 changes: 0 additions & 133 deletions .github/workflows/metadata.yml

This file was deleted.

File renamed without changes.
Original file line number Diff line number Diff line change
@@ -111,7 +111,19 @@ def process_target(px4board_file, target_name):
print("= scanning for boards =")
print("=======================")

for manufacturer in os.scandir(os.path.join(source_dir, 'boards')):
# We also need to build metadata
# includes:
# - Airframe
# - Parameters
# - Events
metadata_targets = ['airframe_metadata', 'parameters_metadata', 'extract_events']
grouped_targets['base'] = {}
grouped_targets['base']['container'] = 'px4io/px4-dev-base-focal:2021-09-08'
grouped_targets['base']['manufacturers'] = {}
grouped_targets['base']['manufacturers']['px4'] = []
grouped_targets['base']['manufacturers']['px4'] += metadata_targets

for manufacturer in os.scandir(os.path.join(source_dir, '../boards')):
if not manufacturer.is_dir():
continue
if manufacturer.name in excluded_manufacturers:
@@ -143,7 +155,6 @@ def process_target(px4board_file, target_name):
grouped_targets[target['arch']]['container'] = target['container']
grouped_targets[target['arch']]['manufacturers'] = {}
if(manufacturer.name not in grouped_targets[target['arch']]['manufacturers']):
grouped_targets[target['arch']]['manufacturers'][manufacturer.name] = {}
grouped_targets[target['arch']]['manufacturers'][manufacturer.name] = []
grouped_targets[target['arch']]['manufacturers'][manufacturer.name].append(target_name)
if target is not None:
@@ -156,6 +167,11 @@ def process_target(px4board_file, target_name):
print("============================")
pprint.pp(grouped_targets)

if(verbose):
print("===================")
print("= Generating JSON =")
print("===================")

if (args.group):
# if we are using this script for grouping builds
# we loop trough the manufacturers list and split their targets
@@ -179,16 +195,24 @@ def process_target(px4board_file, target_name):
last_arch = ''
SPLIT_LIMIT = 10
LOWER_LIMIT = 5
if(verbose):
print(f'=:Architectures: [{grouped_targets.keys()}]')
for arch in grouped_targets:
if(verbose):
print(f'=:Processing: [{arch}] Last: [{last_arch}]')

if(last_arch == ''):
last_arch = arch
if(arch not in group_number):
group_number[arch] = 0

if(last_arch != arch and len(temp_group) > 0):

group_name = last_arch + "-" + str(group_number[last_arch])
group_number[last_arch] += 1
targets = comma_targets(temp_group)
if(verbose):
print(f'=:Orphan: [{arch}][{last_arch}][{targets}]')
final_groups.append({
"container": grouped_targets[last_arch]['container'],
"targets": targets,
@@ -198,12 +222,22 @@ def process_target(px4board_file, target_name):
})
last_arch = arch
temp_group = []

for man in grouped_targets[arch]['manufacturers']:
if(verbose):
print(f'=:Processing: [{arch}][{man}]')
for tar in grouped_targets[arch]['manufacturers'][man]:
man_len = len(grouped_targets[arch]['manufacturers'][man])
if(verbose):
print(f'=:Processing: [{arch}][{man}][{man_len}][{tar}]')
if(last_man != man):
man_len = len(grouped_targets[arch]['manufacturers'][man])
# if(verbose):
# print(f'=:Processing: [{arch}][{man}][{tar}][{man_len}]')
if(man_len > LOWER_LIMIT and man_len < (SPLIT_LIMIT + 1)):
# Manufacturers can have their own group
if(verbose):
print(f'=:Processing: ==Manufacturers can have their own group')
print(f'=:Processing: Limits[{LOWER_LIMIT}][{SPLIT_LIMIT}]')
group_name = arch + "-" + man
targets = comma_targets(grouped_targets[arch]['manufacturers'][man])
last_man = man
@@ -234,19 +268,6 @@ def process_target(px4board_file, target_name):
else:
temp_group.append(tar)

if(last_arch != arch and len(temp_group) > 0):
group_name = last_arch + "-" + str(group_number[last_arch])
group_number[last_arch] += 1
targets = comma_targets(temp_group)
final_groups.append({
"container": grouped_targets[last_arch]['container'],
"targets": targets,
"arch": last_arch,
"group": group_name,
"len": len(temp_group)
})
last_arch = arch
temp_group = []
if(len(temp_group) > (LOWER_LIMIT - 1)):
group_name = arch + "-" + str(group_number[arch])
last_arch = arch
46 changes: 46 additions & 0 deletions Tools/ci/package_build_artifacts.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/bin/bash

mkdir artifacts
cp **/**/*.px4 artifacts/
cp **/**/*.elf artifacts/
for build_dir_path in build/*/ ; do
build_dir=${build_dir_path#*/}
build_dir=${build_dir::${#build_dir}-1}
mkdir artifacts/$build_dir
find artifacts/ -maxdepth 1 -type f -name "*$build_dir*"
# Airframe
cp $build_dir_path/airframes.xml artifacts/$build_dir/
# Parameters
cp $build_dir_path/parameters.xml artifacts/$build_dir/
cp $build_dir_path/parameters.json artifacts/$build_dir/
cp $build_dir_path/parameters.json.xz artifacts/$build_dir/
# Actuators
cp $build_dir_path/actuators.json artifacts/$build_dir/
cp $build_dir_path/actuators.json.xz artifacts/$build_dir/
# Events
cp $build_dir_path/events/all_events.json.xz artifacts/$build_dir/
# ROS 2 msgs
cp $build_dir_path/events/all_events.json.xz artifacts/$build_dir/
# Module Docs
ls -la artifacts/$build_dir
echo "----------"
done

# general metadata
mkdir artifacts/_general/
cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/
# Airframe
cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/
# Parameters
cp artifacts/px4_sitl_default/parameters.xml artifacts/_general/
cp artifacts/px4_sitl_default/parameters.json artifacts/_general/
cp artifacts/px4_sitl_default/parameters.json.xz artifacts/_general/
# Actuators
cp artifacts/px4_sitl_default/actuators.json artifacts/_general/
cp artifacts/px4_sitl_default/actuators.json.xz artifacts/_general/
# Events
cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/
# ROS 2 msgs
cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/
# Module Docs
ls -la artifacts/_general/

0 comments on commit 652bb82

Please sign in to comment.