Skip to content

Restore "Update workflows for all pull request tests in test.yml" #1324

Restore "Update workflows for all pull request tests in test.yml"

Restore "Update workflows for all pull request tests in test.yml" #1324

Workflow file for this run

name: Test
on:
pull_request:
workflow_dispatch:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.x
cache: 'pip'
- name: Install pip packages
run: |
python -m pip install --upgrade pip
- name: flake8
run: |
pip install flake8
flake8 .
- name: pydocstyle
run: |
pip install pydocstyle
pydocstyle .
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.x
cache: pip
- name: Verify dockerfiles
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
./generate.py
git diff --exit-code
env-check:
runs-on: ubuntu-latest
permissions:
contents: read
packages: read
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v6
with:
push: false
file: ros2/rolling.Dockerfile
target: base
tags: app:local
outputs: |
type=docker,name=app:local
cache-from: |
type=registry,ref=ghcr.io/${{ github.repository_owner }}/ros2:rolling-buildcache
- name: Run environment comparison
run: |
.github/scripts/env-compare.py app:local rolling
changes:
runs-on: ubuntu-latest
permissions:
contents: read # Required to analyze file changes
outputs:
dockerfiles: ${{ steps.filter.outputs.dockerfiles }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Find Changed Dockerfiles
id: filter
run: |
# Find changed .Dockerfile files between the PR branch and the base branch
changed_files=$(git diff --name-only origin/${{ github.base_ref }}...HEAD -- '*.Dockerfile')
echo "Changed Dockerfiles: $changed_files"
# Output the results as JSON
if [ -z "$changed_files" ]; then
echo '["none"]' > changed_dockerfiles.json
else
echo "$changed_files" | jq -R -s -c 'split("\n")[:-1]' > changed_dockerfiles.json
fi
echo "dockerfiles=$(cat changed_dockerfiles.json)" >> $GITHUB_OUTPUT
docker-build:
needs: changes
strategy:
fail-fast: false
matrix:
dockerfile: ${{ fromJSON(needs.changes.outputs.dockerfiles) }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Extract Label and Tag
id: extract
run: |
# Extract the full filename (e.g., label/tag.Dockerfile)
filename="${{ matrix.dockerfile }}"
# Extract label (e.g., 'label')
label=$(dirname "$filename")
# Extract tag (e.g., 'tag')
tag=$(basename "$filename" | cut -d. -f1)
echo "Label: $label, Tag: $tag"
# Set outputs for subsequent steps
echo "label=$label" >> $GITHUB_OUTPUT
echo "tag=$tag" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Test dockerfile build
if: ${{ matrix.dockerfile != 'none' }}
uses: docker/build-push-action@v6
with:
push: false
file: ${{ matrix.dockerfile }}
tags: |
ghcr.io/${{ github.repository_owner }}/${{ steps.extract.outputs.label }}:${{ steps.extract.outputs.tag }}
cache-from: |
type=registry,ref=ghcr.io/${{ github.repository_owner }}/${{ steps.extract.outputs.label }}:${{ steps.extract.outputs.tag }}-buildcache
type=gha
cache-to:
type=gha,mode=max
complete:
needs:
- lint
- generate
- env-check
- docker-build
runs-on: ubuntu-latest
steps:
- name: Check
run: echo "Completed successfully!"