forked from autowarefoundation/autoware_launch
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: GitHub <noreply@github.com>
- Loading branch information
Showing
2 changed files
with
132 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
import argparse | ||
import dataclasses | ||
from pathlib import Path | ||
from typing import List | ||
from typing import Optional | ||
|
||
import git | ||
|
||
""" | ||
This module updates `sync-param-files.yaml` based on the launch parameter files in `autoware.universe`. | ||
""" | ||
|
||
REPO_NAME = "autowarefoundation/autoware.universe" | ||
REPO_URL = f"https://github.com/{REPO_NAME}.git" | ||
CLONE_PATH = Path("/tmp/autoware.universe") | ||
|
||
|
||
@dataclasses.dataclass | ||
class FileSyncConfig: | ||
source: str | ||
dest: str | ||
replace: Optional[bool] = None | ||
delete_orphaned: Optional[bool] = None | ||
pre_commands: Optional[str] = None | ||
post_commands: Optional[str] = None | ||
|
||
|
||
def create_tier4_launch_sync_configs(tier4_launch_package_path: Path) -> List[FileSyncConfig]: | ||
launch_package_name = tier4_launch_package_path.name | ||
launch_config_path = tier4_launch_package_path / "config" | ||
|
||
sync_configs = [] | ||
for param_file_path in tier4_launch_package_path.glob("config/**/*.param.yaml"): | ||
relative_param_file_path = param_file_path.relative_to(launch_config_path) | ||
|
||
source = param_file_path.relative_to(CLONE_PATH) | ||
dest = Path("autoware_launch/config") / launch_package_name / relative_param_file_path | ||
|
||
sync_configs.append(FileSyncConfig(str(source), str(dest))) | ||
|
||
return sync_configs | ||
|
||
|
||
def dump_sync_config(section_name: str, sync_configs: List[FileSyncConfig]) -> List[str]: | ||
indent = 4 * " " | ||
lines = [f"{indent}# {section_name}\n"] | ||
for sync_config in sync_configs: | ||
lines.append(f"{indent}- source: {sync_config.source}\n") | ||
lines.append(f"{indent} dest: {sync_config.dest}\n") | ||
lines.append("\n") | ||
return lines | ||
|
||
|
||
def main(): | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument("sync_param_files_path", type=Path, help="path to sync-param-files.yaml") | ||
args = parser.parse_args() | ||
|
||
# Clone Autoware | ||
if not CLONE_PATH.exists(): | ||
git.Repo.clone_from(REPO_URL, CLONE_PATH) | ||
|
||
# Create sync config for tier4_*_launch | ||
tier4_launch_package_paths = sorted( | ||
CLONE_PATH.glob("launch/tier4_*_launch"), key=lambda p: p.name | ||
) | ||
tier4_launch_sync_configs_map = { | ||
p.name: create_tier4_launch_sync_configs(p) for p in tier4_launch_package_paths | ||
} | ||
|
||
# Create sync-param-files.yaml | ||
with open(args.sync_param_files_path, "w") as f: | ||
f.write(f"- repository: {REPO_NAME}\n") | ||
f.write(" files:\n") | ||
for section_name, sync_config in tier4_launch_sync_configs_map.items(): | ||
f.writelines(dump_sync_config(section_name, sync_config)) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
name: update-sync-param-files | ||
|
||
on: | ||
schedule: | ||
- cron: 0 0 * * * | ||
workflow_dispatch: | ||
|
||
jobs: | ||
update-sync-param-files: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Generate token | ||
id: generate-token | ||
uses: tibdex/github-app-token@v1 | ||
with: | ||
app_id: ${{ secrets.APP_ID }} | ||
private_key: ${{ secrets.PRIVATE_KEY }} | ||
|
||
- name: Check out repository | ||
uses: actions/checkout@v3 | ||
|
||
- name: Install GitPython | ||
run: | | ||
pip3 install GitPython | ||
shell: bash | ||
|
||
- name: Generate sync-param-files.yaml | ||
run: | | ||
python3 .github/update-sync-param-files.py .github/sync-param-files.yaml | ||
- name: Create PR | ||
id: create-pr | ||
uses: peter-evans/create-pull-request@v5 | ||
with: | ||
token: ${{ steps.generate-token.outputs.token }} | ||
base: ${{ github.event.repository.default_branch }} | ||
branch: update-sync-param-files | ||
title: "chore: update sync-param-files.yaml" | ||
commit-message: "chore: update sync-param-files.yaml" | ||
body: ${{ steps.create-pr-body.outputs.body }} | ||
|
||
- name: Check outputs | ||
run: | | ||
echo "Pull Request Number - ${{ steps.create-pr.outputs.pull-request-number }}" | ||
echo "Pull Request URL - ${{ steps.create-pr.outputs.pull-request-url }}" | ||
shell: bash | ||
|
||
- name: Enable auto-merge | ||
if: ${{ steps.create-pr.outputs.pull-request-operation == 'created' }} | ||
run: gh pr merge --squash --auto "${{ steps.create-pr.outputs.pull-request-number }}" | ||
env: | ||
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} |