diff --git a/.github/workflows/deploy-firmware.yaml b/.github/workflows/deploy-firmware.yaml new file mode 100644 index 00000000..b1e0918e --- /dev/null +++ b/.github/workflows/deploy-firmware.yaml @@ -0,0 +1,100 @@ +--- +# Build & Deploy the ESPHome firmwares for the Home Assistant Glow project. +name: Deploy firmware + +on: + release: + types: + - published + workflow_dispatch: + +jobs: + build-firmware: + name: Build firmware + runs-on: ubuntu-latest + steps: + - name: 🔨 Build firmware + uses: ./.github/workflows/build-firmware.yaml + with: + release-url: ${{ github.event.release.html_url }} + + combined-manifests: + name: Combine ${{ matrix.project }} manifests + runs-on: ubuntu-latest + needs: build-firmware + strategy: + fail-fast: false + matrix: + include: + - project: home-assistant-glow + name: Home Assistant Glow + steps: + - name: ⤵️ Download specific artifacts + uses: actions/download-artifact@v4.1.7 + with: + pattern: build-${{ matrix.project }}-* + merge-multiple: true + path: files + run-id: ${{ needs.build-firmware.outputs.run-id }} + - name: 🔨 Generate device manifest.json + run: | + version=$(cat files/*/version | sort -V | tail -n 1) + jq -s --arg version "$version" '{"name": "${{ matrix.name }}", "version": $version, "home_assistant_domain": "esphome", "builds":.}' files/*/manifest.json > files/manifest.json + - name: 🧪 Display structure of job + run: ls -R + - name: ⬆️ Upload project artifact + uses: actions/upload-artifact@v4.3.3 + with: + name: ${{ matrix.project }} + path: files + retention-days: 1 + + build-docs: + name: Build documentation + # if: contains(fromJSON('["workflow_dispatch", "release"]'), github.event_name) && github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + needs: combined-manifests + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: ⬇️ Download all artifacts + uses: actions/download-artifact@v4.1.7 + with: + pattern: "!build-*" + path: output + - name: 🗂️ Move firmware folders to static + run: mv output/* docs/static + - name: 🧪 Display structure of job + run: ls -R + + - name: 🏗️ Set up Node.js + uses: actions/setup-node@v4.0.2 + with: + node-version: 20.x + - name: 🏗️ Install Docusaurus dependencies + run: npm install --frozen-lockfile --non-interactive + working-directory: docs + - name: 🚀 Build Docusaurus + run: npm run build + working-directory: docs + - name: ⬆️ Upload pages artifacts + uses: actions/upload-pages-artifact@v3.0.1 + with: + path: docs/build + + # deploy: + # name: Deploy to GitHub Pages + # runs-on: ubuntu-latest + # needs: build-docs + # permissions: + # pages: write + # id-token: write + # environment: + # name: github-pages + # url: ${{ steps.deployment.outputs.page_url }} + # steps: + # - name: 🏗️ Setup Github Pages + # uses: actions/configure-pages@v5.0.0 + # - name: 🚀 Deploy to Github Pages + # uses: actions/deploy-pages@v4.0.5 + # id: deployment