diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..5be22c97c --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,306 @@ +name: Build Non Prod + +on: + workflow_call: + inputs: + name: + type: string + required: true + separator: + type: string + connect-branch: + type: string + required: true + default: development + advanced-tools-branch: + type: string + required: true + default: main + environment: + type: string + required: true + default: Cloudflare-Preview + public-url: + type: string + outputs: + pkg-version: + description: "NPM Package Version" + value: ${{ jobs.token-bridge.outputs.pkg-version }} +jobs: + docs: + name: "Documentation" + runs-on: "ubuntu-latest" + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-docs + 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: "${{ inputs.public-url }}/docs" +# 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 + + advanced-tools: + name: "Advance Tools" + runs-on: xlabs-large-runner + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-advanced-tools + cancel-in-progress: true + environment: ${{inputs.environment}} + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + repository: xLabs/portal-bridge-ui + # TODO replace with the advance tools branch after cutover + ref: ${{inputs.advanced-tools-branch}} + - 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 ci + - 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: "${{ inputs.public-url }}/advanced-tools" +# PUBLIC_URL: "/${{ needs.branch-sha.outputs.value }}/advanced-tools" + NODE_OPTIONS: "--max-old-space-size=10240" + GENERATE_SOURCEMAP: false + REACT_APP_BASE_URL: "${{ inputs.public-url }}" + 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-advanced-tools + path: build + + redirects: + name: "Redirects" + runs-on: "ubuntu-latest" + concurrency: + group: ${{ github.ref }}-${{inputs.name}}-redirects + cancel-in-progress: true + 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: "${{ inputs.public-url }}" + 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: ${{inputs.environment}} + 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: ${{inputs.connect-branch}} + 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: ${{ inputs.public-url }} + 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: ${{inputs.environment}} + 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: ${{inputs.connect-branch}} + 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: "${{ inputs.public-url }}" + 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: + - advanced-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-advanced-tools + path: advanced-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/preview.yml b/.github/workflows/preview.yml index 8c3fa1886..277d75bdb 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -5,16 +5,30 @@ on: types: [opened, synchronize, reopened] jobs: + branch-sha: + name: Compute Branch Sha + runs-on: ubuntu-latest + concurrency: + group: ${{ github.ref }}-preview-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}" build: name: "Build Preview" - uses: ./.github/workflows/build-non-prod.yml + uses: ./.github/workflows/build.yml with: name: preview separator: P connect-branch: portal-bridge advanced-tools-branch: advanced-tools environment: Cloudflare-Preview + public-url: "/${{ needs.branch-sha.outputs.value }}" secrets: inherit + needs: + - branch-sha deploy: name: "Deploy Preview" needs: diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 25230688c..da5592ea9 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -4,169 +4,23 @@ on: workflow_dispatch: jobs: - # cctp: - # name: "Build USDC Bridge (CCTP)" - # runs-on: "ubuntu-latest" - # concurrency: - # group: ${{ github.ref }}-cctp-release - # cancel-in-progress: true - # environment: Cloudflare-Page-Deploy - # steps: - # - name: Checkout repository - # uses: actions/checkout@v3 - # with: - # repository: xlabs/usdc-bridge - # ref: main - # - name: Set up Node environment - # uses: actions/setup-node@v3 - # with: - # node-version: v16.19.1 - # - name: Install dependencies - # run: npm ci - # - name: Set Version - # run: | - # echo "_BRANCH_NAME_SHA=$(echo ${{ github.event.pull_request.head.ref }} | sha256sum | cut -c -10)" >> "${GITHUB_ENV}" - # - name: Build - # env: - # DEPLOY: "true" - # NEXT_PUBLIC_NETWORK: ${{ vars.REACT_APP_CLUSTER }} - # NEXT_PUBLIC_BASE_PATH: "/usdc-bridge" - # run: npm run build - # - name: Upload Artifact - # uses: actions/upload-artifact@v3 - # with: - # name: release-stable-bridge - # path: out - - docs: - name: "Build Portal Bridge Documentation" - runs-on: "ubuntu-latest" - concurrency: - group: ${{ github.ref }}-portal-docs-preview - 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 docs - npm ci - - name: Set Version - run: | - echo "_BRANCH_NAME_SHA=$(echo ${{ github.event.pull_request.head.ref }} | sha256sum | cut -c -10)" >> "${GITHUB_ENV}" - - name: Build - run: | - pushd docs - npm run build - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: docs-release-build - path: docs/build - - portal: - name: "Build Portal Bridge" - runs-on: xlabs-large-runner - concurrency: - group: ${{ github.ref }}-portal-release - cancel-in-progress: true - permissions: - contents: read - packages: write - environment: Cloudflare-Page-Deploy - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Set up Node environment - uses: actions/setup-node@v3 - with: - node-version: v18.17.1 - registry-url: https://npm.pkg.github.com - - - name: Cache Node modules - id: cache-npm - uses: actions/cache@v3 - env: - cache-name: cache-node-modules - with: - path: ~/.npm - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - - name: Install dependencies - run: npm install - - - name: Build - env: - NODE_OPTIONS: "--max-old-space-size=10240" - 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_TRM_API_KEY: ${{ secrets.REACT_APP_TRM_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: release-portal-bridge - path: build - - publish: - name: "Publish" - needs: - - portal - #- cctp - - docs - runs-on: "ubuntu-latest" - concurrency: - group: ${{ github.ref }}-publish-release - cancel-in-progress: true - permissions: - contents: read - packages: write - steps: - - name: Download Artifact - uses: actions/download-artifact@v3 - with: - name: release-portal-bridge - - name: Download Artifact - uses: actions/download-artifact@v3 - with: - name: docs-release-build - path: docs - # - name: Download Artifact - # uses: actions/download-artifact@v3 - # with: - # name: release-stable-bridge - # path: usdc-bridge - - name: Set up GitHub NPM registry - uses: actions/setup-node@v3 - with: - node-version: v18.17.1 - registry-url: https://npm.pkg.github.com - - name: Publish - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: npm publish - + build: + name: "Build Preview" + uses: ./.github/workflows/build.yml + with: + name: prod + connect-branch: portal-bridge + advanced-tools-branch: advanced-tools + environment: Cloudflare-Page-Deploy + secrets: inherit deploy: name: Trigger Production Deploy runs-on: ubuntu-latest concurrency: group: ${{ github.ref }}-deploy-release cancel-in-progress: true - needs: publish + needs: + - build environment: Cloudflare-Page-Deploy steps: - name: Wait package publish to impact diff --git a/.github/workflows/testnet.yml b/.github/workflows/testnet.yml index 4e5bf064f..45d854bbd 100644 --- a/.github/workflows/testnet.yml +++ b/.github/workflows/testnet.yml @@ -5,16 +5,30 @@ on: types: [opened, synchronize, reopened] jobs: + branch-sha: + name: Compute Branch Sha + runs-on: ubuntu-latest + concurrency: + group: ${{ github.ref }}-testnet-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}" build: name: "Build Testnet" - uses: ./.github/workflows/build-non-prod.yml + uses: ./.github/workflows/build.yml with: name: testnet separator: T connect-branch: portal-bridge advanced-tools-branch: advanced-tools environment: Cloudflare-Testnet + public-url: "/${{ needs.branch-sha.outputs.value }}" secrets: inherit + needs: + - branch-sha deploy: name: "Deploy Testnet" needs: