From 3465a82f81b746d11ff7fd075efe9902ded1bc07 Mon Sep 17 00:00:00 2001 From: Sebastian Scatularo Date: Tue, 21 Nov 2023 10:25:17 -0300 Subject: [PATCH] setup reusable workflow --- .github/workflows/build-non-prod.yml | 315 +++++++++++++++++++++++++++ .github/workflows/testnet.yml | 314 +------------------------- 2 files changed, 326 insertions(+), 303 deletions(-) create mode 100644 .github/workflows/build-non-prod.yml diff --git a/.github/workflows/build-non-prod.yml b/.github/workflows/build-non-prod.yml new file mode 100644 index 000000000..49f84fe91 --- /dev/null +++ b/.github/workflows/build-non-prod.yml @@ -0,0 +1,315 @@ +name: Build Non Prod + +on: + workflow_call: + inputs: + name: + type: string + required: true + separator: + type: string + required: true + outputs: + branch-sha: + description: "Branch SHA" + value: ${{ jobs.branch-sha.outputs.value }} + pkg-version: + description: "NPM Package Version" + value: ${{ jobs.token-bridge.outputs.pkg-version }} +jobs: + branch-sha: + name: Compute Branch Sha + runs-on: ubuntu-latest + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-sha + outputs: + value: ${{ steps.set-version.outputs._BRANCH_NAME_SHA }} + steps: + - name: Set Version + id: set-version + run: echo "_BRANCH_NAME_SHA=$(echo ${{ github.event.pull_request.head.ref }} | sha256sum | cut -c -10)" >> "${GITHUB_OUTPUT}" + + docs: + name: "Documentation" + runs-on: "ubuntu-latest" + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-docs + needs: + - branch-sha + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up Node environment + uses: actions/setup-node@v3 + with: + node-version: v16.19.1 + - name: Install dependencies + run: | + pushd apps/docs + npm ci + - name: Build + env: + PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}/docs" + run: | + pushd apps/docs + npm run build + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: build-docs + path: apps/docs/build + + advance-tools: + name: "Advance Tools" + runs-on: xlabs-large-runner + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-advance-tools + cancel-in-progress: true + environment: Cloudflare-Preview + needs: + - branch-sha + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + repository: xLabs/portal-bridge-ui + # TODO replace with the advance tools branch after cutover + ref: main + - name: Set up Node environment + uses: actions/setup-node@v3 + with: + node-version: v18.17.1 + - name: Setup Git + run: | + git config user.name "xLabs CI" + git config user.email "devops@xlabs.xyz" + - name: Install dependencies + run: npm install + - name: Set Version + id: set-version + run: npm version $(node -p -e "require('./package.json').version")-${{inputs.separator}}$(echo ${{ github.sha }} | cut -c -10) + - name: Build + env: + PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}/advance-tools" + NODE_OPTIONS: "--max-old-space-size=10240" + GENERATE_SOURCEMAP: false + REACT_APP_CLUSTER: ${{ vars.REACT_APP_CLUSTER }} + REACT_APP_SOLANA_API_URL: ${{ vars.REACT_APP_SOLANA_API_URL }} + REACT_APP_COVALENT_API_KEY: ${{ secrets.REACT_APP_COVALENT_API_KEY }} + REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID }} + run: | + echo 'REACT_APP_VERSION=$npm_package_version' > .env + npm run build + cd build + npm run set-version + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: build-advance-tools + path: build + + redirects: + name: "Redirects" + runs-on: "ubuntu-latest" + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-redirects + cancel-in-progress: true + needs: + - branch-sha + steps: + - name: Set up Node environment + uses: actions/setup-node@v3 + with: + node-version: v18.17.1 + - name: Checkout Portal Bridge + uses: actions/checkout@v3 + - name: Build Redirects + env: + PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}" + run: | + pushd apps/redirects + npm ci + npm run build + - name: Upload Portal Bridge Artifact + uses: actions/upload-artifact@v3 + with: + name: build-redirects + path: apps/redirects/dist + + usdc-bridge: + name: "USDC Bridge" + runs-on: "ubuntu-latest" + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-usdc-bridge + cancel-in-progress: true + environment: Cloudflare-Preview + needs: + - branch-sha + outputs: + pkg-version: ${{ steps.set-version.outputs._PKG_VERSION }} + steps: + - name: Set up Node environment + uses: actions/setup-node@v3 + with: + node-version: v18.17.1 + - name: Checkout Wormhole Connect + uses: actions/checkout@v3 + with: + repository: wormhole-foundation/wormhole-connect + ref: development + path: wormhole-connect + - name: Build Wormhole Connect + run: | + npm install -g husky + pushd wormhole-connect + npm ci --workspaces --if-present + npm run build + npm link --workspaces --if-present + - name: Checkout Custom Wormhole Connect Loader + uses: actions/checkout@v3 + with: + path: connect-loader + - name: Setup Git + run: | + pushd connect-loader + git config user.name "xLabs CI" + git config user.email "devops@xlabs.xyz" + - name: Set Portal Bridge Version + id: set-version + run: | + pushd connect-loader/apps/connect + npm version $(node -p -e "require('./package.json').version")-${{inputs.separator}}$(echo ${{ github.sha }} | cut -c -10) + echo "_PKG_VERSION=$(node -p -e "require('./package.json').version")" >> "${GITHUB_OUTPUT}" + - name: Build Custom Wormhole Connect Loader + env: + PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}" + VITE_APP_VERSION: ${{ steps.set-version.outputs._PKG_VERSION }} + VITE_APP_CLUSTER: ${{ vars.REACT_APP_CLUSTER }} + run: | + pushd connect-loader/apps/connect + npm ci + npm link @wormhole-foundation/wormhole-connect + echo 'VITE_APP_VERSION=$npm_package_version' > .env + npm run build:usdc-bridge + - name: Upload Portal Bridge Artifact + uses: actions/upload-artifact@v3 + with: + name: build-usdc-bridge + path: connect-loader/apps/connect/dist + + token-bridge: + name: "Token Bridge" + runs-on: "ubuntu-latest" + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-token-bridge + cancel-in-progress: true + environment: Cloudflare-Preview + needs: + - branch-sha + outputs: + pkg-version: ${{ steps.set-version.outputs._PKG_VERSION }} + steps: + - name: Set up Node environment + uses: actions/setup-node@v3 + with: + node-version: v18.17.1 + - name: Checkout Wormhole Connect + uses: actions/checkout@v3 + with: + repository: wormhole-foundation/wormhole-connect + ref: development + path: wormhole-connect + - name: Build Wormhole Connect + run: | + npm install -g husky + pushd wormhole-connect + npm ci --workspaces --if-present + npm run build + npm link --workspaces --if-present + - name: Checkout Custom Wormhole Connect Loader + uses: actions/checkout@v3 + with: + path: connect-loader + - name: Setup Git + run: | + pushd connect-loader + git config user.name "xLabs CI" + git config user.email "devops@xlabs.xyz" + - name: Set Portal Bridge Version + id: set-version + run: | + pushd connect-loader/apps/connect + echo "_PKG_VERSION=$(node -p -e "require('./package.json').version")-${{inputs.separator}}$(echo ${{ github.sha }} | cut -c -10)" >> "${GITHUB_OUTPUT}" + - name: Build Custom Wormhole Connect Loader + env: + PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}" + VITE_APP_VERSION: ${{ steps.set-version.outputs._PKG_VERSION }} + VITE_APP_CLUSTER: ${{ vars.REACT_APP_CLUSTER }} + run: | + pushd connect-loader/apps/connect + npm ci + npm link @wormhole-foundation/wormhole-connect + echo 'VITE_APP_VERSION=$npm_package_version' > .env + npm run build:token-bridge + - name: Upload Portal Bridge Artifact + uses: actions/upload-artifact@v3 + with: + name: build-token-bridge + path: connect-loader/apps/connect/dist + + publish: + name: "Publish" + needs: + - advance-tools + - usdc-bridge + - token-bridge + - redirects + - docs + runs-on: "ubuntu-latest" + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-publish + cancel-in-progress: true + permissions: + contents: read + packages: write + steps: + - name: Download Artifact + uses: actions/download-artifact@v3 + with: + name: build-token-bridge + - name: Download Artifact + uses: actions/download-artifact@v3 + with: + name: build-usdc-bridge + path: usdc-bridge + - name: Download Artifact + uses: actions/download-artifact@v3 + with: + name: build-advance-tools + path: advance-tools + - name: Download Artifact + uses: actions/download-artifact@v3 + with: + name: build-docs + path: docs + - name: Download Artifact + uses: actions/download-artifact@v3 + with: + name: build-redirects + - name: Set up GitHub NPM registry + uses: actions/setup-node@v3 + with: + node-version: v16.19.1 + registry-url: https://npm.pkg.github.com + - name: Create Package.json + run: | + jq -n --arg version ${{ needs.token-bridge.outputs.pkg-version }} '{"name": "@xlabs/portal-bridge-ui", "version": $version }' > package.json + - name: Upload Portal Bridge Artifact + uses: actions/upload-artifact@v3 + with: + name: build-all + path: . + - name: Publish + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: npm publish \ No newline at end of file diff --git a/.github/workflows/testnet.yml b/.github/workflows/testnet.yml index ad5ac8acb..addb5ee9f 100644 --- a/.github/workflows/testnet.yml +++ b/.github/workflows/testnet.yml @@ -5,307 +5,15 @@ on: types: [opened, synchronize, reopened] jobs: - branch-sha: - name: Compute Branch Sha - runs-on: ubuntu-latest - outputs: - value: ${{ steps.set-version.outputs._BRANCH_NAME_SHA }} - steps: - - name: Set Version - id: set-version - run: echo "_BRANCH_NAME_SHA=$(echo ${{ github.event.pull_request.head.ref }} | sha256sum | cut -c -10)" >> "${GITHUB_OUTPUT}" - - docs: - name: "Documentation" - runs-on: "ubuntu-latest" - concurrency: - group: ${{ github.ref }}-docs - needs: - - branch-sha - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Set up Node environment - uses: actions/setup-node@v3 - with: - node-version: v16.19.1 - - name: Install dependencies - run: | - pushd apps/docs - npm ci - - name: Build - env: - PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}/docs" - run: | - pushd apps/docs - npm run build - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: build-docs - path: apps/docs/build - - advance-tools: - name: "Advance Tools" - runs-on: xlabs-large-runner - concurrency: - group: ${{ github.ref }}-advance-tools - cancel-in-progress: true - environment: Cloudflare-Preview - needs: - - branch-sha - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - repository: xLabs/portal-bridge-ui - # TODO replace with the advance tools branch after cutover - ref: main - - name: Set up Node environment - uses: actions/setup-node@v3 - with: - node-version: v18.17.1 - - name: Setup Git - run: | - git config user.name "xLabs CI" - git config user.email "devops@xlabs.xyz" - - name: Install dependencies - run: npm install - - name: Set Version - id: set-version - run: npm version $(node -p -e "require('./package.json').version")-T$(echo ${{ github.sha }} | cut -c -10) - - name: Build - env: - PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}/advance-tools" - NODE_OPTIONS: "--max-old-space-size=10240" - GENERATE_SOURCEMAP: false - REACT_APP_CLUSTER: ${{ vars.REACT_APP_CLUSTER }} - REACT_APP_SOLANA_API_URL: ${{ vars.REACT_APP_SOLANA_API_URL }} - REACT_APP_COVALENT_API_KEY: ${{ secrets.REACT_APP_COVALENT_API_KEY }} - REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID }} - run: | - echo 'REACT_APP_VERSION=$npm_package_version' > .env - npm run build - cd build - npm run set-version - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: build-advance-tools - path: build - - redirects: - name: "Redirects" - runs-on: "ubuntu-latest" - concurrency: - group: ${{ github.ref }}-redirects - cancel-in-progress: true - needs: - - branch-sha - steps: - - name: Set up Node environment - uses: actions/setup-node@v3 - with: - node-version: v18.17.1 - - name: Checkout Portal Bridge - uses: actions/checkout@v3 - - name: Build Redirects - env: - PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}" - run: | - pushd apps/redirects - npm ci - npm run build - - name: Upload Portal Bridge Artifact - uses: actions/upload-artifact@v3 - with: - name: build-redirects - path: apps/redirects/dist - - usdc-bridge: - name: "USDC Bridge" - runs-on: "ubuntu-latest" - concurrency: - group: ${{ github.ref }}-usdc-bridge - cancel-in-progress: true - environment: Cloudflare-Preview - needs: - - branch-sha - outputs: - pkg-version: ${{ steps.set-version.outputs._PKG_VERSION }} - steps: - - name: Set up Node environment - uses: actions/setup-node@v3 - with: - node-version: v18.17.1 - - name: Checkout Wormhole Connect - uses: actions/checkout@v3 - with: - repository: wormhole-foundation/wormhole-connect - ref: development - path: wormhole-connect - - name: Build Wormhole Connect - run: | - npm install -g husky - pushd wormhole-connect - npm ci --workspaces --if-present - npm run build - npm link --workspaces --if-present - - name: Checkout Custom Wormhole Connect Loader - uses: actions/checkout@v3 - with: - path: connect-loader - - name: Setup Git - run: | - pushd connect-loader - git config user.name "xLabs CI" - git config user.email "devops@xlabs.xyz" - - name: Set Portal Bridge Version - id: set-version - run: | - pushd connect-loader/apps/connect - npm version $(node -p -e "require('./package.json').version")-T$(echo ${{ github.sha }} | cut -c -10) - echo "_PKG_VERSION=$(node -p -e "require('./package.json').version")" >> "${GITHUB_OUTPUT}" - - name: Build Custom Wormhole Connect Loader - env: - PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}" - VITE_APP_VERSION: ${{ steps.set-version.outputs._PKG_VERSION }} - VITE_APP_CLUSTER: ${{ vars.REACT_APP_CLUSTER }} - run: | - pushd connect-loader/apps/connect - npm ci - npm link @wormhole-foundation/wormhole-connect - echo 'VITE_APP_VERSION=$npm_package_version' > .env - npm run build:usdc-bridge - - name: Upload Portal Bridge Artifact - uses: actions/upload-artifact@v3 - with: - name: build-usdc-bridge - path: connect-loader/apps/connect/dist - - token-bridge: - name: "Token Bridge" - runs-on: "ubuntu-latest" - concurrency: - group: ${{ github.ref }}-token-bridge - cancel-in-progress: true - environment: Cloudflare-Preview - needs: - - branch-sha - outputs: - pkg-version: ${{ steps.set-version.outputs._PKG_VERSION }} - steps: - - name: Set up Node environment - uses: actions/setup-node@v3 - with: - node-version: v18.17.1 - - name: Checkout Wormhole Connect - uses: actions/checkout@v3 - with: - repository: wormhole-foundation/wormhole-connect - ref: development - path: wormhole-connect - - name: Build Wormhole Connect - run: | - npm install -g husky - pushd wormhole-connect - npm ci --workspaces --if-present - npm run build - npm link --workspaces --if-present - - name: Checkout Custom Wormhole Connect Loader - uses: actions/checkout@v3 - with: - path: connect-loader - - name: Setup Git - run: | - pushd connect-loader - git config user.name "xLabs CI" - git config user.email "devops@xlabs.xyz" - - name: Set Portal Bridge Version - id: set-version - run: | - pushd connect-loader/apps/connect - echo "_PKG_VERSION=$(node -p -e "require('./package.json').version")-T$(echo ${{ github.sha }} | cut -c -10)" >> "${GITHUB_OUTPUT}" - - name: Build Custom Wormhole Connect Loader - env: - PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}" - VITE_APP_VERSION: ${{ steps.set-version.outputs._PKG_VERSION }} - VITE_APP_CLUSTER: ${{ vars.REACT_APP_CLUSTER }} - run: | - pushd connect-loader/apps/connect - npm ci - npm link @wormhole-foundation/wormhole-connect - echo 'VITE_APP_VERSION=$npm_package_version' > .env - npm run build:token-bridge - - name: Upload Portal Bridge Artifact - uses: actions/upload-artifact@v3 - with: - name: build-token-bridge - path: connect-loader/apps/connect/dist - - publish: - name: "Publish" - needs: - - advance-tools - - usdc-bridge - - token-bridge - - redirects - - docs - runs-on: "ubuntu-latest" - concurrency: - group: ${{ github.ref }}-publish - cancel-in-progress: true - permissions: - contents: read - packages: write - steps: - - name: Download Artifact - uses: actions/download-artifact@v3 - with: - name: build-token-bridge - - name: Download Artifact - uses: actions/download-artifact@v3 - with: - name: build-usdc-bridge - path: usdc-bridge - - name: Download Artifact - uses: actions/download-artifact@v3 - with: - name: build-advance-tools - path: advance-tools - - name: Download Artifact - uses: actions/download-artifact@v3 - with: - name: build-docs - path: docs - - name: Download Artifact - uses: actions/download-artifact@v3 - with: - name: build-redirects - - name: Set up GitHub NPM registry - uses: actions/setup-node@v3 - with: - node-version: v16.19.1 - registry-url: https://npm.pkg.github.com - - name: Create Package.json - run: | - jq -n --arg version ${{ needs.token-bridge.outputs.pkg-version }} '{"name": "@xlabs/portal-bridge-ui", "version": $version }' > package.json - - name: Upload Portal Bridge Artifact - uses: actions/upload-artifact@v3 - with: - name: build-all - path: . - - name: Publish - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: npm publish - + build: + uses: ./.github/workflows/build-non-prod.yml + with: + name: testnet + separator: T deploy: name: "Deploy Testnet" needs: - - publish - - branch-sha - - token-bridge + - build runs-on: "ubuntu-latest" concurrency: group: ${{ github.ref }}-deploy-testnet @@ -325,13 +33,13 @@ jobs: - name: Trigger a testnet Deploy run: | sleep 30s - mkdir -p testnet/${{ needs.branch-sha.outputs.value }} - pushd testnet/${{ needs.branch-sha.outputs.value }} + mkdir -p testnet/${{ needs.build.outputs.branch-sha }} + pushd testnet/${{ needs.build.outputs.branch-sha }} [[ ! -f .latest ]] && touch .latest [[ ! -f .artifacts ]] && touch .artifacts cat .latest >> .artifacts - echo ${{ needs.token-bridge.outputs.pkg-version }} > .latest + echo ${{ needs.build.outputs.pkg-version }} > .latest git add .artifacts .latest - git commit -m"Update testnet artifacts ${{ needs.token-bridge.outputs.pkg-version }}" + git commit -m"Update testnet artifacts ${{ needs.build.outputs.pkg-version }}" git push - echo "The testnet URL is: ${{ vars.TESTNET_ROOT_URL }}/${{ needs.branch-sha.outputs.value }}/" >> ${GITHUB_STEP_SUMMARY} \ No newline at end of file + echo "The testnet URL is: ${{ vars.TESTNET_ROOT_URL }}/${{ needs.build.outputs.branch-sha }}/" >> ${GITHUB_STEP_SUMMARY} \ No newline at end of file