6 changed files with 235 additions and 28 deletions
@ -0,0 +1,77 @@
@@ -0,0 +1,77 @@
|
||||
name: Deploy metadata for all targets |
||||
|
||||
on: |
||||
push: |
||||
branches: |
||||
- 'master' |
||||
- 'release/*' |
||||
- 'pr-metadata-test' |
||||
|
||||
jobs: |
||||
enumerate_targets: |
||||
runs-on: ubuntu-latest |
||||
outputs: |
||||
matrix: ${{ steps.set-matrix.outputs.matrix }} |
||||
steps: |
||||
- uses: actions/checkout@v1 |
||||
with: |
||||
token: ${{secrets.ACCESS_TOKEN}} |
||||
- id: set-matrix |
||||
run: echo "::set-output name=matrix::$(./Tools/generate_board_targets_json.py)" |
||||
build: |
||||
runs-on: ubuntu-latest |
||||
needs: enumerate_targets |
||||
strategy: |
||||
matrix: ${{fromJson(needs.enumerate_targets.outputs.matrix)}} |
||||
container: px4io/px4-dev-${{ matrix.container }}:2021-02-04 |
||||
steps: |
||||
- uses: actions/checkout@v1 |
||||
with: |
||||
token: ${{secrets.ACCESS_TOKEN}} |
||||
|
||||
- name: Prepare ccache timestamp |
||||
id: ccache_cache_timestamp |
||||
shell: cmake -P {0} |
||||
run: | |
||||
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) |
||||
message("::set-output name=timestamp::${current_date}") |
||||
- name: ccache cache files |
||||
uses: actions/cache@v2 |
||||
with: |
||||
path: ~/.ccache |
||||
key: ${{matrix.target}}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}} |
||||
restore-keys: ${{matrix.target}}-ccache- |
||||
- name: setup ccache |
||||
run: | |
||||
mkdir -p ~/.ccache |
||||
echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf |
||||
echo "compression = true" >> ~/.ccache/ccache.conf |
||||
echo "compression_level = 5" >> ~/.ccache/ccache.conf |
||||
echo "max_size = 100M" >> ~/.ccache/ccache.conf |
||||
ccache -s |
||||
ccache -z |
||||
|
||||
- name: make ${{matrix.target}} |
||||
run: make ${{matrix.target}} |
||||
- name: ccache post-run |
||||
run: ccache -s |
||||
|
||||
- name: parameter metadata |
||||
run: | |
||||
make ${{matrix.target}} ver_gen |
||||
./src/lib/version/get_git_tag_or_branch_version.sh build/${{ matrix.target }} >> $GITHUB_ENV |
||||
cd build/${{ matrix.target }} |
||||
mkdir _metadata || true |
||||
cp parameters.* _metadata |
||||
|
||||
- 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: 'build/${{ matrix.target }}/_metadata/' |
||||
DEST_DIR: 'Firmware/${{ env.version }}/${{ matrix.target }}/' |
||||
|
@ -0,0 +1,92 @@
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python3 |
||||
""" Script to generate a JSON config with all build targets (for CI) """ |
||||
|
||||
import argparse |
||||
import os |
||||
import sys |
||||
import json |
||||
import re |
||||
|
||||
source_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..') |
||||
|
||||
parser = argparse.ArgumentParser(description='Generate build targets') |
||||
|
||||
parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', |
||||
help='Verbose Output') |
||||
parser.add_argument('-p', '--pretty', dest='pretty', action='store_true', |
||||
help='Pretty output instead of a single line') |
||||
|
||||
args = parser.parse_args() |
||||
verbose = args.verbose |
||||
|
||||
build_configs = [] |
||||
excluded_manufacturers = ['atlflight'] |
||||
excluded_platforms = ['qurt'] |
||||
excluded_labels = ['stackcheck', 'nolockstep', 'replay', 'test'] |
||||
|
||||
def process_target(cmake_file, target_name): |
||||
ret = None |
||||
is_board_def = False |
||||
platform = None |
||||
toolchain = None |
||||
for line in open(cmake_file, 'r'): |
||||
if 'px4_add_board' in line: |
||||
is_board_def = True |
||||
if not is_board_def: |
||||
continue |
||||
|
||||
re_platform = re.search('PLATFORM\s+([^\s]+)', line) |
||||
if re_platform: platform = re_platform.group(1) |
||||
|
||||
re_toolchain = re.search('TOOLCHAIN\s+([^\s]+)', line) |
||||
if re_toolchain: toolchain = re_toolchain.group(1) |
||||
|
||||
if is_board_def: |
||||
assert platform, f"PLATFORM not found in {cmake_file}" |
||||
|
||||
if platform not in excluded_platforms: |
||||
# get the container based on the platform and toolchain |
||||
container = platform |
||||
if platform == 'posix': |
||||
container = 'base-focal' |
||||
if toolchain: |
||||
if toolchain.startswith('aarch64'): |
||||
container = 'aarch64' |
||||
elif toolchain == 'arm-linux-gnueabihf': |
||||
container = 'armhf' |
||||
else: |
||||
if verbose: print(f'possibly unmatched toolchain: {toolchain}') |
||||
elif platform == 'nuttx': |
||||
container = 'nuttx-focal' |
||||
|
||||
ret = {'target': target_name, 'container': container} |
||||
return ret |
||||
|
||||
for manufacturer in os.scandir(os.path.join(source_dir, 'boards')): |
||||
if not manufacturer.is_dir(): |
||||
continue |
||||
if manufacturer.name in excluded_manufacturers: |
||||
if verbose: print(f'excluding manufacturer {manufacturer.name}') |
||||
continue |
||||
|
||||
for board in os.scandir(manufacturer.path): |
||||
if not board.is_dir(): |
||||
continue |
||||
for files in os.scandir(board.path): |
||||
if files.is_file() and files.name.endswith('.cmake'): |
||||
label = files.name[:-6] |
||||
target_name = manufacturer.name + '_' + board.name + '_' + label |
||||
if label in excluded_labels: |
||||
if verbose: print(f'excluding label {label} ({target_name})') |
||||
continue |
||||
target = process_target(files.path, target_name) |
||||
if target is not None: |
||||
build_configs.append(target) |
||||
|
||||
|
||||
github_action_config = { 'include': build_configs } |
||||
extra_args = {} |
||||
if args.pretty: |
||||
extra_args['indent'] = 2 |
||||
print(json.dumps(github_action_config, **extra_args)) |
||||
|
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
set -e |
||||
|
||||
# Script to extract PX4_GIT_TAG_OR_BRANCH_NAME to be used by CI |
||||
|
||||
build_dir="$1" |
||||
if [ ! -d "$build_dir" ]; then |
||||
echo "usage: $0 <build directory>" |
||||
exit -1 |
||||
fi |
||||
|
||||
version_file="$build_dir/src/lib/version/build_git_version.h" |
||||
|
||||
if [ ! -f "$version_file" ]; then |
||||
echo "Version file not found. Did you run the target 'ver_gen'?" |
||||
exit -1 |
||||
fi |
||||
|
||||
sed -n 's/.*PX4_GIT_TAG_OR_BRANCH_NAME\s*"\(.*\)".*/version=\1/p' "$version_file" |
||||
|
Loading…
Reference in new issue