From 17c387d5a00cee8222067dd67d637d3bfa0461fc Mon Sep 17 00:00:00 2001 From: microHoffman Date: Sat, 30 Nov 2024 11:03:23 +0000 Subject: [PATCH] ci: adjust loading of different env file --- .env.example | 12 ----- .github/workflows/deploy.yml | 99 +++++++++++++++++++++++++++++++++++ bun.lockb | Bin 637092 -> 637497 bytes env/.env.app.development | 13 +++++ env/.env.app.production | 13 +++++ env/.env.example | 13 +++++ package.json | 6 ++- 7 files changed, 142 insertions(+), 14 deletions(-) delete mode 100644 .env.example create mode 100644 .github/workflows/deploy.yml create mode 100644 env/.env.app.development create mode 100644 env/.env.app.production create mode 100644 env/.env.example diff --git a/.env.example b/.env.example deleted file mode 100644 index d88a717..0000000 --- a/.env.example +++ /dev/null @@ -1,12 +0,0 @@ -# Network and services -NEXT_PUBLIC_ENABLED_CHAIN_IDS="TODO (e.g. 1,11155111)" - -# ipfs config -NEXT_PUBLIC_IPFS_ENDPOINTS=https://ipfs.io/ipfs,https://api-staging.pwn.xyz/ipfs,https://gateway.pinata.cloud/ipfs,https://dweb.link/ipfs,https://4everland.io/ipfs - -# api keys -NEXT_PUBLIC_ETHEREUM_RPC_URL="TODO" -NEXT_PUBLIC_SEPOLIA_RPC_URL="TODO" -NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID="TODO" -NEXT_PUBLIC_WEB3_STORAGE_KEY="TODO" -NEXT_PUBLIC_ETHERSCAN_API_KEY="TODO" diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..6adbf8e --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,99 @@ +name: Deploy app +on: + workflow_call: + pull_request: + push: + branches: + - "master" + +env: + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Determine environment file + shell: bash + run: | + if [ "$BRANCH_NAME" = "master" ]; then + echo "ENV_FILE=.env.production" >> $GITHUB_ENV + echo "BUILD_COMMAND=bun run build-prod" >> $GITHUB_ENV + else + echo "ENV_FILE=.env.development" >> $GITHUB_ENV + echo "BUILD_COMMAND=bun run build-dev" >> $GITHUB_ENV + fi + + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version-file: 'package.json' + + - uses: oven-sh/setup-bun@v2 + + - uses: actions/cache@v4 + with: + path: ~/.bun/install/cache + key: ${{ runner.os }}-${{ matrix.bun }}-bun-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.bun }}-bun- + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Fill env values with secrets + uses: Langsdorf/env-replace@v1.0.6 + with: + file: "~/env/${{ env.ENV_FILE }}" + replace-all: | + NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID=${{ secrets.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID }} + NEXT_PUBLIC_ETHEREUM_RPC_URL=${{ secrets.NEXT_PUBLIC_ETHEREUM_RPC_URL }} + NEXT_PUBLIC_SEPOLIA_RPC_URL=${{ secrets.NEXT_PUBLIC_SEPOLIA_RPC_URL }} + NEXT_PUBLIC_WEB3_STORAGE_KEY=${{ secrets.NEXT_PUBLIC_WEB3_STORAGE_KEY }} + NEXT_PUBLIC_ETHERSCAN_API_KEY=${{ secrets.NEXT_PUBLIC_ETHERSCAN_API_KEY }} + + - name: Build + run: ${{ env.BUILD_COMMAND }} + + - name: Deploy to Cloudflare + id: deploy-cloudflare + uses: cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + gitHubToken: ${{ secrets.GITHUB_TOKEN }} + command: pages deploy .output/public --project-name=pwn-voting-ui --branch=${{ env.BRANCH_NAME }} --commit-hash=${{ github.sha }} + + - name: Add comment to PR with deployed URL + if: github.event_name == 'pull_request' + uses: thollander/actions-comment-pull-request@v3 + with: + message: | + Deployed on <${{ steps.deploy-cloudflare.outputs.pages-deployment-alias-url }}>! + comment-tag: execution + + # TODO make this work! + # - name: Deploy to IPFS + # if: ${{ env.BRANCH_NAME }} == 'master' + # uses: web3-storage/add-to-web3@v3 + # id: deploy-ipfs + # with: + # path_to_add: '.output/public' + # proof: './delegation.car' + # secret_key: ${{ secrets.WEB3_STORAGE_KEY }} + + # - name: Update DNSLink + # if: ${{ env.BRANCH_NAME }} == 'master' + # env: + # CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + # CLOUDFLARE_ZONE_ID: ${{ secrets.CLOUDFLARE_ZONE_ID }} + # RECORD_DOMAIN: "pwn.xyz" + # RECORD_NAME: "_dnslink.staking" + # uses: PabiGamito/cloudflare-update-dnslink@master + # with: + # cid: ${{ steps.deploy-ipfs.outputs.cid }} + + diff --git a/bun.lockb b/bun.lockb index b7ea06c5004c7175345aeb1767fd46b175c12179..acb97a673a332fdd28e917e665620ecbe66dc80c 100755 GIT binary patch delta 36153 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 delta 36481 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