feat: attempt at doing swap as a service #24
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Deploy | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| env: | |
| NODE_VERSION: '22.5.1' | |
| jobs: | |
| lint-and-test: | |
| name: Lint and Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup Node and Dependencies | |
| uses: ./.github/actions/setup-node-and-deps | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| - name: Lint | |
| run: yarn lint | |
| continue-on-error: true | |
| - name: Run tests | |
| run: yarn test | |
| continue-on-error: true | |
| deploy: | |
| name: Deploy ${{ matrix.service }} (${{ matrix.environment }}) | |
| runs-on: ubuntu-latest | |
| needs: lint-and-test | |
| if: github.event_name == 'push' | |
| environment: ${{ matrix.environment }} | |
| concurrency: | |
| group: deploy-${{ matrix.environment }}-${{ matrix.service }} | |
| cancel-in-progress: false | |
| strategy: | |
| matrix: | |
| include: | |
| # Development environment | |
| - service: notifications-service | |
| environment: dev | |
| pulumi_stack: public-dev-us-east-2 | |
| db_secret: NOTIFICATIONS_SERVICE_DATABASE_URL | |
| cpu_limit: 250m | |
| memory_limit: 250Mi | |
| replicas: 1 | |
| - service: swap-service | |
| environment: dev | |
| pulumi_stack: public-dev-us-east-2 | |
| db_secret: SWAP_SERVICE_DATABASE_URL | |
| cpu_limit: 250m | |
| memory_limit: 250Mi | |
| replicas: 1 | |
| - service: user-service | |
| environment: dev | |
| pulumi_stack: public-dev-us-east-2 | |
| db_secret: USER_SERVICE_DATABASE_URL | |
| cpu_limit: 250m | |
| memory_limit: 250Mi | |
| replicas: 1 | |
| # Production environment | |
| #- service: notifications-service | |
| # environment: prod | |
| # pulumi_stack: public-us-east-2 | |
| # db_secret: NOTIFICATIONS_SERVICE_DATABASE_URL | |
| # cpu_limit: 250m | |
| # memory_limit: 250Mi | |
| # replicas: 2 | |
| #- service: swap-service | |
| # environment: prod | |
| # pulumi_stack: public-us-east-2 | |
| # db_secret: SWAP_SERVICE_DATABASE_URL | |
| # cpu_limit: 250m | |
| # memory_limit: 250Mi | |
| # replicas: 2 | |
| #- service: user-service | |
| # environment: prod | |
| # pulumi_stack: public-us-east-2 | |
| # db_secret: USER_SERVICE_DATABASE_URL | |
| # cpu_limit: 250m | |
| # memory_limit: 250Mi | |
| # replicas: 2 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup Node and Dependencies | |
| uses: ./.github/actions/setup-node-and-deps | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| aws-region: us-east-2 | |
| - name: Install Pulumi CLI | |
| uses: pulumi/actions@v5 | |
| - name: Configure and Deploy with Pulumi | |
| working-directory: apps/${{ matrix.service }}/pulumi | |
| run: | | |
| pulumi stack select unchained/${{ matrix.pulumi_stack }} | |
| pulumi config set --path unchained:coinstack.assetName ${{ matrix.service }} | |
| pulumi config set --path unchained:coinstack.stack unchained/common/dependencies-us-east-2 | |
| ${{ matrix.environment == 'dev' && 'pulumi config set --path unchained:coinstack.environment dev' || 'echo "Skipping environment config for prod"' }} | |
| pulumi config set --path unchained:coinstack.network mainnet | |
| pulumi config set --path unchained:coinstack.api.cpuLimit ${{ matrix.cpu_limit }} | |
| pulumi config set --path unchained:coinstack.api.memoryLimit ${{ matrix.memory_limit }} | |
| pulumi config set --path unchained:coinstack.api.replicas ${{ matrix.replicas }} | |
| pulumi up -f --yes --refresh --suppress-outputs | |
| env: | |
| ADDITIONAL_ROOT_DOMAIN_NAME: shapeshift.com | |
| DOCKER_BUILDKIT: 1 | |
| PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} | |
| # Service URLs | |
| USER_SERVICE_URL: http://user-service-svc.unchained${{ matrix.environment == 'dev' && '-dev' || '' }}.svc.cluster.local:3000 | |
| NOTIFICATIONS_SERVICE_URL: http://notifications-service-svc.unchained${{ matrix.environment == 'dev' && '-dev' || '' }}.svc.cluster.local:3000 | |
| SWAP_SERVICE_URL: http://swap-service-svc.unchained${{ matrix.environment == 'dev' && '-dev' || '' }}.svc.cluster.local:3000 | |
| # Unchained API URLs (dynamic based on environment) | |
| VITE_UNCHAINED_ETHEREUM_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.ethereum.shapeshift.com | |
| VITE_UNCHAINED_ETHEREUM_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.ethereum.shapeshift.com | |
| VITE_UNCHAINED_AVALANCHE_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.avalanche.shapeshift.com | |
| VITE_UNCHAINED_AVALANCHE_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.avalanche.shapeshift.com | |
| VITE_UNCHAINED_OPTIMISM_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.optimism.shapeshift.com | |
| VITE_UNCHAINED_OPTIMISM_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.optimism.shapeshift.com | |
| VITE_UNCHAINED_BNBSMARTCHAIN_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.bnbsmartchain.shapeshift.com | |
| VITE_UNCHAINED_BNBSMARTCHAIN_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.bnbsmartchain.shapeshift.com | |
| VITE_UNCHAINED_POLYGON_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.polygon.shapeshift.com | |
| VITE_UNCHAINED_POLYGON_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.polygon.shapeshift.com | |
| VITE_UNCHAINED_GNOSIS_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.gnosis.shapeshift.com | |
| VITE_UNCHAINED_GNOSIS_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.gnosis.shapeshift.com | |
| VITE_UNCHAINED_ARBITRUM_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.arbitrum.shapeshift.com | |
| VITE_UNCHAINED_ARBITRUM_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.arbitrum.shapeshift.com | |
| VITE_UNCHAINED_ARBITRUM_NOVA_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.arbitrum-nova.shapeshift.com | |
| VITE_UNCHAINED_ARBITRUM_NOVA_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.arbitrum-nova.shapeshift.com | |
| VITE_UNCHAINED_BASE_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.base.shapeshift.com | |
| VITE_UNCHAINED_BASE_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.base.shapeshift.com | |
| VITE_UNCHAINED_BITCOIN_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.bitcoin.shapeshift.com | |
| VITE_UNCHAINED_BITCOIN_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.bitcoin.shapeshift.com | |
| VITE_UNCHAINED_DOGECOIN_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.dogecoin.shapeshift.com | |
| VITE_UNCHAINED_DOGECOIN_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.dogecoin.shapeshift.com | |
| VITE_UNCHAINED_LITECOIN_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.litecoin.shapeshift.com | |
| VITE_UNCHAINED_LITECOIN_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.litecoin.shapeshift.com | |
| VITE_UNCHAINED_BITCOINCASH_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.bitcoincash.shapeshift.com | |
| VITE_UNCHAINED_BITCOINCASH_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.bitcoincash.shapeshift.com | |
| VITE_UNCHAINED_COSMOS_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.cosmos.shapeshift.com | |
| VITE_UNCHAINED_COSMOS_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.cosmos.shapeshift.com | |
| VITE_UNCHAINED_THORCHAIN_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.thorchain.shapeshift.com | |
| VITE_UNCHAINED_THORCHAIN_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.thorchain.shapeshift.com | |
| VITE_UNCHAINED_MAYACHAIN_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.mayachain.shapeshift.com | |
| VITE_UNCHAINED_MAYACHAIN_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.mayachain.shapeshift.com | |
| VITE_UNCHAINED_SOLANA_HTTP_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.solana.shapeshift.com | |
| VITE_UNCHAINED_SOLANA_WS_URL: wss://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.solana.shapeshift.com | |
| # Node URLs (dynamic based on environment) | |
| VITE_ETHEREUM_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.ethereum.shapeshift.com/api/v1/jsonrpc | |
| VITE_AVALANCHE_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.avalanche.shapeshift.com/api/v1/jsonrpc | |
| VITE_OPTIMISM_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.optimism.shapeshift.com/api/v1/jsonrpc | |
| VITE_BNBSMARTCHAIN_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.bnbsmartchain.shapeshift.com/api/v1/jsonrpc | |
| VITE_POLYGON_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.polygon.shapeshift.com/api/v1/jsonrpc | |
| VITE_GNOSIS_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.gnosis.shapeshift.com/api/v1/jsonrpc | |
| VITE_ARBITRUM_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.arbitrum.shapeshift.com/api/v1/jsonrpc | |
| VITE_ARBITRUM_NOVA_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.arbitrum-nova.shapeshift.com/api/v1/jsonrpc | |
| VITE_BASE_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.base.shapeshift.com/api/v1/jsonrpc | |
| VITE_THORCHAIN_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.thorchain.shapeshift.com/lcd | |
| VITE_MAYACHAIN_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.mayachain.shapeshift.com/lcd | |
| VITE_SOLANA_NODE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.solana.shapeshift.com/api/v1/jsonrpc | |
| # Midgard URLs (dynamic based on environment) | |
| VITE_THORCHAIN_MIDGARD_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.thorchain.shapeshift.com/midgard/v2 | |
| VITE_MAYACHAIN_MIDGARD_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.mayachain.shapeshift.com/midgard/v2 | |
| # DEX/Swapper URLs | |
| VITE_CHAINFLIP_API_URL: https://chainflip-broker.io | |
| VITE_COWSWAP_BASE_URL: https://api.cow.fi | |
| VITE_JUPITER_API_URL: https://quote-api.jup.ag/v6 | |
| VITE_PORTALS_BASE_URL: https://api.portals.fi | |
| VITE_RELAY_API_URL: https://api.relay.link | |
| VITE_ZRX_BASE_URL: https://${{ matrix.environment == 'dev' && 'dev-' || '' }}api.proxy.shapeshift.com/api/v1/zrx/ | |
| # Secrets (from GitHub Secrets) | |
| ACCOUNT_ID_SALT: ${{ secrets.ACCOUNT_ID_SALT }} | |
| DATABASE_URL: ${{ secrets[matrix.db_secret] }} | |
| EXPO_ACCESS_TOKEN: ${{ secrets.EXPO_ACCESS_TOKEN }} | |
| VITE_BEBOP_API_KEY: ${{ secrets.BEBOP_API_KEY }} | |
| VITE_CHAINFLIP_API_KEY: ${{ secrets.CHAINFLIP_API_KEY }} | |
| VITE_NEAR_INTENTS_API_KEY: ${{ secrets.NEAR_INTENTS_API_KEY }} |