From 20fe8fb8da9689180455b2b454ce41e83c7cca08 Mon Sep 17 00:00:00 2001 From: Luiz Ferraz Date: Fri, 29 Mar 2024 17:20:56 -0300 Subject: [PATCH] feat: Initial example deploy configuration --- .github/workflows/example-deploys.yml | 79 +++++++++++++++++++++++++++ examples/deploy-cloudflare.sh | 35 ++++++++++++ examples/sitemap-ext/astro.config.mjs | 3 +- 3 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/example-deploys.yml create mode 100755 examples/deploy-cloudflare.sh diff --git a/.github/workflows/example-deploys.yml b/.github/workflows/example-deploys.yml new file mode 100644 index 00000000..e81cc661 --- /dev/null +++ b/.github/workflows/example-deploys.yml @@ -0,0 +1,79 @@ +name: Deploy Examples + +on: + workflow_dispatch: + push: + branches: + - main + merge_group: + pull_request: + paths-ignore: + - "**/*.md" + - ".github/ISSUE_TEMPLATE/**" + +# Automatically cancel older in-progress jobs on the same branch +concurrency: + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }} + cancel-in-progress: true + +defaults: + run: + shell: bash + +env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + FORCE_COLOR: true + ASTRO_TELEMETRY_DISABLED: true + # 7 GiB by default on GitHub, setting to 6 GiB + # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources + NODE_OPTIONS: --max-old-space-size=6144 + +jobs: + cloudflare: + name: 'Deploy "${{ matrix.example }}" to Cloudflare' + runs-on: ubuntu-latest + timeout-minutes: 3 + strategy: + matrix: + example: + - sitemap-ext + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup PNPM + uses: pnpm/action-setup@v2 + + - name: Setup Node + uses: actions/setup-node@main + with: + node-version: 20 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install + + - uses: schnerring/cloudflare-pages-branch-alias-action@v1 + id: pages-branch-alias + with: + # git-branch input + git-branch: ${{ github.head_ref }} + + - name: Build Packages + run: pnpm -w build + + - name: Build to Cloudflare + run: ./examples/deploy-cloudflare.sh ${{ matrix.example }} + env: + DEPLOY_SITE: "https://${{ steps.pages-branch-alias.outputs.branch-alias }}.inox-tools-ex-${{ matrix.example }}.pages.dev" + + - name: Discard all git changes + run: git restore . + + - name: Publish to Cloudflare Pages + run: pnpm dlx wrangler pages deploy dist --project-name 'inox-tools-ex-${{ matrix.example }}' --branch '${{ github.head_ref }}' + working-directory: examples/${{ matrix.example }} + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} diff --git a/examples/deploy-cloudflare.sh b/examples/deploy-cloudflare.sh new file mode 100755 index 00000000..653942f9 --- /dev/null +++ b/examples/deploy-cloudflare.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +########################################### +# Build an Astro Site to Cloudflare Pages # +########################################### + +set -exo pipefail + +PROJECT_NAME=$1 + +# Get the script directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +# Check that the project exists +if [ ! -d "$SCRIPT_DIR/$PROJECT_NAME" ]; then + echo "Project $PROJECT_NAME does not exist" >&2 + exit 1 +fi + +cd "$SCRIPT_DIR/$PROJECT_NAME" + +# Check that the project is an Astro project +if ! jq -e '.dependencies | has("astro")' package.json >/dev/null; then + echo "Project $PROJECT_NAME is not an Astro project" >&2 + exit 1 +fi + +# Configure the Astro project to deploy to Cloudflare Pages +pnpm astro add cloudflare --yes + +# Build the project +pnpm build + +# Restore the Astro project to its original state +git restore package.json astro.config.* diff --git a/examples/sitemap-ext/astro.config.mjs b/examples/sitemap-ext/astro.config.mjs index cb03d8ae..41a24a30 100644 --- a/examples/sitemap-ext/astro.config.mjs +++ b/examples/sitemap-ext/astro.config.mjs @@ -6,8 +6,7 @@ import node from '@astrojs/node'; // https://astro.build/config export default defineConfig({ - site: 'https://example.com', - base: '/sub-site', + site: process.env.DEPLOY_SITE ?? 'https://example.com', integrations: [ mdx(), sitemap({