name: Build and Upload Penpot Bundles on: workflow_dispatch: inputs: zip_mode: description: 'Bundle packaging mode' required: false default: 'individual' type: choice options: - individual - all push: branches: - github-actions-bundle-build env: ZIP_MODE: ${{ github.event.inputs.zip_mode }} jobs: build-bundles: name: Build frontend, backend, exporter and upload bundles runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Penpot CI Builder Image run: | docker build \ --build-arg EXTERNAL_UID=1000 \ --build-arg EXTERNAL_GID=1000 \ -t penpotapp/penpot-ci-builder:latest \ -f docker/devenv/Dockerfile . docker/devenv - name: Run manage.sh build-bundle from host run: ./manage.sh build-bundle - name: Create README and zip bundles run: | echo "\u2728 Generating bundle documentation and packaging..." # Frontend README echo "# Penpot Frontend Bundle" > frontend/README.md echo "This bundle contains the compiled frontend of Penpot." >> frontend/README.md # Backend README echo "# Penpot Backend Bundle" > backend/README.md echo "This bundle contains the backend artifacts of Penpot." >> backend/README.md # Exporter README echo "# Penpot Exporter Bundle" > exporter/README.md echo "This bundle contains the export module artifacts of Penpot." >> exporter/README.md if [[ \"${ZIP_MODE}\" == \"all\" ]]; then echo "Generating penpot-all-bundles.zip" mkdir -p bundles/all-in-one/frontend bundles/all-in-one/backend bundles/all-in-one/exporter cp -r frontend/* bundles/all-in-one/frontend/ cp -r backend/* bundles/all-in-one/backend/ cp -r exporter/* bundles/all-in-one/exporter/ echo "# Penpot Bundles" > bundles/all-in-one/README.md echo "" >> bundles/all-in-one/README.md echo "This package contains all Penpot build artifacts." >> bundles/all-in-one/README.md echo "" >> bundles/all-in-one/README.md echo "- frontend/: Contains the compiled frontend." >> bundles/all-in-one/README.md echo "- backend/: Contains the backend services." >> bundles/all-in-one/README.md echo "- exporter/: Contains the export tools." >> bundles/all-in-one/README.md echo "" >> bundles/all-in-one/README.md echo "To deploy, extract and copy the desired bundle to the corresponding environment." >> bundles/all-in-one/README.md cd bundles zip -r penpot-all-bundles.zip all-in-one else echo "Generating individual zip files" zip -r frontend.zip frontend zip -r backend.zip backend zip -r exporter.zip exporter fi - name: Upload combined bundle (if exists) if: env.ZIP_MODE == 'all' uses: actions/upload-artifact@v4 with: name: penpot-all-bundles path: bundles/penpot-all-bundles.zip - name: Upload frontend bundle if: env.ZIP_MODE != 'all' uses: actions/upload-artifact@v4 with: name: frontend-bundle path: frontend.zip - name: Upload backend bundle if: env.ZIP_MODE != 'all' uses: actions/upload-artifact@v4 with: name: backend-bundle path: backend.zip - name: Upload exporter bundle if: env.ZIP_MODE != 'all' uses: actions/upload-artifact@v4 with: name: exporter-bundle path: exporter.zip