mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-19 00:43:54 +08:00
229 lines
7.7 KiB
YAML
229 lines
7.7 KiB
YAML
name: Build Single Tinygrad Model and Push
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
upstream_branch:
|
|
description: 'Upstream commit to build from'
|
|
required: true
|
|
type: string
|
|
custom_name:
|
|
description: 'Custom name for the model (no date, only name)'
|
|
required: false
|
|
type: string
|
|
recompiled_dir:
|
|
description: 'Existing recompiled directory number (e.g. 3 for recompiled3)'
|
|
required: true
|
|
type: string
|
|
json_version:
|
|
description: 'driving_models version number to update (e.g. 5 for driving_models_v5.json)'
|
|
required: true
|
|
type: string
|
|
artifact_suffix:
|
|
description: 'Suffix for artifact name'
|
|
required: false
|
|
type: string
|
|
default: ''
|
|
bypass_push:
|
|
description: 'Bypass pushing to GitLab for build-all'
|
|
required: false
|
|
default: true
|
|
type: boolean
|
|
workflow_dispatch:
|
|
inputs:
|
|
upstream_branch:
|
|
description: 'Upstream commit to build from'
|
|
required: true
|
|
type: string
|
|
custom_name:
|
|
description: 'Custom name for the model (no date, only name)'
|
|
required: false
|
|
type: string
|
|
recompiled_dir:
|
|
description: 'Existing recompiled directory number (e.g. 3 for recompiled3)'
|
|
required: true
|
|
type: string
|
|
json_version:
|
|
description: 'driving_models version number to update (e.g. 5 for driving_models_v5.json)'
|
|
required: true
|
|
type: string
|
|
model_folder:
|
|
description: 'Model folder'
|
|
type: choice
|
|
default: 'None'
|
|
options:
|
|
- None
|
|
- Simple Plan Models
|
|
- Space Lab Models
|
|
- TR Models
|
|
- DTR Models
|
|
- Custom Merge Models
|
|
- FOF series models
|
|
- Other
|
|
custom_model_folder:
|
|
description: 'Custom model folder name (if "Other" selected)'
|
|
required: false
|
|
type: string
|
|
generation:
|
|
description: 'Model generation'
|
|
required: false
|
|
type: string
|
|
version:
|
|
description: 'Minimum selector version'
|
|
required: false
|
|
type: string
|
|
env:
|
|
RECOMPILED_DIR: recompiled${{ inputs.recompiled_dir }}
|
|
JSON_FILE: docs/docs/driving_models_v${{ inputs.json_version }}.json
|
|
|
|
jobs:
|
|
build_model:
|
|
uses: ./.github/workflows/sunnypilot-build-model.yaml
|
|
with:
|
|
upstream_branch: ${{ inputs.upstream_branch }}
|
|
custom_name: ${{ inputs.custom_name || inputs.upstream_branch }}
|
|
is_20hz: true
|
|
artifact_suffix: ${{ inputs.artifact_suffix }}
|
|
secrets: inherit
|
|
|
|
publish_model:
|
|
if: ${{ !inputs.bypass_push && !cancelled() }}
|
|
concurrency:
|
|
group: gitlab-push-${{ inputs.recompiled_dir }}
|
|
cancel-in-progress: false
|
|
needs: build_model
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Set up SSH
|
|
uses: webfactory/ssh-agent@v0.9.0
|
|
with:
|
|
ssh-private-key: ${{ secrets.GITLAB_SSH_PRIVATE_KEY }}
|
|
|
|
- name: Add GitLab.com SSH key to known_hosts
|
|
run: |
|
|
mkdir -p ~/.ssh
|
|
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
|
|
|
|
- name: Clone GitLab docs repo
|
|
env:
|
|
GIT_SSH_COMMAND: 'ssh -o UserKnownHostsFile=~/.ssh/known_hosts'
|
|
run: |
|
|
echo "Cloning GitLab"
|
|
git clone --depth 1 --filter=tree:0 --sparse git@gitlab.com:sunnypilot/public/${{ vars.MODELS_GITLAB }} gitlab_docs
|
|
cd gitlab_docs
|
|
echo "checkout models/${RECOMPILED_DIR}"
|
|
git sparse-checkout set --no-cone models/${RECOMPILED_DIR}
|
|
git checkout main
|
|
cd ..
|
|
|
|
- name: Checkout docs repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: sunnypilot/sunnypilot-docs
|
|
ref: gh-pages
|
|
path: docs
|
|
ssh-key: ${{ secrets.CI_SUNNYPILOT_DOCS_PRIVATE_KEY }}
|
|
|
|
- name: Validate recompiled dir and JSON version
|
|
run: |
|
|
if [ ! -d "gitlab_docs/models/$RECOMPILED_DIR" ]; then
|
|
echo "Recompiled dir $RECOMPILED_DIR does not exist in GitLab repo"
|
|
exit 1
|
|
fi
|
|
if [ ! -f "$JSON_FILE" ]; then
|
|
echo "JSON file $JSON_FILE does not exist!"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Download artifact name file
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: artifact-name-${{ inputs.custom_name || inputs.upstream_branch }}
|
|
path: artifact_name
|
|
|
|
- name: Read artifact name
|
|
id: read-artifact-name
|
|
run: |
|
|
ARTIFACT_NAME=$(cat artifact_name/artifact_name.txt)
|
|
echo "artifact_name=$ARTIFACT_NAME" >> $GITHUB_OUTPUT
|
|
|
|
- name: Download and extract model artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: ${{ steps.read-artifact-name.outputs.artifact_name }}
|
|
path: output
|
|
|
|
- name: Remove unwanted files
|
|
run: |
|
|
find output -type f -name 'dmonitoring_model_tinygrad.pkl' -delete
|
|
find output -type f -name 'dmonitoring_model.onnx' -delete
|
|
|
|
- name: Copy model artifact(s) to GitLab recompiled dir
|
|
env:
|
|
ARTIFACT_NAME: ${{ steps.read-artifact-name.outputs.artifact_name }}
|
|
run: |
|
|
ARTIFACT_DIR="gitlab_docs/models/${RECOMPILED_DIR}/${ARTIFACT_NAME}"
|
|
mkdir -p "$ARTIFACT_DIR"
|
|
for path in output/*; do
|
|
if [ "$(basename "$path")" = "artifact_name.txt" ]; then
|
|
continue
|
|
fi
|
|
name="$(basename "$path")"
|
|
if [ -d "$path" ]; then
|
|
mkdir -p "$ARTIFACT_DIR/$name"
|
|
cp -r "$path"/* "$ARTIFACT_DIR/$name/"
|
|
echo "Copied dir $name -> $ARTIFACT_DIR/$name"
|
|
else
|
|
cp "$path" "$ARTIFACT_DIR/"
|
|
echo "Copied file $name -> $ARTIFACT_DIR/"
|
|
fi
|
|
done
|
|
|
|
- name: Push recompiled dir to GitLab
|
|
env:
|
|
GITLAB_SSH_PRIVATE_KEY: ${{ secrets.GITLAB_SSH_PRIVATE_KEY }}
|
|
run: |
|
|
cd gitlab_docs
|
|
git checkout main
|
|
git pull origin main
|
|
for d in models/"$RECOMPILED_DIR"/*/; do
|
|
git sparse-checkout add "$d"
|
|
done
|
|
git add models/"$RECOMPILED_DIR"
|
|
git config --global user.name "GitHub Action"
|
|
git config --global user.email "action@github.com"
|
|
git commit -m "Create/Update $RECOMPILED_DIR with new/updated model from build-single-tinygrad-model" || echo "No changes to commit"
|
|
git push origin main
|
|
|
|
- run: |
|
|
cd docs
|
|
git pull origin gh-pages
|
|
|
|
- name: Run json_parser.py to update JSON
|
|
run: |
|
|
FOLDER="${{ inputs.model_folder }}"
|
|
if [ "$FOLDER" = "Other" ]; then
|
|
FOLDER="${{ inputs.custom_model_folder }}"
|
|
fi
|
|
ARGS=""
|
|
if [ "$FOLDER" != "None" ] && [ -n "$FOLDER" ]; then
|
|
ARGS="$ARGS --model-folder \"$FOLDER\""
|
|
fi
|
|
[ -n "${{ inputs.generation }}" ] && ARGS="$ARGS --generation \"${{ inputs.generation }}\""
|
|
[ -n "${{ inputs.version }}" ] && ARGS="$ARGS --version \"${{ inputs.version }}\""
|
|
eval python3 docs/json_parser.py \
|
|
--json-path "$JSON_FILE" \
|
|
--recompiled-dir "gitlab_docs/models/$RECOMPILED_DIR" \
|
|
--sort-by-date \
|
|
$ARGS
|
|
|
|
- name: Push updated JSON to GitHub docs repo
|
|
run: |
|
|
cd docs
|
|
git config --global user.name "GitHub Action"
|
|
git config --global user.email "action@github.com"
|
|
git checkout gh-pages
|
|
git add docs/"$(basename $JSON_FILE)"
|
|
git commit -m "Update $(basename $JSON_FILE) after recompiling model" || echo "No changes to commit"
|
|
git push origin gh-pages
|