mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-08-23 04:33:48 +08:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a9b205f7ea | |||
| 6cf172a26b | |||
| b01c106f3f | |||
| 737a6c4236 | |||
| 86cd1b238d | |||
| 772e62127e | |||
| e7a3ea1b32 | |||
| 87af129090 | |||
| f6cf1336ef | |||
| 51046dd7fd | |||
| 2c85f29a0b | |||
| 68af0c4a17 |
@@ -29,11 +29,11 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
target: /^(?!master$).*/
|
target: /^(?!master-tici$).*/
|
||||||
exclude: /sunnypilot:.*/
|
exclude: /sunnypilot:.*/
|
||||||
change-to: ${{ github.base_ref }}
|
change-to: ${{ github.base_ref }}
|
||||||
already-exists-action: close_this
|
already-exists-action: close_this
|
||||||
already-exists-comment: "Your PR should be made against the `master` branch"
|
already-exists-comment: "Your PR should be made against the `master-tici` branch"
|
||||||
|
|
||||||
update-pr-labels:
|
update-pr-labels:
|
||||||
name: Update fork's PR Labels
|
name: Update fork's PR Labels
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
BASE_IMAGE: sunnypilot-base
|
BASE_IMAGE: sunnypilot-tici-base
|
||||||
DOCKER_REGISTRY: ghcr.io/sunnypilot
|
DOCKER_REGISTRY: ghcr.io/sunnypilot
|
||||||
RUN: docker run --shm-size 2G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $DOCKER_REGISTRY/$BASE_IMAGE:latest /bin/bash -c
|
RUN: docker run --shm-size 2G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $DOCKER_REGISTRY/$BASE_IMAGE:latest /bin/bash -c
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ name: cereal validation
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master-tici
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- 'cereal/**'
|
- 'cereal/**'
|
||||||
@@ -16,7 +16,7 @@ on:
|
|||||||
type: string
|
type: string
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: cereal-validation-ci-run-${{ inputs.run_number }}-${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
group: cereal-validation-ci-run-${{ inputs.run_number }}-${{ github.event_name == 'push' && github.ref == 'refs/heads/master-tici' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix: ${{fromJSON(needs.setup.outputs.ci_runs)}}
|
matrix: ${{fromJSON(needs.setup.outputs.ci_runs)}}
|
||||||
uses: sunnypilot/sunnypilot/.github/workflows/ci_weekly_run.yaml@master
|
uses: sunnypilot/sunnypilot/.github/workflows/ci_weekly_run.yaml@master-tici
|
||||||
with:
|
with:
|
||||||
run_number: ${{ matrix.run_number }}
|
run_number: ${{ matrix.run_number }}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
selfdrive_tests:
|
selfdrive_tests:
|
||||||
uses: sunnypilot/sunnypilot/.github/workflows/selfdrive_tests.yaml@master
|
uses: sunnypilot/sunnypilot/.github/workflows/selfdrive_tests.yaml@master-tici
|
||||||
with:
|
with:
|
||||||
run_number: ${{ inputs.run_number }}
|
run_number: ${{ inputs.run_number }}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ runs:
|
|||||||
scons -j$(nproc) --cache-populate"
|
scons -j$(nproc) --cache-populate"
|
||||||
- name: Save scons cache
|
- name: Save scons cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@v4
|
||||||
if: github.ref == 'refs/heads/master'
|
if: github.ref == 'refs/heads/master-tici'
|
||||||
with:
|
with:
|
||||||
path: .ci_cache/scons_cache
|
path: .ci_cache/scons_cache
|
||||||
key: scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
|
key: scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ name: docs
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master-tici
|
||||||
pull_request:
|
pull_request:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
@@ -12,7 +12,7 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
concurrency:
|
concurrency:
|
||||||
group: docs-tests-ci-run-${{ inputs.run_number }}-${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
group: docs-tests-ci-run-${{ inputs.run_number }}-${{ github.event_name == 'push' && github.ref == 'refs/heads/master-tici' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -35,13 +35,13 @@ jobs:
|
|||||||
|
|
||||||
# Push to docs.comma.ai
|
# Push to docs.comma.ai
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
if: github.ref == 'refs/heads/master' && github.repository == 'sunnypilot/sunnypilot'
|
if: github.ref == 'refs/heads/master-tici' && github.repository == 'sunnypilot/sunnypilot'
|
||||||
with:
|
with:
|
||||||
path: openpilot-docs
|
path: openpilot-docs
|
||||||
ssh-key: ${{ secrets.OPENPILOT_DOCS_KEY }}
|
ssh-key: ${{ secrets.OPENPILOT_DOCS_KEY }}
|
||||||
repository: sunnypilot/sunnypilot-docs
|
repository: sunnypilot/sunnypilot-docs
|
||||||
- name: Push
|
- name: Push
|
||||||
if: github.ref == 'refs/heads/master' && github.repository == 'sunnypilot/sunnypilot'
|
if: github.ref == 'refs/heads/master-tici' && github.repository == 'sunnypilot/sunnypilot'
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ jobs:
|
|||||||
if: ${{ github.event_name != 'workflow_dispatch' }}
|
if: ${{ github.event_name != 'workflow_dispatch' }}
|
||||||
uses: lewagon/wait-on-check-action@ccfb013c15c8afb7bf2b7c028fb74dc5a068cccc
|
uses: lewagon/wait-on-check-action@ccfb013c15c8afb7bf2b7c028fb74dc5a068cccc
|
||||||
with:
|
with:
|
||||||
ref: master
|
ref: master-tici
|
||||||
wait-interval: 30
|
wait-interval: 30
|
||||||
running-workflow-name: 'build prebuilt'
|
running-workflow-name: 'build prebuilt'
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
check-regexp: ^((?!.*(build master-ci).*).)*$
|
check-regexp: ^((?!.*(build __nightly).*).)*$
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
if: False
|
||||||
steps:
|
steps:
|
||||||
- uses: release-drafter/release-drafter@v6
|
- uses: release-drafter/release-drafter@v6
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
ImageOS: ubuntu24
|
ImageOS: ubuntu24
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/sunnypilot/sunnypilot-base:latest
|
image: ghcr.io/sunnypilot/sunnypilot-tici-base:latest
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'sunnypilot/sunnypilot'
|
if: github.repository == 'sunnypilot/sunnypilot'
|
||||||
permissions:
|
permissions:
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
if: ${{ github.event_name == 'schedule' }}
|
if: ${{ github.event_name == 'schedule' }}
|
||||||
uses: lewagon/wait-on-check-action@ccfb013c15c8afb7bf2b7c028fb74dc5a068cccc
|
uses: lewagon/wait-on-check-action@ccfb013c15c8afb7bf2b7c028fb74dc5a068cccc
|
||||||
with:
|
with:
|
||||||
ref: master
|
ref: master-tici
|
||||||
wait-interval: 30
|
wait-interval: 30
|
||||||
running-workflow-name: 'build __nightly'
|
running-workflow-name: 'build __nightly'
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
BASE_IMAGE: sunnypilot-base
|
BASE_IMAGE: sunnypilot-tici-base
|
||||||
BUILD: release/ci/docker_build_sp.sh base
|
BUILD: release/ci/docker_build_sp.sh base
|
||||||
RUN: docker run --shm-size 2G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e CI=1 -e PYTHONWARNINGS=error -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c
|
RUN: docker run --shm-size 2G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e CI=1 -e PYTHONWARNINGS=error -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
title: "[bot] Update translations"
|
title: "[bot] Update translations"
|
||||||
body: "Automatic PR from repo-maintenance -> update_translations"
|
body: "Automatic PR from repo-maintenance -> update_translations"
|
||||||
branch: "update-translations"
|
branch: "update-translations"
|
||||||
base: "master"
|
base: "master-tici"
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
labels: bot
|
labels: bot
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ jobs:
|
|||||||
name: package_updates
|
name: package_updates
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/sunnypilot/sunnypilot-base:latest
|
image: ghcr.io/sunnypilot/sunnypilot-tici-base:latest
|
||||||
if: github.repository == 'sunnypilot/sunnypilot'
|
if: github.repository == 'sunnypilot/sunnypilot'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -68,7 +68,7 @@ jobs:
|
|||||||
commit-message: Update Python packages
|
commit-message: Update Python packages
|
||||||
title: '[bot] Update Python packages'
|
title: '[bot] Update Python packages'
|
||||||
branch: auto-package-updates
|
branch: auto-package-updates
|
||||||
base: master
|
base: master-tici
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
body: 'Automatic PR from repo-maintenance -> package_updates'
|
body: 'Automatic PR from repo-maintenance -> package_updates'
|
||||||
labels: bot
|
labels: bot
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ name: selfdrive
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master-tici
|
||||||
pull_request:
|
pull_request:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
@@ -14,12 +14,12 @@ on:
|
|||||||
type: string
|
type: string
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: selfdrive-tests-ci-run-${{ inputs.run_number }}-${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
group: selfdrive-tests-ci-run-${{ inputs.run_number }}-${{ github.event_name == 'push' && github.ref == 'refs/heads/master-tici' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PYTHONWARNINGS: error
|
PYTHONWARNINGS: error
|
||||||
BASE_IMAGE: sunnypilot-base
|
BASE_IMAGE: sunnypilot-tici-base
|
||||||
AZURE_TOKEN: ${{ secrets.AZURE_COMMADATACI_OPENPILOTCI_TOKEN }}
|
AZURE_TOKEN: ${{ secrets.AZURE_COMMADATACI_OPENPILOTCI_TOKEN }}
|
||||||
|
|
||||||
DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }}
|
DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -68,10 +68,10 @@ jobs:
|
|||||||
if: github.repository == 'sunnypilot/sunnypilot'
|
if: github.repository == 'sunnypilot/sunnypilot'
|
||||||
timeout-minutes: 3
|
timeout-minutes: 3
|
||||||
run: |
|
run: |
|
||||||
if [ "${{ github.ref }}" != "refs/heads/master" ]; then
|
if [ "${{ github.ref }}" != "refs/heads/master-tici" ]; then
|
||||||
git fetch origin master:refs/remotes/origin/master
|
git fetch origin master-tici:refs/remotes/origin/master-tici
|
||||||
|
|
||||||
SUBMODULE_PATHS=$(git diff origin/master HEAD --name-only | grep -E '^[^/]+$' | while read path; do
|
SUBMODULE_PATHS=$(git diff origin/master-tici HEAD --name-only | grep -E '^[^/]+$' | while read path; do
|
||||||
if git ls-files --stage "$path" | grep -q "^160000"; then
|
if git ls-files --stage "$path" | grep -q "^160000"; then
|
||||||
echo "$path"
|
echo "$path"
|
||||||
fi
|
fi
|
||||||
@@ -97,7 +97,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Setup docker push
|
- name: Setup docker push
|
||||||
if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'sunnypilot/sunnypilot'
|
if: github.ref == 'refs/heads/master-tici' && github.event_name != 'pull_request' && github.repository == 'sunnypilot/sunnypilot'
|
||||||
run: |
|
run: |
|
||||||
echo "PUSH_IMAGE=true" >> "$GITHUB_ENV"
|
echo "PUSH_IMAGE=true" >> "$GITHUB_ENV"
|
||||||
$DOCKER_LOGIN
|
$DOCKER_LOGIN
|
||||||
@@ -130,7 +130,7 @@ jobs:
|
|||||||
HOMEBREW_DISPLAY_INSTALL_TIMES: 1
|
HOMEBREW_DISPLAY_INSTALL_TIMES: 1
|
||||||
- name: Save Homebrew cache
|
- name: Save Homebrew cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@v4
|
||||||
if: github.ref == 'refs/heads/master'
|
if: github.ref == 'refs/heads/master-tici'
|
||||||
with:
|
with:
|
||||||
path: ~/Library/Caches/Homebrew
|
path: ~/Library/Caches/Homebrew
|
||||||
key: brew-macos-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
|
key: brew-macos-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
|
||||||
@@ -148,7 +148,7 @@ jobs:
|
|||||||
run: . .venv/bin/activate && scons -j$(nproc)
|
run: . .venv/bin/activate && scons -j$(nproc)
|
||||||
- name: Save scons cache
|
- name: Save scons cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@v4
|
||||||
if: github.ref == 'refs/heads/master'
|
if: github.ref == 'refs/heads/master-tici'
|
||||||
with:
|
with:
|
||||||
path: /tmp/scons_cache
|
path: /tmp/scons_cache
|
||||||
key: scons-${{ runner.arch }}-macos-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
|
key: scons-${{ runner.arch }}-macos-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
|
||||||
@@ -307,5 +307,5 @@ jobs:
|
|||||||
- name: Upload Test Report
|
- name: Upload Test Report
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: report-${{ inputs.run_number || '1' }}-${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && 'master' || github.event.number }}
|
name: report-${{ inputs.run_number || '1' }}-${{ github.event_name == 'push' && github.ref == 'refs/heads/master-tici' && 'master-tici' || github.event.number }}
|
||||||
path: selfdrive/ui/tests/test_ui/report_1/screenshots
|
path: selfdrive/ui/tests/test_ui/report_1/screenshots
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ on:
|
|||||||
upstream_branch:
|
upstream_branch:
|
||||||
description: 'Upstream branch to build from'
|
description: 'Upstream branch to build from'
|
||||||
required: true
|
required: true
|
||||||
default: 'master'
|
default: 'master-tici'
|
||||||
type: string
|
type: string
|
||||||
custom_name:
|
custom_name:
|
||||||
description: 'Custom name for the model (no date, only name)'
|
description: 'Custom name for the model (no date, only name)'
|
||||||
@@ -35,7 +35,7 @@ on:
|
|||||||
upstream_branch:
|
upstream_branch:
|
||||||
description: 'Upstream branch to build from'
|
description: 'Upstream branch to build from'
|
||||||
required: true
|
required: true
|
||||||
default: 'master'
|
default: 'master-tici'
|
||||||
type: string
|
type: string
|
||||||
custom_name:
|
custom_name:
|
||||||
description: 'Custom name for the model (no date, only name)'
|
description: 'Custom name for the model (no date, only name)'
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ env:
|
|||||||
PUBLIC_REPO_URL: "https://github.com/sunnypilot/sunnypilot"
|
PUBLIC_REPO_URL: "https://github.com/sunnypilot/sunnypilot"
|
||||||
|
|
||||||
# Branch configurations
|
# Branch configurations
|
||||||
STAGING_SOURCE_BRANCH: 'master'
|
STAGING_C3_SOURCE_BRANCH: 'master-tici' # vars.STAGING_C3_SOURCE_BRANCH could be used, set on repo settings.
|
||||||
|
|
||||||
# Runtime configuration
|
# Runtime configuration
|
||||||
SOURCE_BRANCH: "${{ github.head_ref || github.ref_name }}"
|
SOURCE_BRANCH: "${{ github.head_ref || github.ref_name }}"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master, master-dev ]
|
branches: [ master-tici ]
|
||||||
tags: [ 'release/*' ]
|
tags: [ 'release/*' ]
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [ labeled ]
|
types: [ labeled ]
|
||||||
@@ -138,7 +138,7 @@ jobs:
|
|||||||
# for security. Only caches from the default branch are shared across all builds. This is by design and cannot be overridden.
|
# for security. Only caches from the default branch are shared across all builds. This is by design and cannot be overridden.
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
scons-${{ runner.os }}-${{ runner.arch }}-${{ env.SOURCE_BRANCH }}
|
scons-${{ runner.os }}-${{ runner.arch }}-${{ env.SOURCE_BRANCH }}
|
||||||
scons-${{ runner.os }}-${{ runner.arch }}-${{ env.STAGING_SOURCE_BRANCH }}
|
scons-${{ runner.os }}-${{ runner.arch }}-${{ env.STAGING_C3_SOURCE_BRANCH }}
|
||||||
scons-${{ runner.os }}-${{ runner.arch }}
|
scons-${{ runner.os }}-${{ runner.arch }}
|
||||||
|
|
||||||
- name: Set environment variables
|
- name: Set environment variables
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
name: Build dev
|
name: Build dev-c3-new
|
||||||
|
|
||||||
env:
|
env:
|
||||||
DEFAULT_SOURCE_BRANCH: "master"
|
DEFAULT_SOURCE_BRANCH: "master-tici"
|
||||||
DEFAULT_TARGET_BRANCH: "master-dev"
|
DEFAULT_TARGET_BRANCH: "master-dev-c3-new"
|
||||||
PR_LABEL: "dev"
|
PR_LABEL: "dev-c3"
|
||||||
LFS_URL: 'https://gitlab.com/sunnypilot/public/sunnypilot-new-lfs.git/info/lfs'
|
LFS_URL: 'https://gitlab.com/sunnypilot/public/sunnypilot-new-lfs.git/info/lfs'
|
||||||
LFS_PUSH_URL: 'ssh://git@gitlab.com/sunnypilot/public/sunnypilot-new-lfs.git'
|
LFS_PUSH_URL: 'ssh://git@gitlab.com/sunnypilot/public/sunnypilot-new-lfs.git'
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master-tici
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [ labeled ]
|
types: [ labeled ]
|
||||||
branches:
|
branches:
|
||||||
- 'master'
|
- 'master-tici'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
source_branch:
|
source_branch:
|
||||||
description: 'Source branch to reset from'
|
description: 'Source branch to reset from'
|
||||||
required: true
|
required: true
|
||||||
default: 'master'
|
default: 'master-tici'
|
||||||
type: string
|
type: string
|
||||||
target_branch:
|
target_branch:
|
||||||
description: 'Target branch to reset and squash into'
|
description: 'Target branch to reset and squash into'
|
||||||
required: true
|
required: true
|
||||||
default: 'master-dev'
|
default: 'master-dev-c3-new'
|
||||||
type: string
|
type: string
|
||||||
cancel_in_progress:
|
cancel_in_progress:
|
||||||
description: 'Cancel any in-progress runs of this workflow'
|
description: 'Cancel any in-progress runs of this workflow'
|
||||||
@@ -40,11 +40,7 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
reset-and-squash:
|
reset-and-squash:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: (
|
if: False
|
||||||
(github.event_name == 'workflow_dispatch')
|
|
||||||
|| (github.event_name == 'push' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch))
|
|
||||||
|| (contains(github.event_name, 'pull_request') && ((github.event.action == 'labeled' && (github.event.label.name == 'dev' || github.event.label.name == 'trust-fork-pr') && contains(github.event.pull_request.labels.*.name, 'dev'))))
|
|
||||||
)
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@@ -55,7 +51,7 @@ jobs:
|
|||||||
uses: ./.github/workflows/wait-for-action # Path to where you place the action
|
uses: ./.github/workflows/wait-for-action # Path to where you place the action
|
||||||
if: (
|
if: (
|
||||||
(github.event_name == 'push' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch))
|
(github.event_name == 'push' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch))
|
||||||
|| (contains(github.event_name, 'pull_request') && ((github.event.action == 'labeled' && (github.event.label.name == 'dev' || github.event.label.name == 'trust-fork-pr') && contains(github.event.pull_request.labels.*.name, 'dev'))))
|
|| (contains(github.event_name, 'pull_request') && ((github.event.action == 'labeled' && (github.event.label.name == 'dev-c3' || github.event.label.name == 'trust-fork-pr') && contains(github.event.pull_request.labels.*.name, 'dev-c3'))))
|
||||||
)
|
)
|
||||||
with:
|
with:
|
||||||
workflow: selfdrive_tests.yaml # The workflow file to monitor
|
workflow: selfdrive_tests.yaml # The workflow file to monitor
|
||||||
@@ -118,8 +114,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
# Use GitHub API to get PRs with specific label, ordered by creation date
|
# Use GitHub API to get PRs with specific label, ordered by creation date
|
||||||
PR_LIST=$(gh api graphql -f query='
|
PR_LIST=$(gh api graphql -f query='
|
||||||
query($search_query:String!) {
|
query($label:String!) {
|
||||||
search(query: $search_query, type:ISSUE, first:100) {
|
search(query: $label, type:ISSUE, first:100) {
|
||||||
nodes {
|
nodes {
|
||||||
... on PullRequest {
|
... on PullRequest {
|
||||||
number
|
number
|
||||||
@@ -149,7 +145,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}' -F search_query="repo:${{ github.repository }} is:pr is:open label:${PR_LABEL},${PR_LABEL}-c3 draft:false sort:created-asc")
|
}' -F label="is:pr is:open label:${PR_LABEL} draft:false sort:created-asc")
|
||||||
|
|
||||||
PR_LIST=${PR_LIST//\'/}
|
PR_LIST=${PR_LIST//\'/}
|
||||||
echo "PR_LIST=${PR_LIST}" >> $GITHUB_OUTPUT
|
echo "PR_LIST=${PR_LIST}" >> $GITHUB_OUTPUT
|
||||||
|
|||||||
@@ -2,19 +2,19 @@ name: "ui preview"
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master-tici
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [assigned, opened, synchronize, reopened, edited]
|
types: [assigned, opened, synchronize, reopened, edited]
|
||||||
branches:
|
branches:
|
||||||
- 'master'
|
- 'master-tici'
|
||||||
paths:
|
paths:
|
||||||
- 'selfdrive/ui/**'
|
- 'selfdrive/ui/**'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
UI_JOB_NAME: "Create UI Report"
|
UI_JOB_NAME: "Create UI Report"
|
||||||
REPORT_NAME: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && 'master' || github.event.number }}
|
REPORT_NAME: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master-tici' && 'master-tici' || github.event.number }}
|
||||||
SHA: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.sha || github.event.pull_request.head.sha }}
|
SHA: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master-tici' && github.sha || github.event.pull_request.head.sha }}
|
||||||
BRANCH_NAME: "openpilot/pr-${{ github.event.number }}"
|
BRANCH_NAME: "openpilot/pr-${{ github.event.number }}"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -55,7 +55,7 @@ jobs:
|
|||||||
name: report-1-${{ env.REPORT_NAME }}
|
name: report-1-${{ env.REPORT_NAME }}
|
||||||
path: ${{ github.workspace }}/pr_ui
|
path: ${{ github.workspace }}/pr_ui
|
||||||
|
|
||||||
- name: Getting master ui
|
- name: Getting master-tici ui
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
repository: sunnypilot/ci-artifacts
|
repository: sunnypilot/ci-artifacts
|
||||||
@@ -63,8 +63,8 @@ jobs:
|
|||||||
path: ${{ github.workspace }}/master_ui
|
path: ${{ github.workspace }}/master_ui
|
||||||
ref: openpilot_master_ui
|
ref: openpilot_master_ui
|
||||||
|
|
||||||
- name: Saving new master ui
|
- name: Saving new master-tici ui
|
||||||
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
|
if: github.ref == 'refs/heads/master-tici' && github.event_name == 'push'
|
||||||
working-directory: ${{ github.workspace }}/master_ui
|
working-directory: ${{ github.workspace }}/master_ui
|
||||||
run: |
|
run: |
|
||||||
git checkout --orphan=new_master_ui
|
git checkout --orphan=new_master_ui
|
||||||
@@ -93,9 +93,9 @@ jobs:
|
|||||||
|
|
||||||
for ((i=0; i<${#A[*]}; i=i+1));
|
for ((i=0; i<${#A[*]}; i=i+1));
|
||||||
do
|
do
|
||||||
# Check if the master file exists
|
# Check if the master-tici file exists
|
||||||
if [ ! -f "${{ github.workspace }}/master_ui/${A[$i]}.png" ]; then
|
if [ ! -f "${{ github.workspace }}/master_ui/${A[$i]}.png" ]; then
|
||||||
# This is a new file in PR UI that doesn't exist in master
|
# This is a new file in PR UI that doesn't exist in master-tici
|
||||||
DIFF="${DIFF}<details open>"
|
DIFF="${DIFF}<details open>"
|
||||||
DIFF="${DIFF}<summary>${A[$i]} : \$\${\\color{cyan}\\text{NEW}}\$\$</summary>"
|
DIFF="${DIFF}<summary>${A[$i]} : \$\${\\color{cyan}\\text{NEW}}\$\$</summary>"
|
||||||
DIFF="${DIFF}<table>"
|
DIFF="${DIFF}<table>"
|
||||||
@@ -118,7 +118,7 @@ jobs:
|
|||||||
DIFF="${DIFF}<table>"
|
DIFF="${DIFF}<table>"
|
||||||
|
|
||||||
DIFF="${DIFF}<tr>"
|
DIFF="${DIFF}<tr>"
|
||||||
DIFF="${DIFF} <td> master <img src=\"https://raw.githubusercontent.com/sunnypilot/ci-artifacts/${{ env.BRANCH_NAME }}/${A[$i]}_master_ref.png\"> </td>"
|
DIFF="${DIFF} <td> master-tici <img src=\"https://raw.githubusercontent.com/sunnypilot/ci-artifacts/${{ env.BRANCH_NAME }}/${A[$i]}_master_ref.png\"> </td>"
|
||||||
DIFF="${DIFF} <td> proposed <img src=\"https://raw.githubusercontent.com/sunnypilot/ci-artifacts/${{ env.BRANCH_NAME }}/${A[$i]}.png\"> </td>"
|
DIFF="${DIFF} <td> proposed <img src=\"https://raw.githubusercontent.com/sunnypilot/ci-artifacts/${{ env.BRANCH_NAME }}/${A[$i]}.png\"> </td>"
|
||||||
DIFF="${DIFF}</tr>"
|
DIFF="${DIFF}</tr>"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM ghcr.io/sunnypilot/sunnypilot-base:latest
|
FROM ghcr.io/sunnypilot/sunnypilot-tici-base:latest
|
||||||
|
|
||||||
ENV PYTHONUNBUFFERED=1
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ https://docs.sunnypilot.ai/ is your one stop shop for everything from features t
|
|||||||
Detailed instructions for [how to mount the device in a car](https://comma.ai/setup).
|
Detailed instructions for [how to mount the device in a car](https://comma.ai/setup).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
Please refer to [Recommended Branches](#-recommended-branches) to find your preferred/supported branch. This guide will assume you want to install the latest `staging-c3-new` branch.
|
Please refer to [Recommended Branches](#-recommended-branches) to find your preferred/supported branch. This guide will assume you want to install the latest `staging-tici` branch.
|
||||||
|
|
||||||
### If you want to use our newest branches (our rewrite)
|
### If you want to use our newest branches (our rewrite)
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
@@ -31,25 +31,24 @@ Please refer to [Recommended Branches](#-recommended-branches) to find your pref
|
|||||||
* sunnypilot not installed or you installed a version before 0.8.17?
|
* sunnypilot not installed or you installed a version before 0.8.17?
|
||||||
1. [Factory reset/uninstall](https://github.com/commaai/openpilot/wiki/FAQ#how-can-i-reset-the-device) the previous software if you have another software/fork installed.
|
1. [Factory reset/uninstall](https://github.com/commaai/openpilot/wiki/FAQ#how-can-i-reset-the-device) the previous software if you have another software/fork installed.
|
||||||
2. After factory reset/uninstall and upon reboot, select `Custom Software` when given the option.
|
2. After factory reset/uninstall and upon reboot, select `Custom Software` when given the option.
|
||||||
3. Input the installation URL per [Recommended Branches](#-recommended-branches). Example: ```https://staging-c3-new.sunnypilot.ai```.
|
3. Input the installation URL per [Recommended Branches](#-recommended-branches). Example: ```https://staging-tici.sunnypilot.ai```.
|
||||||
4. Complete the rest of the installation following the onscreen instructions.
|
4. Complete the rest of the installation following the onscreen instructions.
|
||||||
|
|
||||||
* sunnypilot already installed and you installed a version after 0.8.17?
|
* sunnypilot already installed and you installed a version after 0.8.17?
|
||||||
1. On the comma three, go to `Settings` ▶️ `Software`.
|
1. On the comma three, go to `Settings` ▶️ `Software`.
|
||||||
2. At the `Download` option, press `CHECK`. This will fetch the list of latest branches from sunnypilot.
|
2. At the `Download` option, press `CHECK`. This will fetch the list of latest branches from sunnypilot.
|
||||||
3. At the `Target Branch` option, press `SELECT` to open the Target Branch selector.
|
3. At the `Target Branch` option, press `SELECT` to open the Target Branch selector.
|
||||||
4. Scroll to select the desired branch per Recommended Branches (see below). Example: `staging-c3-new`
|
4. Scroll to select the desired branch per Recommended Branches (see below). Example: `staging-tici`
|
||||||
|
|
||||||
|
|
||||||
| Branch | Installation URL |
|
| Branch | Installation URL |
|
||||||
|:----------------:|:---------------------------------------------:|
|
|:---------------:|:---------------------------------------------:|
|
||||||
| `staging-c3-new` | `https://staging-c3-new.sunnypilot.ai` |
|
| `staging-tici` | `https://staging-tici.sunnypilot.ai` |
|
||||||
| `dev-c3-new` | `https://dev-c3-new.sunnypilot.ai` |
|
| `custom-branch` | `https://install.sunnypilot.ai/{branch_name}` |
|
||||||
| `custom-branch` | `https://install.sunnypilot.ai/{branch_name}` |
|
| `release-tici` | **Not yet available**. |
|
||||||
| `release-c3-new` | **Not yet available**. |
|
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> You can use sunnypilot/targetbranch as an install URL. Example: 'sunnypilot/staging-c3-new'.
|
> You can use sunnypilot/targetbranch as an install URL. Example: 'sunnypilot/staging-tici'.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Do you require further assistance with software installation? Join the [sunnypilot Discord server](https://discord.sunnypilot.com) and message us in the `#installation-help` channel.
|
> Do you require further assistance with software installation? Join the [sunnypilot Discord server](https://discord.sunnypilot.com) and message us in the `#installation-help` channel.
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
|
|||||||
{"Offroad_NeosUpdate", {CLEAR_ON_MANAGER_START, JSON}},
|
{"Offroad_NeosUpdate", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
{"Offroad_NoFirmware", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
{"Offroad_NoFirmware", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
||||||
{"Offroad_Recalibration", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
{"Offroad_Recalibration", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
||||||
|
{"Offroad_StorageMissing", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
{"Offroad_TemperatureTooHigh", {CLEAR_ON_MANAGER_START, JSON}},
|
{"Offroad_TemperatureTooHigh", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
{"Offroad_UnregisteredHardware", {CLEAR_ON_MANAGER_START, JSON}},
|
{"Offroad_UnregisteredHardware", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
{"Offroad_UpdateFailed", {CLEAR_ON_MANAGER_START, JSON}},
|
{"Offroad_UpdateFailed", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ All of these are examples of good PRs:
|
|||||||
### First contribution
|
### First contribution
|
||||||
|
|
||||||
[Projects / openpilot bounties](https://github.com/orgs/commaai/projects/26/views/1?pane=info) is the best place to get started and goes in-depth on what's expected when working on a bounty.
|
[Projects / openpilot bounties](https://github.com/orgs/commaai/projects/26/views/1?pane=info) is the best place to get started and goes in-depth on what's expected when working on a bounty.
|
||||||
There's lot of bounties that don't require a comma 3X or a car.
|
There's lot of bounties that don't require a comma 3/3X or a car.
|
||||||
|
|
||||||
## Pull Requests
|
## Pull Requests
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
# connect to a comma 3X
|
# connect to a comma 3/3X
|
||||||
|
|
||||||
A comma 3X is a normal [Linux](https://github.com/commaai/agnos-builder) computer that exposes [SSH](https://wiki.archlinux.org/title/Secure_Shell) and a [serial console](https://wiki.archlinux.org/title/Working_with_the_serial_console).
|
A comma 3/3X is a normal [Linux](https://github.com/commaai/agnos-builder) computer that exposes [SSH](https://wiki.archlinux.org/title/Secure_Shell) and a [serial console](https://wiki.archlinux.org/title/Working_with_the_serial_console).
|
||||||
|
|
||||||
## Serial Console
|
## Serial Console
|
||||||
|
|
||||||
On both the comma three and 3X, the serial console is accessible from the main OBD-C port.
|
On both the comma three and 3X, the serial console is accessible from the main OBD-C port.
|
||||||
Connect the comma 3X to your computer with a normal USB C cable, or use a [comma serial](https://comma.ai/shop/comma-serial) for steady 12V power.
|
Connect the comma 3/3X to your computer with a normal USB C cable, or use a [comma serial](https://comma.ai/shop/comma-serial) for steady 12V power.
|
||||||
|
|
||||||
On the comma three, the serial console is exposed through a UART-to-USB chip, and `tools/scripts/serial.sh` can be used to connect.
|
On the comma three, the serial console is exposed through a UART-to-USB chip, and `tools/scripts/serial.sh` can be used to connect.
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ In order to use ADB on your device, you'll need to perform the following steps u
|
|||||||
* Here's an example command for connecting to your device using its tethered connection: `adb connect 192.168.43.1:5555`
|
* Here's an example command for connecting to your device using its tethered connection: `adb connect 192.168.43.1:5555`
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> The default port for ADB is 5555 on the comma 3X.
|
> The default port for ADB is 5555 on the comma 3/3X.
|
||||||
|
|
||||||
For more info on ADB, see the [Android Debug Bridge (ADB) documentation](https://developer.android.com/tools/adb).
|
For more info on ADB, see the [Android Debug Bridge (ADB) documentation](https://developer.android.com/tools/adb).
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Replaying is a critical tool for openpilot development and debugging.
|
|||||||
Just run `tools/replay/replay --demo`.
|
Just run `tools/replay/replay --demo`.
|
||||||
|
|
||||||
## Replaying CAN data
|
## Replaying CAN data
|
||||||
*Hardware required: jungle and comma 3X*
|
*Hardware required: jungle and comma 3/3X*
|
||||||
|
|
||||||
1. Connect your PC to a jungle.
|
1. Connect your PC to a jungle.
|
||||||
2.
|
2.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
In 30 minutes, we'll get an openpilot development environment set up on your computer and make some changes to openpilot's UI.
|
In 30 minutes, we'll get an openpilot development environment set up on your computer and make some changes to openpilot's UI.
|
||||||
|
|
||||||
And if you have a comma 3X, we'll deploy the change to your device for testing.
|
And if you have a comma 3/3X, we'll deploy the change to your device for testing.
|
||||||
|
|
||||||
## 1. Set up your development environment
|
## 1. Set up your development environment
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ nav:
|
|||||||
- What is openpilot?: getting-started/what-is-openpilot.md
|
- What is openpilot?: getting-started/what-is-openpilot.md
|
||||||
- How-to:
|
- How-to:
|
||||||
- Turn the speed blue: how-to/turn-the-speed-blue.md
|
- Turn the speed blue: how-to/turn-the-speed-blue.md
|
||||||
- Connect to a comma 3X: how-to/connect-to-comma.md
|
- Connect to a comma 3/3X: how-to/connect-to-comma.md
|
||||||
# - Make your first pull request: how-to/make-first-pr.md
|
# - Make your first pull request: how-to/make-first-pr.md
|
||||||
#- Replay a drive: how-to/replay-a-drive.md
|
#- Replay a drive: how-to/replay-a-drive.md
|
||||||
- Concepts:
|
- Concepts:
|
||||||
|
|||||||
+1
-1
Submodule opendbc_repo updated: b592ecdd3b...970fc577dd
+1
-1
Submodule panda updated: 69ab12ee2a...2a7914fa5a
@@ -31,13 +31,25 @@ while read hash submodule ref; do
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
git -C $submodule fetch --depth 100 origin master
|
# Check against master-tici for specific submodules, master for others
|
||||||
git -C $submodule branch -r --contains $hash | grep "origin/master"
|
if [ "$submodule" = "opendbc_repo" ] || [ "$submodule" = "panda" ]; then
|
||||||
if [ "$?" -eq 0 ]; then
|
git -C $submodule fetch --depth 100 origin master-tici
|
||||||
echo "$submodule ok"
|
remote_hash=$(git -C $submodule rev-parse FETCH_HEAD)
|
||||||
|
if git -C $submodule merge-base --is-ancestor $hash $remote_hash; then
|
||||||
|
echo "$submodule ok"
|
||||||
|
else
|
||||||
|
echo "$submodule: $hash is not on master-tici"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "$submodule: $hash is not on master"
|
git -C $submodule fetch --depth 100 origin master
|
||||||
exit 1
|
git -C $submodule branch -r --contains $hash | grep "origin/master"
|
||||||
|
if [ "$?" -eq 0 ]; then
|
||||||
|
echo "$submodule ok"
|
||||||
|
else
|
||||||
|
echo "$submodule: $hash is not on master"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done <<< $(git submodule status --recursive)
|
done <<< $(git submodule status --recursive)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
if [ "$1" = "base" ]; then
|
if [ "$1" = "base" ]; then
|
||||||
export DOCKER_IMAGE=sunnypilot-base
|
export DOCKER_IMAGE=sunnypilot-tici-base
|
||||||
export DOCKER_FILE=Dockerfile.sunnypilot_base
|
export DOCKER_FILE=Dockerfile.sunnypilot_base
|
||||||
elif [ "$1" = "prebuilt" ]; then
|
elif [ "$1" = "prebuilt" ]; then
|
||||||
export DOCKER_IMAGE=sunnypilot-prebuilt
|
export DOCKER_IMAGE=sunnypilot-tici-prebuilt
|
||||||
export DOCKER_FILE=Dockerfile.sunnypilot
|
export DOCKER_FILE=Dockerfile.sunnypilot
|
||||||
else
|
else
|
||||||
echo "Invalid docker build image: '$1'"
|
echo "Invalid docker build image: '$1'"
|
||||||
|
|||||||
@@ -99,6 +99,11 @@ def main() -> None:
|
|||||||
cloudlog.event("pandad.flash_and_connect", count=count)
|
cloudlog.event("pandad.flash_and_connect", count=count)
|
||||||
params.remove("PandaSignatures")
|
params.remove("PandaSignatures")
|
||||||
|
|
||||||
|
# TODO: remove this in the next AGNOS
|
||||||
|
# wait until USB is up before counting
|
||||||
|
if time.monotonic() < 60.:
|
||||||
|
no_internal_panda_count = 0
|
||||||
|
|
||||||
# Handle missing internal panda
|
# Handle missing internal panda
|
||||||
if no_internal_panda_count > 0:
|
if no_internal_panda_count > 0:
|
||||||
if no_internal_panda_count == 3:
|
if no_internal_panda_count == 3:
|
||||||
|
|||||||
Executable
BIN
Binary file not shown.
@@ -22,6 +22,8 @@ class TestPandad:
|
|||||||
if len(Panda.list()) == 0:
|
if len(Panda.list()) == 0:
|
||||||
self._run_test(60)
|
self._run_test(60)
|
||||||
|
|
||||||
|
self.spi = HARDWARE.get_device_type() != 'tici'
|
||||||
|
|
||||||
def teardown_method(self):
|
def teardown_method(self):
|
||||||
managed_processes['pandad'].stop()
|
managed_processes['pandad'].stop()
|
||||||
|
|
||||||
@@ -104,9 +106,11 @@ class TestPandad:
|
|||||||
# - 0.2s pandad -> pandad
|
# - 0.2s pandad -> pandad
|
||||||
# - plus some buffer
|
# - plus some buffer
|
||||||
print("startup times", ts, sum(ts) / len(ts))
|
print("startup times", ts, sum(ts) / len(ts))
|
||||||
assert 0.1 < (sum(ts)/len(ts)) < 0.7
|
assert 0.1 < (sum(ts)/len(ts)) < (0.7 if self.spi else 5.0)
|
||||||
|
|
||||||
def test_protocol_version_check(self):
|
def test_protocol_version_check(self):
|
||||||
|
if not self.spi:
|
||||||
|
pytest.skip("SPI test")
|
||||||
# flash old fw
|
# flash old fw
|
||||||
fn = os.path.join(HERE, "bootstub.panda_h7_spiv0.bin")
|
fn = os.path.join(HERE, "bootstub.panda_h7_spiv0.bin")
|
||||||
self._flash_bootstub_and_test(fn, expect_mismatch=True)
|
self._flash_bootstub_and_test(fn, expect_mismatch=True)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import random
|
|||||||
|
|
||||||
import cereal.messaging as messaging
|
import cereal.messaging as messaging
|
||||||
from cereal.services import SERVICE_LIST
|
from cereal.services import SERVICE_LIST
|
||||||
|
from openpilot.system.hardware import HARDWARE
|
||||||
from openpilot.selfdrive.test.helpers import with_processes
|
from openpilot.selfdrive.test.helpers import with_processes
|
||||||
from openpilot.selfdrive.pandad.tests.test_pandad_loopback import setup_pandad, send_random_can_messages
|
from openpilot.selfdrive.pandad.tests.test_pandad_loopback import setup_pandad, send_random_can_messages
|
||||||
|
|
||||||
@@ -15,6 +16,8 @@ JUNGLE_SPAM = "JUNGLE_SPAM" in os.environ
|
|||||||
class TestBoarddSpi:
|
class TestBoarddSpi:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_class(cls):
|
def setup_class(cls):
|
||||||
|
if HARDWARE.get_device_type() == 'tici':
|
||||||
|
pytest.skip("only for spi pandas")
|
||||||
os.environ['STARTED'] = '1'
|
os.environ['STARTED'] = '1'
|
||||||
os.environ['SPI_ERR_PROB'] = '0.001'
|
os.environ['SPI_ERR_PROB'] = '0.001'
|
||||||
if not JUNGLE_SPAM:
|
if not JUNGLE_SPAM:
|
||||||
|
|||||||
@@ -29,6 +29,10 @@
|
|||||||
"text": "Device failed to register with the comma.ai backend. It will not connect or upload to comma.ai servers, and receives no support from comma.ai. If this is a device purchased at comma.ai/shop, open a ticket at https://comma.ai/support.",
|
"text": "Device failed to register with the comma.ai backend. It will not connect or upload to comma.ai servers, and receives no support from comma.ai. If this is a device purchased at comma.ai/shop, open a ticket at https://comma.ai/support.",
|
||||||
"severity": 1
|
"severity": 1
|
||||||
},
|
},
|
||||||
|
"Offroad_StorageMissing": {
|
||||||
|
"text": "NVMe drive not mounted.",
|
||||||
|
"severity": 1
|
||||||
|
},
|
||||||
"Offroad_CarUnrecognized": {
|
"Offroad_CarUnrecognized": {
|
||||||
"text": "sunnypilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.",
|
"text": "sunnypilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.",
|
||||||
"severity": 0
|
"severity": 0
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ from openpilot.selfdrive.selfdrived.helpers import ExcessiveActuationCheck
|
|||||||
from openpilot.selfdrive.selfdrived.state import StateMachine
|
from openpilot.selfdrive.selfdrived.state import StateMachine
|
||||||
from openpilot.selfdrive.selfdrived.alertmanager import AlertManager, set_offroad_alert
|
from openpilot.selfdrive.selfdrived.alertmanager import AlertManager, set_offroad_alert
|
||||||
|
|
||||||
|
from openpilot.system.hardware import HARDWARE
|
||||||
from openpilot.system.version import get_build_metadata
|
from openpilot.system.version import get_build_metadata
|
||||||
|
|
||||||
from openpilot.sunnypilot.mads.mads import ModularAssistiveDrivingSystem
|
from openpilot.sunnypilot.mads.mads import ModularAssistiveDrivingSystem
|
||||||
@@ -135,7 +136,12 @@ class SelfdriveD(CruiseHelper):
|
|||||||
self.state_machine = StateMachine()
|
self.state_machine = StateMachine()
|
||||||
self.rk = Ratekeeper(100, print_delay_threshold=None)
|
self.rk = Ratekeeper(100, print_delay_threshold=None)
|
||||||
|
|
||||||
self.ignored_processes = {'mapd', }
|
# some comma three with NVMe experience NVMe dropouts mid-drive that
|
||||||
|
# cause loggerd to crash on write, so ignore it only on that platform
|
||||||
|
self.ignored_processes = set()
|
||||||
|
nvme_expected = os.path.exists('/dev/nvme0n1') or (not os.path.isfile("/persist/comma/living-in-the-moment"))
|
||||||
|
if HARDWARE.get_device_type() == 'tici' and nvme_expected:
|
||||||
|
self.ignored_processes = {'loggerd', 'mapd'}
|
||||||
|
|
||||||
# Determine startup event
|
# Determine startup event
|
||||||
is_remote = build_metadata.openpilot.comma_remote or build_metadata.openpilot.sunnypilot_remote
|
is_remote = build_metadata.openpilot.comma_remote or build_metadata.openpilot.sunnypilot_remote
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "selfdrive/ui/qt/util.h"
|
#include "selfdrive/ui/qt/util.h"
|
||||||
|
#ifdef SUNNYPILOT
|
||||||
|
#include "selfdrive/ui/sunnypilot/ui.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
void OnroadAlerts::updateState(const UIState &s) {
|
void OnroadAlerts::updateState(const UIState &s) {
|
||||||
Alert a = getAlert(*(s.sm), s.scene.started_frame);
|
Alert a = getAlert(*(s.sm), s.scene.started_frame);
|
||||||
@@ -73,6 +76,12 @@ void OnroadAlerts::paintEvent(QPaintEvent *event) {
|
|||||||
}
|
}
|
||||||
QRect r = QRect(0 + margin, height() - h + margin, width() - margin*2, h - margin*2);
|
QRect r = QRect(0 + margin, height() - h + margin, width() - margin*2, h - margin*2);
|
||||||
|
|
||||||
|
#ifdef SUNNYPILOT
|
||||||
|
const int dev_ui_info = uiStateSP()->scene.dev_ui_info;
|
||||||
|
const int adjustment = dev_ui_info > 1 && alert.size != cereal::SelfdriveState::AlertSize::FULL ? 30 : 0;
|
||||||
|
r = QRect(0 + margin, height() - h + margin - adjustment, width() - margin*2, h - margin*2);
|
||||||
|
#endif
|
||||||
|
|
||||||
QPainter p(this);
|
QPainter p(this);
|
||||||
|
|
||||||
// draw background + gradient
|
// draw background + gradient
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ UI_DELAY = 0.5 # may be slower on CI?
|
|||||||
TEST_ROUTE = "a2a0ccea32023010|2023-07-27--13-01-19"
|
TEST_ROUTE = "a2a0ccea32023010|2023-07-27--13-01-19"
|
||||||
|
|
||||||
STREAMS: list[tuple[VisionStreamType, CameraConfig, bytes]] = []
|
STREAMS: list[tuple[VisionStreamType, CameraConfig, bytes]] = []
|
||||||
OFFROAD_ALERTS = ['Offroad_IsTakingSnapshot', ]
|
OFFROAD_ALERTS = ['Offroad_StorageMissing', 'Offroad_IsTakingSnapshot']
|
||||||
DATA: dict[str, capnp.lib.capnp._DynamicStructBuilder] = dict.fromkeys(
|
DATA: dict[str, capnp.lib.capnp._DynamicStructBuilder] = dict.fromkeys(
|
||||||
["carParams", "deviceState", "pandaStates", "controlsState", "selfdriveState",
|
["carParams", "deviceState", "pandaStates", "controlsState", "selfdriveState",
|
||||||
"liveCalibration", "modelV2", "radarState", "driverMonitoringState", "carState",
|
"liveCalibration", "modelV2", "radarState", "driverMonitoringState", "carState",
|
||||||
|
|||||||
+2
-1
@@ -55,7 +55,8 @@ void update_state(UIState *s) {
|
|||||||
}
|
}
|
||||||
if (sm.updated("wideRoadCameraState")) {
|
if (sm.updated("wideRoadCameraState")) {
|
||||||
auto cam_state = sm["wideRoadCameraState"].getWideRoadCameraState();
|
auto cam_state = sm["wideRoadCameraState"].getWideRoadCameraState();
|
||||||
scene.light_sensor = std::max(100.0f - cam_state.getExposureValPercent(), 0.0f);
|
float scale = (cam_state.getSensor() == cereal::FrameData::ImageSensor::AR0231) ? 6.0f : 1.0f;
|
||||||
|
scene.light_sensor = std::max(100.0f - scale * cam_state.getExposureValPercent(), 0.0f);
|
||||||
} else if (!sm.allAliveAndValid({"wideRoadCameraState"})) {
|
} else if (!sm.allAliveAndValid({"wideRoadCameraState"})) {
|
||||||
scene.light_sensor = -1;
|
scene.light_sensor = -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,7 +105,10 @@ class UIState:
|
|||||||
# Handle wide road camera state updates
|
# Handle wide road camera state updates
|
||||||
if self.sm.updated["wideRoadCameraState"]:
|
if self.sm.updated["wideRoadCameraState"]:
|
||||||
cam_state = self.sm["wideRoadCameraState"]
|
cam_state = self.sm["wideRoadCameraState"]
|
||||||
self.light_sensor = max(100.0 - cam_state.exposureValPercent, 0.0)
|
|
||||||
|
# Scale factor based on sensor type
|
||||||
|
scale = 6.0 if cam_state.sensor == 'ar0231' else 1.0
|
||||||
|
self.light_sensor = max(100.0 - scale * cam_state.exposureValPercent, 0.0)
|
||||||
elif not self.sm.alive["wideRoadCameraState"] or not self.sm.valid["wideRoadCameraState"]:
|
elif not self.sm.alive["wideRoadCameraState"] or not self.sm.valid["wideRoadCameraState"]:
|
||||||
self.light_sensor = -1
|
self.light_sensor = -1
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ typedef enum {
|
|||||||
ISP_BPS_PROCESSED, // fully processed image through the BPS
|
ISP_BPS_PROCESSED, // fully processed image through the BPS
|
||||||
} SpectraOutputType;
|
} SpectraOutputType;
|
||||||
|
|
||||||
// For the comma 3X three camera platform
|
// For the comma 3/3X three camera platform
|
||||||
|
|
||||||
struct CameraConfig {
|
struct CameraConfig {
|
||||||
int camera_num;
|
int camera_num;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import struct
|
|||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
from collections import OrderedDict, namedtuple
|
from collections import OrderedDict, namedtuple
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
import psutil
|
import psutil
|
||||||
|
|
||||||
@@ -341,6 +342,12 @@ def hardware_thread(end_event, hw_queue) -> None:
|
|||||||
show_alert = (not onroad_conditions["device_temp_good"] or not startup_conditions["device_temp_engageable"]) and onroad_conditions["ignition"]
|
show_alert = (not onroad_conditions["device_temp_good"] or not startup_conditions["device_temp_engageable"]) and onroad_conditions["ignition"]
|
||||||
set_offroad_alert_if_changed("Offroad_TemperatureTooHigh", show_alert, extra_text=extra_text)
|
set_offroad_alert_if_changed("Offroad_TemperatureTooHigh", show_alert, extra_text=extra_text)
|
||||||
|
|
||||||
|
# TODO: this should move to TICI.initialize_hardware, but we currently can't import params there
|
||||||
|
if TICI and HARDWARE.get_device_type() == "tici":
|
||||||
|
if not os.path.isfile("/persist/comma/living-in-the-moment"):
|
||||||
|
if not Path("/data/media").is_mount():
|
||||||
|
set_offroad_alert_if_changed("Offroad_StorageMissing", True)
|
||||||
|
|
||||||
# Handle offroad/onroad transition
|
# Handle offroad/onroad transition
|
||||||
should_start = all(onroad_conditions.values())
|
should_start = all(onroad_conditions.values())
|
||||||
if started_ts is None:
|
if started_ts is None:
|
||||||
|
|||||||
@@ -61,6 +61,18 @@ BASE_CONFIG = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
CONFIGS = {
|
CONFIGS = {
|
||||||
|
"tici": [
|
||||||
|
AmpConfig("Right speaker output from right DAC", 0b1, 0x2C, 0, 0b11111111),
|
||||||
|
AmpConfig("Right Speaker Mixer Gain", 0b00, 0x2D, 2, 0b00001100),
|
||||||
|
AmpConfig("Right speaker output volume", 0x1c, 0x3E, 0, 0b00011111),
|
||||||
|
AmpConfig("DAI2 EQ enable", 0b1, 0x49, 1, 0b00000010),
|
||||||
|
|
||||||
|
*configs_from_eq_params(0x84, EQParams(0x274F, 0xC0FF, 0x3BF9, 0x0B3C, 0x1656)),
|
||||||
|
*configs_from_eq_params(0x8E, EQParams(0x1009, 0xC6BF, 0x2952, 0x1C97, 0x30DF)),
|
||||||
|
*configs_from_eq_params(0x98, EQParams(0x0F75, 0xCBE5, 0x0ED2, 0x2528, 0x3E42)),
|
||||||
|
*configs_from_eq_params(0xA2, EQParams(0x091F, 0x3D4C, 0xCE11, 0x1266, 0x2807)),
|
||||||
|
*configs_from_eq_params(0xAC, EQParams(0x0A9E, 0x3F20, 0xE573, 0x0A8B, 0x3A3B)),
|
||||||
|
],
|
||||||
"tizi": [
|
"tizi": [
|
||||||
AmpConfig("Left speaker output from left DAC", 0b1, 0x2B, 0, 0b11111111),
|
AmpConfig("Left speaker output from left DAC", 0b1, 0x2B, 0, 0b11111111),
|
||||||
AmpConfig("Right speaker output from right DAC", 0b1, 0x2C, 0, 0b11111111),
|
AmpConfig("Right speaker output from right DAC", 0b1, 0x2C, 0, 0b11111111),
|
||||||
|
|||||||
@@ -425,6 +425,9 @@ class Tici(HardwareBase):
|
|||||||
|
|
||||||
# pandad core
|
# pandad core
|
||||||
affine_irq(3, "spi_geni") # SPI
|
affine_irq(3, "spi_geni") # SPI
|
||||||
|
if "tici" in self.get_device_type():
|
||||||
|
affine_irq(3, "xhci-hcd:usb3") # aux panda USB (or potentially anything else on USB)
|
||||||
|
affine_irq(3, "xhci-hcd:usb1") # internal panda USB (also modem)
|
||||||
try:
|
try:
|
||||||
pid = subprocess.check_output(["pgrep", "-f", "spi0"], encoding='utf8').strip()
|
pid = subprocess.check_output(["pgrep", "-f", "spi0"], encoding='utf8').strip()
|
||||||
subprocess.call(["sudo", "chrt", "-f", "-p", "1", pid])
|
subprocess.call(["sudo", "chrt", "-f", "-p", "1", pid])
|
||||||
@@ -443,20 +446,22 @@ class Tici(HardwareBase):
|
|||||||
|
|
||||||
cmds = []
|
cmds = []
|
||||||
|
|
||||||
if self.get_device_type() in ("tizi", ):
|
if self.get_device_type() in ("tici", "tizi"):
|
||||||
# clear out old blue prime initial APN
|
# clear out old blue prime initial APN
|
||||||
os.system('mmcli -m any --3gpp-set-initial-eps-bearer-settings="apn="')
|
os.system('mmcli -m any --3gpp-set-initial-eps-bearer-settings="apn="')
|
||||||
|
|
||||||
cmds += [
|
cmds += [
|
||||||
# SIM hot swap
|
|
||||||
'AT+QSIMDET=1,0',
|
|
||||||
'AT+QSIMSTAT=1',
|
|
||||||
|
|
||||||
# configure modem as data-centric
|
# configure modem as data-centric
|
||||||
'AT+QNVW=5280,0,"0102000000000000"',
|
'AT+QNVW=5280,0,"0102000000000000"',
|
||||||
'AT+QNVFW="/nv/item_files/ims/IMS_enable",00',
|
'AT+QNVFW="/nv/item_files/ims/IMS_enable",00',
|
||||||
'AT+QNVFW="/nv/item_files/modem/mmode/ue_usage_setting",01',
|
'AT+QNVFW="/nv/item_files/modem/mmode/ue_usage_setting",01',
|
||||||
]
|
]
|
||||||
|
if self.get_device_type() == "tizi":
|
||||||
|
# SIM hot swap, not routed on tici
|
||||||
|
cmds += [
|
||||||
|
'AT+QSIMDET=1,0',
|
||||||
|
'AT+QSIMSTAT=1',
|
||||||
|
]
|
||||||
elif manufacturer == 'Cavli Inc.':
|
elif manufacturer == 'Cavli Inc.':
|
||||||
cmds += [
|
cmds += [
|
||||||
'AT^SIMSWAP=1', # use SIM slot, instead of internal eSIM
|
'AT^SIMSWAP=1', # use SIM slot, instead of internal eSIM
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# TODO: these are also defined in a header
|
||||||
|
|
||||||
# GPIO pin definitions
|
# GPIO pin definitions
|
||||||
class GPIO:
|
class GPIO:
|
||||||
# both GPIO_STM_RST_N and GPIO_LTE_RST_N are misnamed, they are high to reset
|
# both GPIO_STM_RST_N and GPIO_LTE_RST_N are misnamed, they are high to reset
|
||||||
@@ -24,4 +26,7 @@ class GPIO:
|
|||||||
CAM2_RSTN = 12
|
CAM2_RSTN = 12
|
||||||
|
|
||||||
# Sensor interrupts
|
# Sensor interrupts
|
||||||
|
BMX055_ACCEL_INT = 21
|
||||||
|
BMX055_GYRO_INT = 23
|
||||||
|
BMX055_MAGN_INT = 87
|
||||||
LSM_INT = 84
|
LSM_INT = 84
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from openpilot.system.ui.widgets import Widget
|
|||||||
from openpilot.system.ui.widgets.button import Button, ButtonStyle
|
from openpilot.system.ui.widgets.button import Button, ButtonStyle
|
||||||
from openpilot.system.ui.widgets.label import gui_label, gui_text_box
|
from openpilot.system.ui.widgets.label import gui_label, gui_text_box
|
||||||
|
|
||||||
|
NVME = "/dev/nvme0n1"
|
||||||
USERDATA = "/dev/disk/by-partlabel/userdata"
|
USERDATA = "/dev/disk/by-partlabel/userdata"
|
||||||
TIMEOUT = 3*60
|
TIMEOUT = 3*60
|
||||||
|
|
||||||
@@ -48,6 +49,10 @@ class Reset(Widget):
|
|||||||
if PC:
|
if PC:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Best effort to wipe NVME
|
||||||
|
os.system(f"sudo umount {NVME}")
|
||||||
|
os.system(f"yes | sudo mkfs.ext4 {NVME}")
|
||||||
|
|
||||||
# Removing data and formatting
|
# Removing data and formatting
|
||||||
rm = os.system("sudo rm -rf /data/*")
|
rm = os.system("sudo rm -rf /data/*")
|
||||||
os.system(f"sudo umount {USERDATA}")
|
os.system(f"sudo umount {USERDATA}")
|
||||||
|
|||||||
+2
-2
@@ -10,8 +10,8 @@ from openpilot.common.basedir import BASEDIR
|
|||||||
from openpilot.common.swaglog import cloudlog
|
from openpilot.common.swaglog import cloudlog
|
||||||
from openpilot.common.git import get_commit, get_origin, get_branch, get_short_branch, get_commit_date
|
from openpilot.common.git import get_commit, get_origin, get_branch, get_short_branch, get_commit_date
|
||||||
|
|
||||||
RELEASE_SP_BRANCHES = ['release-c3', 'release']
|
RELEASE_SP_BRANCHES = ['release-c3']
|
||||||
TESTED_SP_BRANCHES = ['staging-c3', 'staging-c3-new', 'staging']
|
TESTED_SP_BRANCHES = ['staging-c3', 'staging-c3-new', 'staging-tici']
|
||||||
MASTER_SP_BRANCHES = ['master']
|
MASTER_SP_BRANCHES = ['master']
|
||||||
RELEASE_BRANCHES = ['release3-staging', 'release3', 'release-tici', 'nightly'] + RELEASE_SP_BRANCHES
|
RELEASE_BRANCHES = ['release3-staging', 'release3', 'release-tici', 'nightly'] + RELEASE_SP_BRANCHES
|
||||||
TESTED_BRANCHES = RELEASE_BRANCHES + ['devel', 'devel-staging', 'nightly-dev'] + TESTED_SP_BRANCHES
|
TESTED_BRANCHES = RELEASE_BRANCHES + ['devel', 'devel-staging', 'nightly-dev'] + TESTED_SP_BRANCHES
|
||||||
|
|||||||
Reference in New Issue
Block a user