name: Deploy B9 on: push: branches: - b9 workflow_dispatch: inputs: environment: description: Deployment environment type: choice options: - prod - test default: prod required: true concurrency: group: deploy-b9 cancel-in-progress: false jobs: deploy: runs-on: windows-cross timeout-minutes: 30 env: TARGET_ENV: ${{ inputs.environment || 'prod' }} AWS_PAGER: '' AWS_EC2_METADATA_DISABLED: 'true' steps: - name: Checkout uses: https://github.com/actions/checkout@v4 with: persist-credentials: false - name: Resolve deployment directory env: DEPLOY_REF: ${{ github.ref }} DEPLOY_BRANCH: ${{ github.ref_name }} run: | set -eu case "$DEPLOY_REF" in refs/heads/*) ;; *) echo "Deployment requires a branch"; exit 1 ;; esac case "$DEPLOY_BRANCH" in main) PROJECT=x8 ;; x9|b9|bd9|bh9) PROJECT="$DEPLOY_BRANCH" ;; *) echo "Unsupported device branch"; exit 1 ;; esac echo "DEPLOY_PROJECT_NAME=$PROJECT" >> "$GITHUB_ENV" echo "Deploying branch $DEPLOY_BRANCH to S3 directory $PROJECT" - name: Set up Node.js uses: https://github.com/actions/setup-node@v4 with: node-version: '24' - name: Install pnpm run: npm install --global pnpm@11.5.2 - name: Install dependencies run: pnpm install --frozen-lockfile - name: Build legacy and modern applications env: VITE_AI_API_URL: ${{ vars.VITE_AI_API_URL }} run: | set -eu case "$TARGET_ENV" in prod) pnpm run build ;; test) pnpm run build:test ;; *) echo "Unsupported deployment environment"; exit 1 ;; esac test -s dist/i.html test -s dist/legacy/i.legacy.html test -s dist/modern/i.modern.html - name: Install AWS CLI run: | set -eu if ! command -v aws >/dev/null 2>&1; then CLI_DIR=$(mktemp -d) curl --fail --silent --show-error --location \ --connect-timeout 20 --max-time 300 \ https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip \ --output "$CLI_DIR/awscliv2.zip" unzip -q "$CLI_DIR/awscliv2.zip" -d "$CLI_DIR" "$CLI_DIR/aws/install" --install-dir "$CLI_DIR/installed" --bin-dir /usr/local/bin fi aws --version - name: Deploy to S3 and invalidate CloudFront env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_SESSION_TOKEN: ${{ secrets.AWS_SESSION_TOKEN }} AWS_DEFAULT_REGION: ${{ vars.AWS_REGION }} run: | set -eu test -n "$AWS_ACCESS_KEY_ID" || { echo "Missing secret AWS_ACCESS_KEY_ID"; exit 1; } test -n "$AWS_SECRET_ACCESS_KEY" || { echo "Missing secret AWS_SECRET_ACCESS_KEY"; exit 1; } test -n "$AWS_DEFAULT_REGION" || { echo "Missing variable AWS_REGION"; exit 1; } bash scripts/deploy.sh "$TARGET_ENV" -yr