Delete .github/workflows directory
This commit is contained in:
parent
9452a0f539
commit
3f20437746
@ -1,46 +0,0 @@
|
|||||||
name: Sync Branches
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
# 每天10点UTC(你可以根据需要调整时区)
|
|
||||||
- cron: '0 10 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
sync:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout the main repository
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GH_TOKEN }}
|
|
||||||
|
|
||||||
- name: Setup Git
|
|
||||||
run: |
|
|
||||||
git config --global user.name "GitHub Actions"
|
|
||||||
git config --global user.email "github-actions@github.com"
|
|
||||||
|
|
||||||
- name: Add remote for MoreTore/openpilot
|
|
||||||
run: |
|
|
||||||
git remote add moretore https://github.com/MoreTore/openpilot.git
|
|
||||||
git fetch moretore mazda-frogpilot-dev
|
|
||||||
|
|
||||||
- name: Add remote for FrogAi/FrogPilot
|
|
||||||
run: |
|
|
||||||
git remote add frogai https://github.com/FrogAi/FrogPilot.git
|
|
||||||
git fetch frogai
|
|
||||||
|
|
||||||
- name: Merge `mazda-frogpilot-dev` into current branch
|
|
||||||
run: |
|
|
||||||
git checkout main # 你可以修改为目标分支
|
|
||||||
git merge moretore/mazda-frogpilot-dev --no-ff --commit -m "Sync with mazda-frogpilot-dev"
|
|
||||||
|
|
||||||
- name: Merge `FrogPilot` into current branch
|
|
||||||
run: |
|
|
||||||
git merge frogai/FrogPilot --no-ff --commit -m "Sync with FrogPilot"
|
|
||||||
|
|
||||||
- name: Push changes back to the main repository
|
|
||||||
run: |
|
|
||||||
git push origin main
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
|
49
.github/workflows/auto-cache/action.yaml
vendored
49
.github/workflows/auto-cache/action.yaml
vendored
@ -1,49 +0,0 @@
|
|||||||
name: 'automatically cache based on current runner'
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
path:
|
|
||||||
description: 'path to cache'
|
|
||||||
required: true
|
|
||||||
key:
|
|
||||||
description: 'key'
|
|
||||||
required: true
|
|
||||||
restore-keys:
|
|
||||||
description: 'restore-keys'
|
|
||||||
required: true
|
|
||||||
save:
|
|
||||||
description: 'whether to save the cache'
|
|
||||||
default: 'false'
|
|
||||||
required: false
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: setup namespace cache
|
|
||||||
if: ${{ contains(runner.name, 'nsc') }}
|
|
||||||
uses: namespacelabs/nscloud-cache-action@v1
|
|
||||||
with:
|
|
||||||
path: ${{ inputs.path }}
|
|
||||||
|
|
||||||
- name: setup github cache
|
|
||||||
if: ${{ !contains(runner.name, 'nsc') && inputs.save != 'false' }}
|
|
||||||
uses: 'actions/cache@v3'
|
|
||||||
with:
|
|
||||||
path: ${{ inputs.path }}
|
|
||||||
key: ${{ inputs.key }}
|
|
||||||
restore-keys: ${{ inputs.restore-keys }}
|
|
||||||
|
|
||||||
- name: setup github cache
|
|
||||||
if: ${{ !contains(runner.name, 'nsc') && inputs.save == 'false' }}
|
|
||||||
uses: 'actions/cache/restore@v3'
|
|
||||||
with:
|
|
||||||
path: ${{ inputs.path }}
|
|
||||||
key: ${{ inputs.key }}
|
|
||||||
restore-keys: ${{ inputs.restore-keys }}
|
|
||||||
|
|
||||||
# make the directory manually in case we didn't get a hit, so it doesn't fail on future steps
|
|
||||||
- id: scons-cache-setup
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
mkdir -p ${{ inputs.path }}
|
|
||||||
sudo chmod -R 777 ${{ inputs.path }}
|
|
||||||
sudo chown -R $USER ${{ inputs.path }}
|
|
227
.github/workflows/auto_pr_review.yaml
vendored
227
.github/workflows/auto_pr_review.yaml
vendored
@ -1,227 +0,0 @@
|
|||||||
name: "PR review"
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types: [opened, reopened, synchronize, edited, edited]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
labeler:
|
|
||||||
name: apply labels
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: false
|
|
||||||
- uses: actions/labeler@v5.0.0
|
|
||||||
with:
|
|
||||||
dot: true
|
|
||||||
configuration-path: .github/labeler.yaml
|
|
||||||
|
|
||||||
pr_branch_check:
|
|
||||||
name: check branch
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'commaai/openpilot'
|
|
||||||
steps:
|
|
||||||
- uses: Vankka/pr-target-branch-action@69ab6dd5c221de3548b3b6c4d102c1f4913d3baa
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
target: /^(?!master$).*/
|
|
||||||
exclude: /commaai:.*/
|
|
||||||
change-to: ${{ github.base_ref }}
|
|
||||||
already-exists-action: close_this
|
|
||||||
already-exists-comment: "Your PR should be made against the `master` branch"
|
|
||||||
|
|
||||||
comment:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: comment
|
|
||||||
uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6
|
|
||||||
if: github.event.pull_request.head.repo.full_name != 'commaai/openpilot'
|
|
||||||
with:
|
|
||||||
message: |
|
|
||||||
<!-- _(run_id **${{ github.run_id }}**)_ -->
|
|
||||||
Thanks for contributing to openpilot! In order for us to review your PR as quickly as possible, check the following:
|
|
||||||
* Convert your PR to a draft unless it's ready to review
|
|
||||||
* Read the [contributing docs](https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md)
|
|
||||||
* Before marking as "ready for review", ensure:
|
|
||||||
* the goal is clearly stated in the description
|
|
||||||
* all the tests are passing
|
|
||||||
* the change is [something we merge](https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md#what-gets-merged)
|
|
||||||
* include a route or your device' dongle ID if relevant
|
|
||||||
comment_tag: run_id
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
check-pr-template:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
actions: read
|
|
||||||
if: false && github.event.pull_request.head.repo.full_name != 'commaai/openpilot'
|
|
||||||
steps:
|
|
||||||
- uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
// Comment to add to the PR if no template has been used
|
|
||||||
const NO_TEMPLATE_MESSAGE =
|
|
||||||
"It looks like you didn't use one of the Pull Request templates. Please check [the contributing docs](https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md). \
|
|
||||||
Also make sure that you didn't modify any of the checkboxes or headings within the template.";
|
|
||||||
// body data for future requests
|
|
||||||
const body_data = {
|
|
||||||
issue_number: context.issue.number,
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Utility function to extract all headings
|
|
||||||
const extractHeadings = (markdown) => {
|
|
||||||
const headingRegex = /^(#{1,6})\s+(.+)$/gm;
|
|
||||||
const boldTextRegex = /^(?:\*\*|__)(.+?)(?:\*\*|__)\s*$/gm;
|
|
||||||
const headings = [];
|
|
||||||
let headingMatch;
|
|
||||||
while ((headingMatch = headingRegex.exec(markdown))) {
|
|
||||||
headings.push(headingMatch[2].trim());
|
|
||||||
}
|
|
||||||
let boldMatch;
|
|
||||||
while ((boldMatch = boldTextRegex.exec(markdown))) {
|
|
||||||
headings.push(boldMatch[1].trim());
|
|
||||||
}
|
|
||||||
return headings;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Utility function to extract all check box descriptions
|
|
||||||
const extractCheckBoxTexts = (markdown) => {
|
|
||||||
const checkboxRegex = /^\s*-\s*\[( |x)\]\s+(.+)$/gm;
|
|
||||||
const checkboxes = [];
|
|
||||||
let match;
|
|
||||||
while ((match = checkboxRegex.exec(markdown))) {
|
|
||||||
checkboxes.push(match[2].trim());
|
|
||||||
}
|
|
||||||
return checkboxes;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Utility function to check if a list is a subset of another list
|
|
||||||
isSubset = (subset, superset) => {
|
|
||||||
return subset.every((item) => superset.includes(item));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Utility function to check if a list of checkboxes is a subset of another list of checkboxes
|
|
||||||
isCheckboxSubset = (templateCheckBoxTexts, prTextCheckBoxTexts) => {
|
|
||||||
// Check if each template checkbox text is a substring of at least one PR checkbox text
|
|
||||||
// (user should be allowed to add additional text)
|
|
||||||
return templateCheckBoxTexts.every((item) => prTextCheckBoxTexts.some((element) => element.includes(item)))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get filenames of all currently checked-in PR templates
|
|
||||||
const template_contents = await github.rest.repos.getContent({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
path: ".github/PULL_REQUEST_TEMPLATE",
|
|
||||||
});
|
|
||||||
var template_filenames = [];
|
|
||||||
for (const content of template_contents.data) {
|
|
||||||
template_filenames.push(content.path);
|
|
||||||
}
|
|
||||||
console.debug("Received template filenames: " + template_filenames);
|
|
||||||
// Retrieve templates
|
|
||||||
var templates = [];
|
|
||||||
for (const template_filename of template_filenames) {
|
|
||||||
const template_response = await github.rest.repos.getContent({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
path: template_filename,
|
|
||||||
});
|
|
||||||
// Convert Base64 content back
|
|
||||||
const decoded_template = atob(template_response.data.content);
|
|
||||||
const headings = extractHeadings(decoded_template);
|
|
||||||
const checkboxes = extractCheckBoxTexts(decoded_template);
|
|
||||||
if (!headings.length && !checkboxes.length) {
|
|
||||||
console.warn(
|
|
||||||
"Invalid template! Contains neither headings nor checkboxes, ignoring it: \n" +
|
|
||||||
decoded_template
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
templates.push({ headings: headings, checkboxes: checkboxes });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Retrieve the PR Body
|
|
||||||
const pull_request = await github.rest.issues.get({
|
|
||||||
...body_data,
|
|
||||||
});
|
|
||||||
const pull_request_text = pull_request.data.body;
|
|
||||||
console.debug("Received Pull Request body: \n" + pull_request_text);
|
|
||||||
|
|
||||||
/* Check if the PR Body matches one of the templates
|
|
||||||
A template is defined by all headings and checkboxes it contains
|
|
||||||
We extract all Headings and Checkboxes from the PR text and check if any of the templates is a subset of that
|
|
||||||
*/
|
|
||||||
const pr_headings = extractHeadings(pull_request_text);
|
|
||||||
const pr_checkboxes = extractCheckBoxTexts(pull_request_text);
|
|
||||||
console.debug("Found Headings in PR body:\n" + pr_headings);
|
|
||||||
console.debug("Found Checkboxes in PR body:\n" + pr_checkboxes);
|
|
||||||
var template_found = false;
|
|
||||||
// Iterate over each template to check if it applies
|
|
||||||
for (const template of templates) {
|
|
||||||
console.log(
|
|
||||||
"Checking for headings: [" +
|
|
||||||
template.headings +
|
|
||||||
"] and checkboxes: [" +
|
|
||||||
template.checkboxes + "]"
|
|
||||||
);
|
|
||||||
if (
|
|
||||||
isCheckboxSubset(template.checkboxes, pr_checkboxes) &&
|
|
||||||
isSubset(template.headings, pr_headings)
|
|
||||||
) {
|
|
||||||
console.debug("Found matching template!");
|
|
||||||
template_found = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// List comments from previous runs
|
|
||||||
var existing_comments = [];
|
|
||||||
const comments = await github.rest.issues.listComments({
|
|
||||||
...body_data,
|
|
||||||
});
|
|
||||||
for (const comment of comments.data) {
|
|
||||||
if (comment.body === NO_TEMPLATE_MESSAGE) {
|
|
||||||
existing_comments.push(comment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add a comment to the PR that it is not using a the template (but only if this comment does not exist already)
|
|
||||||
if (!template_found) {
|
|
||||||
var comment_already_sent = false;
|
|
||||||
|
|
||||||
// Add an 'in-bot-review' label since this PR doesn't have the template
|
|
||||||
github.rest.issues.addLabels({
|
|
||||||
...body_data,
|
|
||||||
labels: ["in-bot-review"],
|
|
||||||
});
|
|
||||||
|
|
||||||
if (existing_comments.length < 1) {
|
|
||||||
github.rest.issues.createComment({
|
|
||||||
...body_data,
|
|
||||||
body: NO_TEMPLATE_MESSAGE,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// If template has been found, delete any old comment about missing template
|
|
||||||
for (const existing_comment of existing_comments) {
|
|
||||||
github.rest.issues.deleteComment({
|
|
||||||
...body_data,
|
|
||||||
comment_id: existing_comment.id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// Remove the 'in-bot-review' label after the review is done and the PR has passed
|
|
||||||
github.rest.issues.removeLabel({
|
|
||||||
...body_data,
|
|
||||||
name: "in-bot-review",
|
|
||||||
}).catch((error) => {
|
|
||||||
console.log("Label 'in-bot-review' not found, ignoring");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
37
.github/workflows/badges.yaml
vendored
37
.github/workflows/badges.yaml
vendored
@ -1,37 +0,0 @@
|
|||||||
name: badges
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 * * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
BASE_IMAGE: openpilot-base
|
|
||||||
DOCKER_REGISTRY: ghcr.io/commaai
|
|
||||||
RUN: docker run --shm-size 1G -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
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
badges:
|
|
||||||
name: create badges
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
if: github.repository == 'commaai/openpilot'
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Push badges
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "scons -j$(nproc) && python selfdrive/ui/translations/create_badges.py"
|
|
||||||
|
|
||||||
rm .gitattributes
|
|
||||||
|
|
||||||
git checkout --orphan badges
|
|
||||||
git rm -rf --cached .
|
|
||||||
git config user.email "badge-researcher@comma.ai"
|
|
||||||
git config user.name "Badge Researcher"
|
|
||||||
|
|
||||||
git add translation_badge.svg
|
|
||||||
git commit -m "Add/Update badges"
|
|
||||||
git push -f origin HEAD
|
|
21
.github/workflows/compile-openpilot/action.yaml
vendored
21
.github/workflows/compile-openpilot/action.yaml
vendored
@ -1,21 +0,0 @@
|
|||||||
name: 'compile openpilot'
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- shell: bash
|
|
||||||
name: Build openpilot with all flags
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
${{ env.RUN }} "release/check-dirty.sh"
|
|
||||||
- shell: bash
|
|
||||||
name: Cleanup scons cache and rebuild
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "rm -rf /tmp/scons_cache/* && \
|
|
||||||
scons -j$(nproc) --cache-populate"
|
|
||||||
- name: Save scons cache
|
|
||||||
uses: actions/cache/save@v3
|
|
||||||
if: github.ref == 'refs/heads/master'
|
|
||||||
with:
|
|
||||||
path: .ci_cache/scons_cache
|
|
||||||
key: scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
|
|
64
.github/workflows/docs.yaml
vendored
64
.github/workflows/docs.yaml
vendored
@ -1,64 +0,0 @@
|
|||||||
name: docs
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
env:
|
|
||||||
BASE_IMAGE: openpilot-base
|
|
||||||
|
|
||||||
BUILD: selfdrive/test/docker_build.sh base
|
|
||||||
|
|
||||||
RUN: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -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
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
docs:
|
|
||||||
name: build docs
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
timeout-minutes: 45
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Build openpilot
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
- name: Build docs
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "apt update && apt install -y doxygen && cd docs && make -j$(nproc) html"
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot'
|
|
||||||
with:
|
|
||||||
path: openpilot-docs
|
|
||||||
ssh-key: ${{ secrets.OPENPILOT_DOCS_KEY }}
|
|
||||||
repository: commaai/openpilot-docs
|
|
||||||
- name: Push
|
|
||||||
if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot'
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
|
|
||||||
source release/identity.sh
|
|
||||||
|
|
||||||
cd openpilot-docs
|
|
||||||
|
|
||||||
git checkout --orphan tmp
|
|
||||||
git rm -rf .
|
|
||||||
|
|
||||||
cp -r ../build/docs/html/ docs/
|
|
||||||
cp -r ../docs/README.md .
|
|
||||||
touch docs/.nojekyll
|
|
||||||
echo -n docs.comma.ai > docs/CNAME
|
|
||||||
git add -f .
|
|
||||||
|
|
||||||
git commit -m "build docs"
|
|
||||||
|
|
||||||
# docs live in different repo to not bloat openpilot's full clone size
|
|
||||||
git push -f origin tmp:gh-pages
|
|
39
.github/workflows/prebuilt.yaml
vendored
39
.github/workflows/prebuilt.yaml
vendored
@ -1,39 +0,0 @@
|
|||||||
name: prebuilt
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 * * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
BUILD: selfdrive/test/docker_build.sh prebuilt
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_prebuilt:
|
|
||||||
name: build prebuilt
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
if: github.repository == 'commaai/openpilot'
|
|
||||||
env:
|
|
||||||
PUSH_IMAGE: true
|
|
||||||
permissions:
|
|
||||||
checks: read
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
steps:
|
|
||||||
- name: Wait for green check mark
|
|
||||||
if: ${{ github.event_name != 'workflow_dispatch' }}
|
|
||||||
uses: lewagon/wait-on-check-action@595dabb3acf442d47e29c9ec9ba44db0c6bdd18f
|
|
||||||
with:
|
|
||||||
ref: master
|
|
||||||
wait-interval: 30
|
|
||||||
running-workflow-name: 'build prebuilt'
|
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
check-regexp: ^((?!.*(build master-ci).*).)*$
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- run: git lfs pull
|
|
||||||
- name: Build and Push docker image
|
|
||||||
run: |
|
|
||||||
$DOCKER_LOGIN
|
|
||||||
eval "$BUILD"
|
|
54
.github/workflows/release.yaml
vendored
54
.github/workflows/release.yaml
vendored
@ -1,54 +0,0 @@
|
|||||||
name: release
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 10 * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_masterci:
|
|
||||||
name: build master-ci
|
|
||||||
env:
|
|
||||||
TARGET_DIR: /tmp/openpilot
|
|
||||||
ImageOS: ubuntu20
|
|
||||||
container:
|
|
||||||
image: ghcr.io/commaai/openpilot-base:latest
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
if: github.repository == 'commaai/openpilot'
|
|
||||||
permissions:
|
|
||||||
checks: read
|
|
||||||
contents: write
|
|
||||||
steps:
|
|
||||||
- name: Install wait-on-check-action dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libyaml-dev
|
|
||||||
- name: Wait for green check mark
|
|
||||||
if: ${{ github.event_name != 'workflow_dispatch' }}
|
|
||||||
uses: lewagon/wait-on-check-action@595dabb3acf442d47e29c9ec9ba44db0c6bdd18f
|
|
||||||
with:
|
|
||||||
ref: master
|
|
||||||
wait-interval: 30
|
|
||||||
running-workflow-name: 'build master-ci'
|
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
check-regexp: ^((?!.*(build prebuilt).*).)*$
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Pull LFS
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory '*'
|
|
||||||
git lfs pull
|
|
||||||
- name: Build master-ci
|
|
||||||
run: |
|
|
||||||
release/build_devel.sh
|
|
||||||
- name: Run tests
|
|
||||||
run: |
|
|
||||||
export PYTHONPATH=$TARGET_DIR
|
|
||||||
cd $TARGET_DIR
|
|
||||||
scons -j$(nproc)
|
|
||||||
pytest -n logical selfdrive/car/tests/test_car_interfaces.py
|
|
||||||
- name: Push master-ci
|
|
||||||
run: |
|
|
||||||
unset TARGET_DIR
|
|
||||||
BRANCH=master-ci release/build_devel.sh
|
|
61
.github/workflows/repo-maintenance.yaml
vendored
61
.github/workflows/repo-maintenance.yaml
vendored
@ -1,61 +0,0 @@
|
|||||||
name: repo maintenance
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 14 * * 1" # every Monday at 2am UTC (6am PST)
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
bump_submodules:
|
|
||||||
name: bump_submodules
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
container:
|
|
||||||
image: ghcr.io/commaai/openpilot-base:latest
|
|
||||||
if: github.repository == 'commaai/openpilot'
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- name: bump submodules
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory '*'
|
|
||||||
git -c submodule."tinygrad".update=none submodule update --remote
|
|
||||||
git add .
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.ACTIONS_CREATE_PR_PAT }}
|
|
||||||
commit-message: bump submodules
|
|
||||||
title: '[bot] Bump submodules'
|
|
||||||
branch: auto-bump-submodules
|
|
||||||
base: master
|
|
||||||
delete-branch: true
|
|
||||||
body: 'Automatic PR from repo-maintenance -> bump_submodules'
|
|
||||||
labels: bot
|
|
||||||
package_updates:
|
|
||||||
name: package_updates
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
container:
|
|
||||||
image: ghcr.io/commaai/openpilot-base:latest
|
|
||||||
if: github.repository == 'commaai/openpilot'
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: poetry lock
|
|
||||||
run: |
|
|
||||||
pip install poetry
|
|
||||||
poetry lock
|
|
||||||
- name: pre-commit autoupdate
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory '*'
|
|
||||||
pre-commit autoupdate
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.ACTIONS_CREATE_PR_PAT }}
|
|
||||||
commit-message: Update Python packages and pre-commit hooks
|
|
||||||
title: '[bot] Update Python packages and pre-commit hooks'
|
|
||||||
branch: auto-package-updates
|
|
||||||
base: master
|
|
||||||
delete-branch: true
|
|
||||||
body: 'Automatic PR from repo-maintenance -> package_updates'
|
|
||||||
labels: bot
|
|
404
.github/workflows/selfdrive_tests.yaml
vendored
404
.github/workflows/selfdrive_tests.yaml
vendored
@ -1,404 +0,0 @@
|
|||||||
name: selfdrive
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
env:
|
|
||||||
PYTHONWARNINGS: error
|
|
||||||
BASE_IMAGE: openpilot-base
|
|
||||||
AZURE_TOKEN: ${{ secrets.AZURE_COMMADATACI_OPENPILOTCI_TOKEN }}
|
|
||||||
|
|
||||||
DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
BUILD: selfdrive/test/docker_build.sh base
|
|
||||||
|
|
||||||
RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e CI=1 -e PRE_COMMIT_HOME=/tmp/pre-commit -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/pre-commit:/tmp/pre-commit -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
|
|
||||||
|
|
||||||
PYTEST: pytest --continue-on-collection-errors --cov --cov-report=xml --cov-append --durations=0 --durations-min=5 --hypothesis-seed 0 -n logical
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_release:
|
|
||||||
name: build release
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
env:
|
|
||||||
STRIPPED_DIR: /tmp/releasepilot
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- run: git lfs pull
|
|
||||||
- name: Build devel
|
|
||||||
timeout-minutes: 1
|
|
||||||
run: TARGET_DIR=$STRIPPED_DIR release/build_devel.sh
|
|
||||||
- uses: ./.github/workflows/setup-pre-commit
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Check submodules
|
|
||||||
if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot'
|
|
||||||
timeout-minutes: 1
|
|
||||||
run: release/check-submodules.sh
|
|
||||||
- name: Build openpilot and run checks
|
|
||||||
timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 10 || 30) }} # allow more time when we missed the scons cache
|
|
||||||
run: |
|
|
||||||
cd $STRIPPED_DIR
|
|
||||||
${{ env.RUN }} "python selfdrive/manager/build.py"
|
|
||||||
- name: Run tests
|
|
||||||
timeout-minutes: 3
|
|
||||||
run: |
|
|
||||||
cd $STRIPPED_DIR
|
|
||||||
${{ env.RUN }} "release/check-dirty.sh && \
|
|
||||||
MAX_EXAMPLES=5 $PYTEST selfdrive/car"
|
|
||||||
- name: pre-commit
|
|
||||||
timeout-minutes: 3
|
|
||||||
run: |
|
|
||||||
cd $GITHUB_WORKSPACE
|
|
||||||
cp .pre-commit-config.yaml $STRIPPED_DIR
|
|
||||||
cp pyproject.toml $STRIPPED_DIR
|
|
||||||
cp poetry.lock $STRIPPED_DIR
|
|
||||||
cd $STRIPPED_DIR
|
|
||||||
${{ env.RUN }} "unset PYTHONWARNINGS && SKIP=check-added-large-files pre-commit run --all && chmod -R 777 /tmp/pre-commit"
|
|
||||||
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: ${{ fromJson(
|
|
||||||
((github.repository == 'commaai/openpilot') &&
|
|
||||||
((github.event_name != 'pull_request') ||
|
|
||||||
(github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && '["x86_64", "aarch64"]' || '["x86_64"]' ) }}
|
|
||||||
runs-on: ${{ (matrix.arch == 'aarch64') && 'namespace-profile-arm64-2x8' || 'ubuntu-20.04' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
with:
|
|
||||||
docker_hub_pat: ${{ secrets.DOCKER_HUB_PAT }}
|
|
||||||
- uses: ./.github/workflows/compile-openpilot
|
|
||||||
timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 15 || 30) }} # allow more time when we missed the scons cache
|
|
||||||
|
|
||||||
docker_push:
|
|
||||||
name: docker push
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: ${{ fromJson( (github.repository == 'commaai/openpilot') && '["x86_64", "aarch64"]' || '["x86_64"]' ) }}
|
|
||||||
runs-on: ${{ (matrix.arch == 'aarch64') && 'namespace-profile-arm64-2x8' || 'ubuntu-20.04' }}
|
|
||||||
if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot'
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- name: Setup to push to repo
|
|
||||||
run: |
|
|
||||||
echo "PUSH_IMAGE=true" >> "$GITHUB_ENV"
|
|
||||||
echo "TARGET_ARCHITECTURE=${{ matrix.arch }}" >> "$GITHUB_ENV"
|
|
||||||
$DOCKER_LOGIN
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
with:
|
|
||||||
docker_hub_pat: ${{ secrets.DOCKER_HUB_PAT }}
|
|
||||||
|
|
||||||
docker_push_multiarch:
|
|
||||||
name: docker push multiarch tag
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot'
|
|
||||||
needs: [docker_push]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: false
|
|
||||||
- name: Setup docker
|
|
||||||
run: |
|
|
||||||
$DOCKER_LOGIN
|
|
||||||
- name: Merge x64 and arm64 tags
|
|
||||||
run: |
|
|
||||||
export PUSH_IMAGE=true
|
|
||||||
scripts/retry.sh selfdrive/test/docker_tag_multiarch.sh base x86_64 aarch64
|
|
||||||
|
|
||||||
static_analysis:
|
|
||||||
name: static analysis
|
|
||||||
runs-on: ${{ ((github.repository == 'commaai/openpilot') &&
|
|
||||||
((github.event_name != 'pull_request') ||
|
|
||||||
(github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'namespace-profile-amd64-8x16' || 'ubuntu-20.04' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-pre-commit
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: pre-commit
|
|
||||||
timeout-minutes: 4
|
|
||||||
run: ${{ env.RUN }} "unset PYTHONWARNINGS && pre-commit run --all && chmod -R 777 /tmp/pre-commit"
|
|
||||||
|
|
||||||
valgrind:
|
|
||||||
name: valgrind
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Build openpilot
|
|
||||||
run: ${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
- name: Run valgrind
|
|
||||||
timeout-minutes: 1
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "python selfdrive/test/test_valgrind_replay.py"
|
|
||||||
- name: Print logs
|
|
||||||
if: always()
|
|
||||||
run: cat selfdrive/test/valgrind_logs.txt
|
|
||||||
|
|
||||||
unit_tests:
|
|
||||||
name: unit tests
|
|
||||||
runs-on: ${{ ((github.repository == 'commaai/openpilot') &&
|
|
||||||
((github.event_name != 'pull_request') ||
|
|
||||||
(github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'namespace-profile-amd64-8x16' || 'ubuntu-20.04' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
with:
|
|
||||||
docker_hub_pat: ${{ secrets.DOCKER_HUB_PAT }}
|
|
||||||
- name: Build openpilot
|
|
||||||
timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 10 || 30) }} # allow more time when we missed the scons cache
|
|
||||||
run: ${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
- name: Run unit tests
|
|
||||||
timeout-minutes: 15
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "source selfdrive/test/setup_xvfb.sh && \
|
|
||||||
export MAPBOX_TOKEN='pk.eyJ1Ijoiam5ld2IiLCJhIjoiY2xxNW8zZXprMGw1ZzJwbzZneHd2NHljbSJ9.gV7VPRfbXFetD-1OVF0XZg' && \
|
|
||||||
$PYTEST --timeout 60 -m 'not slow' && \
|
|
||||||
./selfdrive/ui/tests/create_test_translations.sh && \
|
|
||||||
QT_QPA_PLATFORM=offscreen ./selfdrive/ui/tests/test_translations && \
|
|
||||||
./selfdrive/ui/tests/test_translations.py"
|
|
||||||
- name: "Upload coverage to Codecov"
|
|
||||||
uses: codecov/codecov-action@v3
|
|
||||||
with:
|
|
||||||
name: ${{ github.job }}
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
||||||
|
|
||||||
process_replay:
|
|
||||||
name: process replay
|
|
||||||
runs-on: ${{ ((github.repository == 'commaai/openpilot') &&
|
|
||||||
((github.event_name != 'pull_request') ||
|
|
||||||
(github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'namespace-profile-amd64-8x16' || 'ubuntu-20.04' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
with:
|
|
||||||
docker_hub_pat: ${{ secrets.DOCKER_HUB_PAT }}
|
|
||||||
- name: Cache test routes
|
|
||||||
id: dependency-cache
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: .ci_cache/comma_download_cache
|
|
||||||
key: proc-replay-${{ hashFiles('.github/workflows/selfdrive_tests.yaml', 'selfdrive/test/process_replay/ref_commit') }}
|
|
||||||
- name: Build openpilot
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
- name: Run replay
|
|
||||||
timeout-minutes: 30
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "coverage run selfdrive/test/process_replay/test_processes.py -j$(nproc) && \
|
|
||||||
chmod -R 777 /tmp/comma_download_cache && \
|
|
||||||
coverage combine && \
|
|
||||||
coverage xml"
|
|
||||||
- name: Print diff
|
|
||||||
id: print-diff
|
|
||||||
if: always()
|
|
||||||
run: cat selfdrive/test/process_replay/diff.txt
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
if: always()
|
|
||||||
continue-on-error: true
|
|
||||||
with:
|
|
||||||
name: process_replay_diff.txt
|
|
||||||
path: selfdrive/test/process_replay/diff.txt
|
|
||||||
- name: Upload reference logs
|
|
||||||
if: ${{ failure() && steps.print-diff.outcome == 'success' && github.repository == 'commaai/openpilot' && env.AZURE_TOKEN != '' }}
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "unset PYTHONWARNINGS && AZURE_TOKEN='$AZURE_TOKEN' python selfdrive/test/process_replay/test_processes.py -j$(nproc) --upload-only"
|
|
||||||
- name: "Upload coverage to Codecov"
|
|
||||||
uses: codecov/codecov-action@v3
|
|
||||||
with:
|
|
||||||
name: ${{ github.job }}
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
||||||
|
|
||||||
regen:
|
|
||||||
name: regen
|
|
||||||
runs-on: 'ubuntu-20.04'
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Cache test routes
|
|
||||||
id: dependency-cache
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: .ci_cache/comma_download_cache
|
|
||||||
key: regen-${{ hashFiles('.github/workflows/selfdrive_tests.yaml', 'selfdrive/test/process_replay/test_regen.py') }}
|
|
||||||
- name: Build base Docker image
|
|
||||||
run: eval "$BUILD"
|
|
||||||
- name: Build openpilot
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
- name: Run regen
|
|
||||||
timeout-minutes: 30
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "ONNXCPU=1 $PYTEST selfdrive/test/process_replay/test_regen.py && \
|
|
||||||
chmod -R 777 /tmp/comma_download_cache"
|
|
||||||
|
|
||||||
test_modeld:
|
|
||||||
name: model tests
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Build base Docker image
|
|
||||||
run: eval "$BUILD"
|
|
||||||
- name: Build openpilot
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
# PYTHONWARNINGS triggers a SyntaxError in onnxruntime
|
|
||||||
- name: Run model replay with ONNX
|
|
||||||
timeout-minutes: 4
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "unset PYTHONWARNINGS && \
|
|
||||||
ONNXCPU=1 NO_NAV=1 coverage run selfdrive/test/process_replay/model_replay.py && \
|
|
||||||
coverage combine && \
|
|
||||||
coverage xml"
|
|
||||||
- name: Run unit tests
|
|
||||||
timeout-minutes: 4
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "unset PYTHONWARNINGS && \
|
|
||||||
$PYTEST selfdrive/modeld"
|
|
||||||
- name: "Upload coverage to Codecov"
|
|
||||||
uses: codecov/codecov-action@v3
|
|
||||||
with:
|
|
||||||
name: ${{ github.job }}
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
||||||
|
|
||||||
test_cars:
|
|
||||||
name: cars
|
|
||||||
runs-on: ${{ ((github.repository == 'commaai/openpilot') &&
|
|
||||||
((github.event_name != 'pull_request') ||
|
|
||||||
(github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'namespace-profile-amd64-8x16' || 'ubuntu-20.04' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
job: [0, 1, 2, 3, 4]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Cache test routes
|
|
||||||
id: dependency-cache
|
|
||||||
uses: ./.github/workflows/auto-cache
|
|
||||||
with:
|
|
||||||
path: .ci_cache/comma_download_cache
|
|
||||||
key: car_models-${{ hashFiles('selfdrive/car/tests/test_models.py', 'selfdrive/car/tests/routes.py') }}-${{ matrix.job }}
|
|
||||||
- name: Build openpilot
|
|
||||||
run: ${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
- name: Test car models
|
|
||||||
timeout-minutes: 10
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "$PYTEST selfdrive/car/tests/test_models.py && \
|
|
||||||
chmod -R 777 /tmp/comma_download_cache"
|
|
||||||
env:
|
|
||||||
NUM_JOBS: 5
|
|
||||||
JOB_ID: ${{ matrix.job }}
|
|
||||||
- name: "Upload coverage to Codecov"
|
|
||||||
uses: codecov/codecov-action@v3
|
|
||||||
with:
|
|
||||||
name: ${{ github.job }}-${{ matrix.job }}
|
|
||||||
env:
|
|
||||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
||||||
|
|
||||||
car_docs_diff:
|
|
||||||
name: PR comments
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
ref: ${{ github.event.pull_request.base.ref }}
|
|
||||||
- run: git lfs pull
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Get base car info
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "scons -j$(nproc) && python selfdrive/debug/dump_car_docs.py --path /tmp/openpilot_cache/base_car_docs"
|
|
||||||
sudo chown -R $USER:$USER ${{ github.workspace }}
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
path: current
|
|
||||||
- run: cd current && git lfs pull
|
|
||||||
- name: Save car docs diff
|
|
||||||
id: save_diff
|
|
||||||
run: |
|
|
||||||
cd current
|
|
||||||
${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
output=$(${{ env.RUN }} "python selfdrive/debug/print_docs_diff.py --path /tmp/openpilot_cache/base_car_docs")
|
|
||||||
output="${output//$'\n'/'%0A'}"
|
|
||||||
echo "::set-output name=diff::$output"
|
|
||||||
- name: Find comment
|
|
||||||
if: ${{ env.AZURE_TOKEN != '' }}
|
|
||||||
uses: peter-evans/find-comment@1769778a0c5bd330272d749d12c036d65e70d39d
|
|
||||||
id: fc
|
|
||||||
with:
|
|
||||||
issue-number: ${{ github.event.pull_request.number }}
|
|
||||||
body-includes: This PR makes changes to
|
|
||||||
- name: Update comment
|
|
||||||
if: ${{ steps.save_diff.outputs.diff != '' && env.AZURE_TOKEN != '' }}
|
|
||||||
uses: peter-evans/create-or-update-comment@b95e16d2859ad843a14218d1028da5b2c4cbc4b4
|
|
||||||
with:
|
|
||||||
comment-id: ${{ steps.fc.outputs.comment-id }}
|
|
||||||
issue-number: ${{ github.event.pull_request.number }}
|
|
||||||
body: "${{ steps.save_diff.outputs.diff }}"
|
|
||||||
edit-mode: replace
|
|
||||||
- name: Delete comment
|
|
||||||
if: ${{ steps.fc.outputs.comment-id != '' && steps.save_diff.outputs.diff == '' && env.AZURE_TOKEN != '' }}
|
|
||||||
uses: actions/github-script@v6
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
github.rest.issues.deleteComment({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
comment_id: ${{ steps.fc.outputs.comment-id }}
|
|
||||||
})
|
|
||||||
|
|
||||||
create_ui_report:
|
|
||||||
name: Create UI Report
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Build openpilot
|
|
||||||
run: ${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
- name: Create Test Report
|
|
||||||
run: >
|
|
||||||
${{ env.RUN }} "PYTHONWARNINGS=ignore &&
|
|
||||||
source selfdrive/test/setup_xvfb.sh &&
|
|
||||||
export MAPBOX_TOKEN='pk.eyJ1Ijoiam5ld2IiLCJhIjoiY2xxNW8zZXprMGw1ZzJwbzZneHd2NHljbSJ9.gV7VPRfbXFetD-1OVF0XZg' &&
|
|
||||||
python selfdrive/ui/tests/test_ui/run.py"
|
|
||||||
- name: Upload Test Report
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: report
|
|
||||||
path: selfdrive/ui/tests/test_ui/report
|
|
12
.github/workflows/setup-pre-commit/action.yaml
vendored
12
.github/workflows/setup-pre-commit/action.yaml
vendored
@ -1,12 +0,0 @@
|
|||||||
name: 'set up pre-commit environment'
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- uses: ./.github/workflows/auto-cache
|
|
||||||
with:
|
|
||||||
path: .ci_cache/pre-commit
|
|
||||||
key: pre-commit-${{ hashFiles('**/.pre-commit-config.yaml') }}
|
|
||||||
restore-keys: |
|
|
||||||
pre-commit-
|
|
||||||
save: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' }}
|
|
40
.github/workflows/setup-with-retry/action.yaml
vendored
40
.github/workflows/setup-with-retry/action.yaml
vendored
@ -1,40 +0,0 @@
|
|||||||
name: 'openpilot env setup, with retry on failure'
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
docker_hub_pat:
|
|
||||||
description: 'Auth token for Docker Hub, required for BuildJet jobs'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
sleep_time:
|
|
||||||
description: 'Time to sleep between retries'
|
|
||||||
required: false
|
|
||||||
default: 30
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- id: setup1
|
|
||||||
uses: ./.github/workflows/setup
|
|
||||||
continue-on-error: true
|
|
||||||
with:
|
|
||||||
docker_hub_pat: ${{ inputs.docker_hub_pat }}
|
|
||||||
is_retried: true
|
|
||||||
- if: steps.setup1.outcome == 'failure'
|
|
||||||
shell: bash
|
|
||||||
run: sleep ${{ inputs.sleep_time }}
|
|
||||||
- id: setup2
|
|
||||||
if: steps.setup1.outcome == 'failure'
|
|
||||||
uses: ./.github/workflows/setup
|
|
||||||
continue-on-error: true
|
|
||||||
with:
|
|
||||||
docker_hub_pat: ${{ inputs.docker_hub_pat }}
|
|
||||||
is_retried: true
|
|
||||||
- if: steps.setup2.outcome == 'failure'
|
|
||||||
shell: bash
|
|
||||||
run: sleep ${{ inputs.sleep_time }}
|
|
||||||
- id: setup3
|
|
||||||
if: steps.setup2.outcome == 'failure'
|
|
||||||
uses: ./.github/workflows/setup
|
|
||||||
with:
|
|
||||||
docker_hub_pat: ${{ inputs.docker_hub_pat }}
|
|
||||||
is_retried: true
|
|
63
.github/workflows/setup/action.yaml
vendored
63
.github/workflows/setup/action.yaml
vendored
@ -1,63 +0,0 @@
|
|||||||
name: 'openpilot env setup'
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
docker_hub_pat:
|
|
||||||
description: 'Auth token for Docker Hub, required for BuildJet jobs'
|
|
||||||
required: true
|
|
||||||
default: ''
|
|
||||||
is_retried:
|
|
||||||
description: 'A mock param that asserts that we use the setup-with-retry instead of this action directly'
|
|
||||||
required: false
|
|
||||||
default: 'false'
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
# assert that this action is retried using the setup-with-retry
|
|
||||||
- shell: bash
|
|
||||||
if: ${{ inputs.is_retried == 'false' }}
|
|
||||||
run: |
|
|
||||||
echo "You should not run this action directly. Use setup-with-retry instead"
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
# do this after checkout to ensure our custom LFS config is used to pull from GitLab
|
|
||||||
- shell: bash
|
|
||||||
run: git lfs pull
|
|
||||||
|
|
||||||
# on BuildJet runners, must be logged into DockerHub to avoid rate limiting
|
|
||||||
# https://buildjet.com/for-github-actions/docs/guides/docker
|
|
||||||
- shell: bash
|
|
||||||
if: ${{ contains(runner.name, 'buildjet') && inputs.docker_hub_pat == '' }}
|
|
||||||
run: |
|
|
||||||
echo "Need to set the Docker Hub PAT secret as an input to this action"
|
|
||||||
exit 1
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
if: contains(runner.name, 'buildjet')
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
docker login -u adeebshihadeh -p ${{ inputs.docker_hub_pat }}
|
|
||||||
|
|
||||||
# build cache
|
|
||||||
- id: date
|
|
||||||
shell: bash
|
|
||||||
run: echo "CACHE_COMMIT_DATE=$(git log -1 --pretty='format:%cd' --date=format:'%Y-%m-%d-%H:%M')" >> $GITHUB_ENV
|
|
||||||
- shell: bash
|
|
||||||
run: echo "$CACHE_COMMIT_DATE"
|
|
||||||
- id: scons-cache
|
|
||||||
uses: ./.github/workflows/auto-cache
|
|
||||||
with:
|
|
||||||
path: .ci_cache/scons_cache
|
|
||||||
key: scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}
|
|
||||||
scons-${{ runner.arch }}
|
|
||||||
# as suggested here: https://github.com/moby/moby/issues/32816#issuecomment-910030001
|
|
||||||
- id: normalize-file-permissions
|
|
||||||
shell: bash
|
|
||||||
name: Normalize file permissions to ensure a consistent docker build cache
|
|
||||||
run: |
|
|
||||||
find . -type f -executable -not -perm 755 -exec chmod 755 {} \;
|
|
||||||
find . -type f -not -executable -not -perm 644 -exec chmod 644 {} \;
|
|
||||||
# build our docker image
|
|
||||||
- shell: bash
|
|
||||||
run: eval ${{ env.BUILD }}
|
|
28
.github/workflows/stale.yaml
vendored
28
.github/workflows/stale.yaml
vendored
@ -1,28 +0,0 @@
|
|||||||
name: stale
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '30 1 * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
DAYS_BEFORE_PR_CLOSE: 7
|
|
||||||
DAYS_BEFORE_PR_STALE: 30
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
stale:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/stale@v8
|
|
||||||
with:
|
|
||||||
exempt-milestones: true
|
|
||||||
|
|
||||||
# pull request config
|
|
||||||
stale-pr-message: 'This PR has had no activity for ${{ env.DAYS_BEFORE_PR_STALE }} days. It will be automatically closed in ${{ env.DAYS_BEFORE_PR_CLOSE }} days if there is no activity.'
|
|
||||||
close-pr-message: 'This PR has been automatically closed due to inactivity. Feel free to re-open once activity resumes.'
|
|
||||||
delete-branch: ${{ github.event.pull_request.head.repo.full_name == 'commaai/openpilot' }} # only delete branches on the main repo
|
|
||||||
exempt-pr-labels: "ignore stale,needs testing,car port" # if wip or it needs testing from the community, don't mark as stale
|
|
||||||
days-before-pr-stale: ${{ env.DAYS_BEFORE_PR_STALE }}
|
|
||||||
days-before-pr-close: ${{ env.DAYS_BEFORE_PR_CLOSE }}
|
|
||||||
|
|
||||||
# issue config
|
|
||||||
days-before-issue-stale: -1 # ignore issues for now
|
|
102
.github/workflows/tools_tests.yaml
vendored
102
.github/workflows/tools_tests.yaml
vendored
@ -1,102 +0,0 @@
|
|||||||
name: tools
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
env:
|
|
||||||
BASE_IMAGE: openpilot-base
|
|
||||||
DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
BUILD: selfdrive/test/docker_build.sh base
|
|
||||||
|
|
||||||
RUN: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -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
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
plotjuggler:
|
|
||||||
name: plotjuggler
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
timeout-minutes: 45
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Build openpilot
|
|
||||||
timeout-minutes: 5
|
|
||||||
run: ${{ env.RUN }} "scons -j$(nproc) cereal/ common/ --minimal"
|
|
||||||
- name: Test PlotJuggler
|
|
||||||
timeout-minutes: 2
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "pytest tools/plotjuggler/"
|
|
||||||
|
|
||||||
simulator:
|
|
||||||
name: simulator
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
if: github.repository == 'commaai/openpilot'
|
|
||||||
timeout-minutes: 45
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Setup to push to repo
|
|
||||||
if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot'
|
|
||||||
run: |
|
|
||||||
echo "PUSH_IMAGE=true" >> "$GITHUB_ENV"
|
|
||||||
$DOCKER_LOGIN
|
|
||||||
- name: Build and push sim image
|
|
||||||
run: |
|
|
||||||
selfdrive/test/docker_build.sh sim
|
|
||||||
|
|
||||||
devcontainer:
|
|
||||||
name: devcontainer
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Use local image for testing devcontainer with latest base image
|
|
||||||
run: |
|
|
||||||
echo "USE_LOCAL_IMAGE=true" >> "$GITHUB_ENV"
|
|
||||||
- name: Setup Dev Container CLI
|
|
||||||
run: npm install -g @devcontainers/cli
|
|
||||||
- name: Build dev container image
|
|
||||||
run: devcontainer build --workspace-folder .
|
|
||||||
- name: Run dev container
|
|
||||||
run: |
|
|
||||||
mkdir -p /tmp/devcontainer_scons_cache/
|
|
||||||
cp -r $GITHUB_WORKSPACE/.ci_cache/scons_cache/. /tmp/devcontainer_scons_cache/
|
|
||||||
devcontainer up --workspace-folder .
|
|
||||||
- name: Test environment
|
|
||||||
run: |
|
|
||||||
devcontainer exec --workspace-folder . scons -j$(nproc) cereal/ common/
|
|
||||||
devcontainer exec --workspace-folder . pip install pip-install-test
|
|
||||||
devcontainer exec --workspace-folder . touch /home/batman/.comma/auth.json
|
|
||||||
devcontainer exec --workspace-folder . sudo touch /root/test.txt
|
|
||||||
|
|
||||||
notebooks:
|
|
||||||
name: notebooks
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
if: false && github.repository == 'commaai/openpilot'
|
|
||||||
timeout-minutes: 45
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: ./.github/workflows/setup-with-retry
|
|
||||||
- name: Build openpilot
|
|
||||||
timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 10 || 30) }} # allow more time when we missed the scons cache
|
|
||||||
run: ${{ env.RUN }} "scons -j$(nproc)"
|
|
||||||
- name: Test notebooks
|
|
||||||
timeout-minutes: 3
|
|
||||||
run: |
|
|
||||||
${{ env.RUN }} "pip install nbmake && pytest --nbmake tools/car_porting/examples/"
|
|
Loading…
x
Reference in New Issue
Block a user