hot-updater 게이트 적용하기

hot-updater에는 자체 토큰이 없습니다. hot-updater deploy는 설정해 둔 스토리지와 데이터베이스(Supabase, Cloudflare R2와 D1, CloudFront를 쓰는 AWS S3, Firebase 등)의 자격 증명으로 번들을 기록합니다. hot-updater init은 이 자격 증명을 .env.hotupdater에 저장합니다. 이 자격 증명을 가진 사람은 누구나 배포할 수 있으므로, Mocco가 보관하는 대상이 바로 이것입니다. 먼저 파이프라인에 토큰 발급하기를 설정하세요.

자격 증명 저장하기

CI용 자격 증명은 프로바이더가 허용하는 한 가장 좁은 권한으로 만들고, 초기 설정에 쓴 자격 증명과 분리하세요. hot-updater 문서도 AWS에 대해 이를 권장합니다. Supabase는 배포에 service-role 키가 필요한데 권한 범위가 넓으므로 Mocco에만 보관하세요.

Mocco는 토큰 하나에 시크릿 하나를 저장하므로, .env.hotupdater 전체 내용을 토큰으로 저장합니다. 배포에 필요한 KEY=value 줄을 모두 넣으세요. 예를 들어 Cloudflare는 다음과 같습니다.

HOT_UPDATER_CLOUDFLARE_ACCOUNT_ID=…
HOT_UPDATER_CLOUDFLARE_R2_BUCKET_NAME=…
HOT_UPDATER_CLOUDFLARE_R2_ACCESS_KEY_ID=…
HOT_UPDATER_CLOUDFLARE_R2_SECRET_ACCESS_KEY=…
HOT_UPDATER_CLOUDFLARE_D1_DATABASE_ID=…
HOT_UPDATER_CLOUDFLARE_API_TOKEN=…

Mocco의 OTA updates 페이지, Your OTA tool 탭에서 도구를 hot-updater로 고르고 acme-production 같은 이름으로 추가합니다. 프로바이더 ID는 ota-hot-updater입니다. 프로바이더별 변수 이름은 hot-updater의 managed provider docs에 있습니다.

배포하기

전달받은 값은 여러 줄이므로, 파이프라인 가이드의 OTA_TOKEN 한 줄 대신 아래 가져오기 단계를 사용합니다. 이 단계는 값을 .env.hotupdater에 기록하고 각 값을 마스킹합니다.

      - name: Get the storage credentials from Mocco
        run: |
          body=$(jq -nc --arg run "$MOCCO_RUN_ID" --argjson step "$MOCCO_STEP" --arg token "$MOCCO_RUN_TOKEN" \
            '{runId: $run, stepIndex: $step, token: $token}')
          curl -fsS -X POST "${MOCCO_CALLBACK_URL%/callback}/credentials" \
            -H 'content-type: application/json' -d "$body" | jq -r '.credentials.value' > .env.hotupdater
          while IFS='=' read -r _ value; do
            if [ -n "$value" ]; then echo "::add-mask::$value"; fi
          done < .env.hotupdater

      - run: npm ci
      - run: npx hot-updater deploy -p android -c production -m "${{ github.event.client_payload.commitSha }}"

-p를 생략하면 iOS를 배포한 다음 Android를 배포합니다. -r 25는 일부 기기에만 롤아웃합니다. deploying을 참고하세요.

롤백하기

번들을 비활성화하면 기기가 이전 번들로 돌아갑니다.

npx hot-updater bundle disable <bundle id> -y

npx hot-updater bundle list -p android --json으로 번들 ID를 확인할 수 있습니다. 롤백 파이프라인에서 같은 자격 증명을 전달받아 실행하세요. console guide를 참고하세요.

교체하기

프로바이더에서 키를 교체하고 해당 줄을 업데이트한 뒤, Mocco에서 토큰 카드의 Rotate를 선택하고 새 내용을 붙여 넣습니다. 그런 다음 프로바이더에서 이전 키를 폐기하세요.