diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 00000000..57bfe0e5 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,22 @@ +name-template: $NEXT_PATCH_VERSION +tag-template: $NEXT_PATCH_VERSION + +categories: + - title: 🚀 New features and improvements + labels: + - enhancement + - title: 🐛 Bug Fixes + labels: + - bug + - title: 🚦 Internal changes + labels: + - internal + +exclude-labels: + - no-changelog + - duplicate + - invalid + - wontfix + +template: | + $CHANGES diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..a7d99cce --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,85 @@ +name: PlatformIO CI +on: + push: + release: + types: [published] + +jobs: + + build: + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + environment: [mk4, mk5, mk6, native] + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Cache PlatformIO + uses: actions/cache@v3 + with: + path: | + ~/.cache/pip + ~/.platformio/.cache + key: ${{ runner.os }}-pio + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' + + - name: Install PlatformIO + run: | + pip install --upgrade platformio + + - name: Cache project build cache for ${{ matrix.environment }} + uses: actions/cache@v3 + with: + path: | + .pio/build-cache + key: ${{ runner.os }}-${{ matrix.environment }}-build-cache + + - name: Build application (${{ matrix.environment }}) + if: matrix.environment != 'native' + run: pio run --environment ${{ matrix.environment }} + + - name: Rename firmware artifact + if: matrix.environment != 'native' + run: cp ${{ github.workspace }}/.pio/build/${{ matrix.environment }}/firmware.bin ugly-duckling-${{ matrix.environment }}.bin + + - name: Upload firmware artifact + if: matrix.environment != 'native' + uses: "actions/upload-artifact@v3" + with: + path: ugly-duckling-${{ matrix.environment }}.bin + if-no-files-found: error + + - name: Run unit tests + if: matrix.environment == 'native' + run: pio test --environment native + + release: + needs: build + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + steps: + - name: Download artifacts + uses: actions/download-artifact@v3 + + - name: Display structure of downloaded files + run: ls -R + + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: artifact/* + + ready-to-merge: + needs: build + if: ${{ github.ref != 'refs/heads/main' }} + runs-on: ubuntu-latest + steps: + - name: Dummy + run: echo "Everything is green across the board on ${{ github.ref }}" diff --git a/.github/workflows/enforce-pr-labels.yml b/.github/workflows/enforce-pr-labels.yml new file mode 100644 index 00000000..83a7fda1 --- /dev/null +++ b/.github/workflows/enforce-pr-labels.yml @@ -0,0 +1,13 @@ +name: Enforce PR labels + +on: + pull_request: + types: [labeled, unlabeled, opened, edited, synchronize] +jobs: + enforce-label: + runs-on: ubuntu-latest + steps: + - uses: yogevbd/enforce-label-action@2.2.2 + with: + REQUIRED_LABELS_ANY: "bug,enhancement,internal,no-changelog,invalid,wontfix" + REQUIRED_LABELS_ANY_DESCRIPTION: "Select at least one label for the PR" diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml new file mode 100644 index 00000000..170283b7 --- /dev/null +++ b/.github/workflows/release-drafter.yml @@ -0,0 +1,19 @@ +name: Release Drafter + +on: + push: + # branches to consider in the event; optional, defaults to all + branches: + - main + # pull_request event is required only for autolabeler + pull_request: + # Only following types are handled by the action, but one can default to all as well + types: [opened, reopened, synchronize] + +jobs: + update_release_draft: + runs-on: ubuntu-latest + steps: + - uses: release-drafter/release-drafter@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}