diff --git a/.github/workflows/image-transfer.yml b/.github/workflows/image-transfer.yml index 032b267d..beca8787 100644 --- a/.github/workflows/image-transfer.yml +++ b/.github/workflows/image-transfer.yml @@ -8,8 +8,20 @@ on: required: true default: '' type: string - TOKEN: - description: 'provide docker hub token' + SECRET_NAME: + description: 'Select the GitHub secret name for Docker registry token' + required: true + default: 'MOSIPDEV2_DOCKER_TOKEN' + type: choice + options: + - MOSIPDEV2_DOCKER_TOKEN + - MOSIPQA_DOCKER_TOKEN + - MOSIPID_DOCKER_TOKEN + - MOSIPINT_DOCKER_TOKEN + - INJISTACK_DOCKER_TOKEN + - custom + CUSTOM_SECRET_NAME: + description: 'If SECRET_NAME is "custom", enter the GitHub secret name here' required: false default: '' type: string @@ -43,27 +55,61 @@ jobs: runs-on: ubuntu-latest outputs: TOKEN: ${{ steps.ORG_TOKEN.outputs.TOKEN }} - USERNAME: ${{ steps.ORG_TOKEN.outputs.USERNAME }} steps: - - name: Check if input TOKEN is empty - if: ${{ inputs.TOKEN == '' }} + - name: Resolve secret name id: ORG_TOKEN + env: + SELECTED_SECRET: ${{ inputs.SECRET_NAME }} + CUSTOM_SECRET: ${{ inputs.CUSTOM_SECRET_NAME }} run: | - if [[ ${{ inputs.DESTINATION_ORGANIZATION }} == mosipqa ]]; then - echo "TOKEN=QA_NAMESPACE_DOCKER_HUB" >> $GITHUB_OUTPUT - echo "USERNAME=DOCKER_USERNAME" >> $GITHUB_OUTPUT + if [ "$SELECTED_SECRET" = "custom" ]; then + # User selected custom — CUSTOM_SECRET_NAME is required + if [ -z "$CUSTOM_SECRET" ]; then + printf '❌ ERROR: CUSTOM_SECRET_NAME is required when SECRET_NAME is set to "custom"\n' >&2 + printf 'Please provide the GitHub secret name in the CUSTOM_SECRET_NAME field\n' >&2 + exit 1 + fi + + # Validate custom secret name format (GitHub only allows [A-Z0-9_], must start with [A-Z_]) + if ! printf '%s' "$CUSTOM_SECRET" | grep -qE '^[A-Za-z_][A-Za-z0-9_]*$'; then + printf '❌ ERROR: Invalid secret name: "%s"\n' "$CUSTOM_SECRET" >&2 + printf 'GitHub secret names must:\n' >&2 + printf ' - Start with a letter or underscore\n' >&2 + printf ' - Contain only letters, numbers, and underscores\n' >&2 + printf ' - No spaces, hyphens, or special characters\n' >&2 + printf 'Example: MY_ORG_DOCKER_TOKEN\n' >&2 + exit 1 + fi + + TOKEN_SECRET="$CUSTOM_SECRET" + printf 'Using custom secret name: %s\n' "$TOKEN_SECRET" + else + TOKEN_SECRET="$SELECTED_SECRET" + printf 'Using predefined secret name: %s\n' "$TOKEN_SECRET" fi - if [[ ${{ inputs.DESTINATION_ORGANIZATION }} == mosipint ]]; then - echo "TOKEN=INT_NAMESPACE_DOCKER_HUB" >> $GITHUB_OUTPUT - echo "USERNAME=DOCKER_USERNAME" >> $GITHUB_OUTPUT - fi - - name: Print Secret Name + + printf 'TOKEN=%s\n' "$TOKEN_SECRET" >> "$GITHUB_OUTPUT" + + - name: Validate secret configuration + env: + TOKEN_EXISTS: ${{ secrets[steps.ORG_TOKEN.outputs.TOKEN] != '' }} + SECRET_NAME: ${{ steps.ORG_TOKEN.outputs.TOKEN }} + DESTINATION_ORGANIZATION: ${{ inputs.DESTINATION_ORGANIZATION }} run: | - echo "ORGANIZATION NAME : ${{ inputs.DESTINATION_ORGANIZATION }} " - echo "SECRET NAME : ${{ steps.ORG_TOKEN.outputs.TOKEN }}" - echo "USERNAME : ${{ steps.ORG_TOKEN.outputs.USERNAME }}" - echo "REGISTRY URL : ${{ inputs.REGISTRY_URL }}" - + if [ "$TOKEN_EXISTS" != "true" ]; then + printf '❌ ERROR: Secret '\''%s'\'' is not configured or is empty\n' "$SECRET_NAME" + printf '\n' + printf 'Please configure the following secret in GitHub repository settings:\n' + printf ' Secret name: %s\n' "$SECRET_NAME" + printf ' Path: Settings → Secrets and variables → Actions → New repository secret\n' + printf '\n' + printf 'For organization '\''%s'\'', you need:\n' "$DESTINATION_ORGANIZATION" + printf ' - Secret: %s\n' "$SECRET_NAME" + printf ' - Value: Your Docker registry token/password\n' + exit 1 + fi + + printf '✅ Secret '\''%s'\'' is configured\n' "$SECRET_NAME" Image-transfer: needs: chk_token uses: mosip/kattu/.github/workflows/image-transfer.yml@master @@ -74,6 +120,6 @@ jobs: ENABLE_WIREGUARD: ${{ inputs.ENABLE_WIREGUARD }} USERNAME: ${{ inputs.USERNAME }} secrets: - TOKEN: "${{ secrets[needs.chk_token.outputs.TOKEN] || inputs.TOKEN }}" + TOKEN: "${{ secrets[needs.chk_token.outputs.TOKEN] }}" SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_DEVOPS }} WIREGUARD_CONFIG: ${{ secrets.WIREGUARD_CONFIG }} diff --git a/release/vidivi/README.md b/release/vidivi/README.md index 0de7e6de..dc60d521 100644 --- a/release/vidivi/README.md +++ b/release/vidivi/README.md @@ -192,19 +192,68 @@ Execute the [Manual workflow to transfer images](https://github.com/mosip/releas | Input | Description | Required | Default | Example | |-------|-------------|----------|---------|---------| | `USERNAME` | Registry username | Yes | - | `robot$mosipdev+release-bot` (Harbor)
`myusername` (Docker Hub) | -| `TOKEN` | Registry token/password | Yes (secret) | - | Robot account token or personal access token | -| `DESTINATION_ORGANIZATION` | Destination org/project | Yes | - | `mosipid`, `library`, `myproject` | +| `SECRET_NAME` | Select the GitHub secret name for Docker registry token (dropdown) | Yes | `MOSIPDEV2_DOCKER_TOKEN` | `MOSIPID_DOCKER_TOKEN`, `custom` | +| `CUSTOM_SECRET_NAME` | Custom secret name (only required if `SECRET_NAME` is set to `custom`) | No | - | `MY_ORG_DOCKER_TOKEN` | +| `DESTINATION_ORGANIZATION` | Destination org/project | Yes | - | `mosipid`, `mosipqa`, `myproject` | | `REGISTRY_URL` | Destination registry URL | Yes | `https://index.docker.io/v1/` | `https://harbor.example.com` | | `REGISTRY_TYPE` | Registry type | Yes | `dockerhub` | `dockerhub`, `harbor`, `other` | | `ENABLE_WIREGUARD` | Enable VPN for private networks | No | `false` | `true` or `false` | +**`SECRET_NAME` Options:** + +| Option | Description | +|---|---| +| `MOSIPDEV2_DOCKER_TOKEN` | Token for `mosipdev2` organization | +| `MOSIPQA_DOCKER_TOKEN` | Token for `mosipqa` organization | +| `MOSIPID_DOCKER_TOKEN` | Token for `mosipid` organization | +| `MOSIPINT_DOCKER_TOKEN` | Token for `mosipint` organization | +| `INJISTACK_DOCKER_TOKEN` | Token for `injistack` organization | +| `custom` | Enter your own secret name in `CUSTOM_SECRET_NAME` field | + ### Workflow Secrets -Configure these in GitHub repository settings → Secrets: +**Required Secrets:** +1. **``**: Registry authentication token — select from predefined options or provide a custom name + - Docker Hub: Personal Access Token or Account Password + - Harbor: Robot account token + - Other registries: Appropriate authentication token + +2. **`SLACK_WEBHOOK_DEVOPS`**: Slack notification webhook (shared across all workflows) + +3. **`WIREGUARD_CONFIG`**: (Optional) WireGuard VPN configuration for private registries + +**Custom SECRET_NAME Validation:** + +When `SECRET_NAME` is set to `custom`, the `CUSTOM_SECRET_NAME` field is **required** and validated: +- Must start with a letter or underscore +- Can only contain letters, numbers, and underscores (`[A-Za-z0-9_]`) +- No spaces, hyphens, or special characters + +| `CUSTOM_SECRET_NAME` | Valid? | +|---|---| +| `MY_ORG_DOCKER_TOKEN` | ✅ | +| `_PRIVATE_TOKEN` | ✅ | +| `my-org-token` | ❌ Hyphens not allowed | +| `MY SECRET` | ❌ Spaces not allowed | +| *(empty)* | ❌ Required when `custom` is selected | -- `TOKEN`: Registry authentication token -- `SLACK_WEBHOOK_URL`: Slack notification webhook -- `WIREGUARD_CONFIG`: (Optional) WireGuard VPN configuration for private registries +**How to Add Secrets:** +1. Go to GitHub repository → Settings → Secrets and variables → Actions +2. Click "New repository secret" +3. Create the secret with the exact name you will provide as `SECRET_NAME` input +4. Set the value to your Docker registry token/password + +**Protected Organizations:** + +Certain destination organizations (e.g., `mosipid`) are protected in the `mosip/kattu` reusable workflow. Transfers to protected organizations require **admin** access on the calling repository. This prevents accidental overwrites of production images by non-admin users. + +> **Note:** This protection is enforced in the `mosip/kattu` reusable workflow, so it cannot be bypassed by modifying the caller workflow. + +**Security Benefits:** +- Tokens are never exposed in workflow logs +- Each organization has isolated credentials +- No hardcoded credentials in workflow files +- Protected organizations require admin access for transfers ### Running the Workflow @@ -214,12 +263,20 @@ Configure these in GitHub repository settings → Secrets: 4. Fill in the required inputs: ``` USERNAME: robot$mosipdev+release-bot + SECRET_NAME: MOSIPID_DOCKER_TOKEN (select from dropdown) + CUSTOM_SECRET_NAME: (leave empty unless SECRET_NAME is "custom") DESTINATION_ORGANIZATION: mosipid REGISTRY_URL: https://harbor.mosip.net REGISTRY_TYPE: harbor ENABLE_WIREGUARD: true (if registry is on private network) ``` -5. Click "Run workflow" +5. If using `custom` for `SECRET_NAME`, enter the secret name in `CUSTOM_SECRET_NAME`: + ``` + SECRET_NAME: custom + CUSTOM_SECRET_NAME: MY_ORG_DOCKER_TOKEN + ``` +6. Ensure the selected/custom secret is configured under **Settings → Secrets and variables → Actions** +7. Click "Run workflow" ### Workflow Features diff --git a/release/vidivi/logs/vidivi.log b/release/vidivi/logs/vidivi.log index 3fa47d90..cbe3360b 100644 --- a/release/vidivi/logs/vidivi.log +++ b/release/vidivi/logs/vidivi.log @@ -1,80 +1,119 @@ - 12-Dec-25 13:27:10 INFO LOGFILE CREATED : vidivi.log - 12-Dec-25 13:27:10 INFO - 12-Dec-25 13:27:10 INFO ******************** Check Images List ************************************************************************************ - 12-Dec-25 13:27:10 INFO - 12-Dec-25 13:27:10 INFO IMAGES= [['mosipdev/partner-onboarder:release-1.3.x-beta.2', '1.3.x-beta.2']] - 12-Dec-25 13:27:10 INFO - 12-Dec-25 13:27:10 INFO ******************** Check existence of Source Images ******************************************************************* - 12-Dec-25 13:27:10 INFO - 12-Dec-25 13:27:10 INFO src = "mosipdev/partner-onboarder" tag = "release-1.3.x-beta.2" - 12-Dec-25 13:27:10 DEBUG Starting new HTTPS connection (1): auth.docker.io:443 - 12-Dec-25 13:27:10 DEBUG https://auth.docker.io:443 "GET /token?service=registry.docker.io&scope=repository:mosipdev/partner-onboarder:pull HTTP/1.1" 200 None - 12-Dec-25 13:27:10 DEBUG Starting new HTTPS connection (1): registry.hub.docker.com:443 - 12-Dec-25 13:27:10 DEBUG https://registry.hub.docker.com:443 "GET /v2/repositories/mosipdev/partner-onboarder/tags/release-1.3.x-beta.2 HTTP/1.1" 200 None - 12-Dec-25 13:27:10 INFO - 12-Dec-25 13:27:10 INFO ******************** Check existence of Destination Docker Account *************************************************************** - 12-Dec-25 13:27:10 DEBUG Starting new HTTPS connection (1): hub.docker.com:443 - 12-Dec-25 13:27:10 DEBUG https://hub.docker.com:443 "GET /v2/users/mosipqa HTTP/1.1" 308 0 - 12-Dec-25 13:27:10 DEBUG https://hub.docker.com:443 "GET /v2/orgs/mosipqa HTTP/1.1" 200 None - 12-Dec-25 13:27:10 INFO - 12-Dec-25 13:27:10 INFO ******************** Check existence of Destination Images *************************************************************** - 12-Dec-25 13:27:10 INFO - 12-Dec-25 13:27:10 INFO [ mosipqa/partner-onboarder ] - 12-Dec-25 13:27:11 WARNING Crane digest failed for index.docker.io/mosipqa/partner-onboarder:1.3.x-beta.2: 2025/12/12 13:27:10 HEAD request failed, falling back on GET: HEAD https://index.docker.io/v2/mosipqa/partner-onboarder/manifests/1.3.x-beta.2: unexpected status code 404 Not Found (HEAD responses have no body, use GET for details) -Error: GET https://index.docker.io/v2/mosipqa/partner-onboarder/manifests/1.3.x-beta.2: MANIFEST_UNKNOWN: manifest unknown; unknown tag=1.3.x-beta.2 - - 12-Dec-25 13:27:11 INFO Destination Image = "mosipqa/partner-onboarder" Destination Image tag = "1.3.x-beta.2" IMAGE_ID : - 12-Dec-25 13:27:11 INFO Destination image mosipqa/partner-onboarder:1.3.x-beta.2 does not exist - 12-Dec-25 13:27:11 INFO - 12-Dec-25 13:27:11 INFO ******************** HASH Operation Results ********************************************************************** - 12-Dec-25 13:27:11 INFO - 12-Dec-25 13:27:11 INFO Below Destination Images doesn't exists; CONTINUE; - [['mosipqa/partner-onboarder:1.3.x-beta.2']] - 12-Dec-25 13:27:11 INFO - 12-Dec-25 13:27:11 INFO ******************** Start Image Transfer operation *********************************************************************** - 12-Dec-25 13:27:11 DEBUG Trying paths: ['/home/runner/.docker/config.json', '/home/runner/.dockercfg'] - 12-Dec-25 13:27:11 DEBUG Found file at path: /home/runner/.docker/config.json - 12-Dec-25 13:27:11 DEBUG Found 'auths' section - 12-Dec-25 13:27:11 DEBUG Found entry (registry='https://index.docker.io/v1/', username='gsasikumar') - 12-Dec-25 13:27:11 DEBUG http://localhost:None "GET /version HTTP/1.1" 200 823 - 12-Dec-25 13:27:11 DEBUG Looking for auth entry for 'docker.io' - 12-Dec-25 13:27:11 DEBUG Found 'https://index.docker.io/v1/' - 12-Dec-25 13:27:11 INFO Using 3 parallel workers for image transfers - 12-Dec-25 13:27:11 INFO - 12-Dec-25 13:27:11 INFO ********** [ mosipqa/partner-onboarder:1.3.x-beta.2 ] **************************************************** - 12-Dec-25 13:27:11 INFO Transferring image using crane... - 12-Dec-25 13:27:11 INFO Source uses tag reference: mosipdev/partner-onboarder:release-1.3.x-beta.2 - 12-Dec-25 13:27:11 INFO Analyzing source image manifest... - 12-Dec-25 13:27:11 INFO Source is MULTI-ARCH image - 12-Dec-25 13:27:11 INFO Source Index Digest (Manifest List): sha256:8de6d5f804e74b5f6ab2e92dc3fa848511f28007237e387f4535eab6aae03c44 - 12-Dec-25 13:27:11 INFO Source has 2 platform(s): - 12-Dec-25 13:27:11 INFO - linux/amd64: sha256:f6ddf93b21f422bbf13ddabeae237ecf576f0c79fd7e7aadb7650f72bf885d11 - 12-Dec-25 13:27:11 INFO - linux/arm64: sha256:d86a01d00191bcb4999afcb39e04866b50b505919296f4ec752391cfda764108 - 12-Dec-25 13:27:11 INFO Using secure connection for HTTPS registry - 12-Dec-25 13:27:11 INFO Executing: crane copy mosipdev/partner-onboarder:release-1.3.x-beta.2 index.docker.io/mosipqa/partner-onboarder:1.3.x-beta.2 - 12-Dec-25 13:27:15 INFO Successfully transferred image with crane - 12-Dec-25 13:27:15 INFO - 12-Dec-25 13:27:15 INFO Analyzing destination image manifest... - 12-Dec-25 13:27:15 INFO Destination is MULTI-ARCH image - 12-Dec-25 13:27:15 INFO Destination Index Digest (Manifest List): sha256:8de6d5f804e74b5f6ab2e92dc3fa848511f28007237e387f4535eab6aae03c44 - 12-Dec-25 13:27:15 INFO Destination has 2 platform(s): - 12-Dec-25 13:27:15 INFO - linux/amd64: sha256:f6ddf93b21f422bbf13ddabeae237ecf576f0c79fd7e7aadb7650f72bf885d11 - 12-Dec-25 13:27:15 INFO - linux/arm64: sha256:d86a01d00191bcb4999afcb39e04866b50b505919296f4ec752391cfda764108 - 12-Dec-25 13:27:15 INFO - 12-Dec-25 13:27:15 INFO === DIGEST VERIFICATION === - 12-Dec-25 13:27:15 INFO Comparing Index Digests (Manifest Lists): - 12-Dec-25 13:27:15 INFO Source: sha256:8de6d5f804e74b5f6ab2e92dc3fa848511f28007237e387f4535eab6aae03c44 - 12-Dec-25 13:27:15 INFO Destination: sha256:8de6d5f804e74b5f6ab2e92dc3fa848511f28007237e387f4535eab6aae03c44 - 12-Dec-25 13:27:15 INFO ✓ Index Digest MATCH - Multi-arch structure preserved perfectly! - 12-Dec-25 13:27:15 INFO - 12-Dec-25 13:27:15 INFO Comparing Platform Manifests: - 12-Dec-25 13:27:15 INFO ✓ linux/amd64: sha256:f6ddf93b21f422bbf13ddabeae237ecf576f0c79fd7e7aadb7650f72bf885d11 (MATCH) - 12-Dec-25 13:27:15 INFO ✓ linux/arm64: sha256:d86a01d00191bcb4999afcb39e04866b50b505919296f4ec752391cfda764108 (MATCH) - 12-Dec-25 13:27:15 INFO ✓ All 2 platform manifest(s) match perfectly! - 12-Dec-25 13:27:15 INFO Creating latest tag: crane copy mosipdev/partner-onboarder:release-1.3.x-beta.2 index.docker.io/mosipqa/partner-onboarder:latest - 12-Dec-25 13:27:17 INFO Successfully created latest tag - 12-Dec-25 13:27:17 INFO Image available at: index.docker.io/mosipqa/partner-onboarder:1.3.x-beta.2 - 12-Dec-25 13:27:17 INFO - 12-Dec-25 13:27:17 INFO NOTE: For multi-arch images, the Index Digest (manifest list) is what matters most. - 12-Dec-25 13:27:17 INFO Individual platform manifests should also match to ensure identical content. - 12-Dec-25 13:27:17 INFO Completed processing mosipdev/partner-onboarder:release-1.3.x-beta.2 to mosipqa/partner-onboarder:1.3.x-beta.2 + 13-Mar-26 10:12:12 INFO LOGFILE CREATED : vidivi.log + 13-Mar-26 10:12:12 INFO + 13-Mar-26 10:12:12 INFO ******************** Check Images List ************************************************************************************ + 13-Mar-26 10:12:12 INFO + 13-Mar-26 10:12:12 INFO IMAGES= [['injistackdev2/inji-web:release-0.16.x', '0.16.x'], ['injistackdev2/mimoto:release-0.21.x', '0.21.x']] + 13-Mar-26 10:12:12 INFO + 13-Mar-26 10:12:12 INFO ******************** Check existence of Source Images ******************************************************************* + 13-Mar-26 10:12:12 INFO + 13-Mar-26 10:12:12 INFO src = "injistackdev2/inji-web" tag = "release-0.16.x" + 13-Mar-26 10:12:12 DEBUG Starting new HTTPS connection (1): auth.docker.io:443 + 13-Mar-26 10:12:12 DEBUG https://auth.docker.io:443 "GET /token?service=registry.docker.io&scope=repository:injistackdev2/inji-web:pull HTTP/1.1" 200 None + 13-Mar-26 10:12:12 DEBUG Starting new HTTPS connection (1): registry.hub.docker.com:443 + 13-Mar-26 10:12:12 DEBUG https://registry.hub.docker.com:443 "GET /v2/repositories/injistackdev2/inji-web/tags/release-0.16.x HTTP/1.1" 200 None + 13-Mar-26 10:12:12 INFO + 13-Mar-26 10:12:12 INFO src = "injistackdev2/mimoto" tag = "release-0.21.x" + 13-Mar-26 10:12:12 DEBUG Starting new HTTPS connection (1): auth.docker.io:443 + 13-Mar-26 10:12:12 DEBUG https://auth.docker.io:443 "GET /token?service=registry.docker.io&scope=repository:injistackdev2/mimoto:pull HTTP/1.1" 200 None + 13-Mar-26 10:12:12 DEBUG Starting new HTTPS connection (1): registry.hub.docker.com:443 + 13-Mar-26 10:12:12 DEBUG https://registry.hub.docker.com:443 "GET /v2/repositories/injistackdev2/mimoto/tags/release-0.21.x HTTP/1.1" 200 None + 13-Mar-26 10:12:12 INFO + 13-Mar-26 10:12:12 INFO ******************** Check existence of Destination Docker Account *************************************************************** + 13-Mar-26 10:12:12 DEBUG Starting new HTTPS connection (1): hub.docker.com:443 + 13-Mar-26 10:12:13 DEBUG https://hub.docker.com:443 "GET /v2/users/bn46 HTTP/1.1" 200 274 + 13-Mar-26 10:12:13 INFO + 13-Mar-26 10:12:13 INFO ******************** Check existence of Destination Images *************************************************************** + 13-Mar-26 10:12:13 INFO + 13-Mar-26 10:12:13 INFO [ bn46/inji-web ] + 13-Mar-26 10:12:13 INFO Destination Image = "bn46/inji-web" Destination Image tag = "0.16.x" IMAGE_ID : sha256:862abbee3278c4417b701811954825a3cc635ee871d8041296b9642839867df2 + 13-Mar-26 10:12:13 INFO + 13-Mar-26 10:12:13 INFO [ bn46/mimoto ] + 13-Mar-26 10:12:13 INFO Destination Image = "bn46/mimoto" Destination Image tag = "0.21.x" IMAGE_ID : sha256:aaace9caa29bd331811d786669e585769931a24e64f04ed19496e5a8dffe6ec0 + 13-Mar-26 10:12:13 INFO + 13-Mar-26 10:12:13 INFO ******************** HASH Operation Results ********************************************************************** + 13-Mar-26 10:12:13 INFO + 13-Mar-26 10:12:13 INFO ******************** Start Image Transfer operation *********************************************************************** + 13-Mar-26 10:12:13 DEBUG Trying paths: ['/home/runner/.docker/config.json', '/home/runner/.dockercfg'] + 13-Mar-26 10:12:13 DEBUG Found file at path: /home/runner/.docker/config.json + 13-Mar-26 10:12:13 DEBUG Found 'auths' section + 13-Mar-26 10:12:13 DEBUG Found entry (registry='https://index.docker.io/v1/', username='bn46') + 13-Mar-26 10:12:13 DEBUG http://localhost:None "GET /version HTTP/1.1" 200 823 + 13-Mar-26 10:12:13 DEBUG Looking for auth entry for 'docker.io' + 13-Mar-26 10:12:13 DEBUG Found 'https://index.docker.io/v1/' + 13-Mar-26 10:12:13 INFO Using 3 parallel workers for image transfers + 13-Mar-26 10:12:13 INFO + 13-Mar-26 10:12:13 INFO ********** [ bn46/inji-web:0.16.x ] **************************************************** + 13-Mar-26 10:12:13 INFO Transferring image using crane... + 13-Mar-26 10:12:13 INFO + 13-Mar-26 10:12:13 INFO ********** [ bn46/mimoto:0.21.x ] **************************************************** + 13-Mar-26 10:12:13 INFO Transferring image using crane... + 13-Mar-26 10:12:13 INFO Source uses tag reference: injistackdev2/inji-web:release-0.16.x + 13-Mar-26 10:12:13 INFO Analyzing source image manifest... + 13-Mar-26 10:12:13 INFO Source uses tag reference: injistackdev2/mimoto:release-0.21.x + 13-Mar-26 10:12:13 INFO Analyzing source image manifest... + 13-Mar-26 10:12:14 INFO Source is MULTI-ARCH image + 13-Mar-26 10:12:14 INFO Source Index Digest (Manifest List): sha256:9d8495ac9df7d01b5a95148d0b6080c2f7b811c81721d0f8a007c015aaf62286 + 13-Mar-26 10:12:14 INFO Source has 2 platform(s): + 13-Mar-26 10:12:14 INFO - linux/amd64: sha256:b4c3d9bf071b3fcf107b9b97753f53b67dedcbb9d0234b787321cb02b8e77de3 + 13-Mar-26 10:12:14 INFO - linux/arm64: sha256:3a2c7b9c763f08fe1816295e4df3cb6e479808602ec097c97fe619c27f4bcf9b + 13-Mar-26 10:12:14 INFO Using secure connection for HTTPS registry + 13-Mar-26 10:12:14 INFO Executing: crane copy injistackdev2/inji-web:release-0.16.x index.docker.io/bn46/inji-web:0.16.x + 13-Mar-26 10:12:14 INFO Source is MULTI-ARCH image + 13-Mar-26 10:12:14 INFO Source Index Digest (Manifest List): sha256:5d4c3e0113a5c8ae4490095a80c97e01841059753ced9bee5970d649ef6e0faf + 13-Mar-26 10:12:14 INFO Source has 2 platform(s): + 13-Mar-26 10:12:14 INFO - linux/amd64: sha256:aaf5fa575792bbce3664518ce0685f8697f663009303d378abca192503984264 + 13-Mar-26 10:12:14 INFO - linux/arm64: sha256:a45307ddf05e51464c28297024768ec305d9407a1a6435ca8b9324a8f7b61e82 + 13-Mar-26 10:12:14 INFO Using secure connection for HTTPS registry + 13-Mar-26 10:12:14 INFO Executing: crane copy injistackdev2/mimoto:release-0.21.x index.docker.io/bn46/mimoto:0.21.x + 13-Mar-26 10:12:17 INFO Successfully transferred image with crane + 13-Mar-26 10:12:17 INFO + 13-Mar-26 10:12:17 INFO Analyzing destination image manifest... + 13-Mar-26 10:12:18 INFO Successfully transferred image with crane + 13-Mar-26 10:12:18 INFO + 13-Mar-26 10:12:18 INFO Analyzing destination image manifest... + 13-Mar-26 10:12:18 INFO Destination is MULTI-ARCH image + 13-Mar-26 10:12:18 INFO Destination Index Digest (Manifest List): sha256:5d4c3e0113a5c8ae4490095a80c97e01841059753ced9bee5970d649ef6e0faf + 13-Mar-26 10:12:18 INFO Destination has 2 platform(s): + 13-Mar-26 10:12:18 INFO - linux/amd64: sha256:aaf5fa575792bbce3664518ce0685f8697f663009303d378abca192503984264 + 13-Mar-26 10:12:18 INFO - linux/arm64: sha256:a45307ddf05e51464c28297024768ec305d9407a1a6435ca8b9324a8f7b61e82 + 13-Mar-26 10:12:18 INFO + 13-Mar-26 10:12:18 INFO === DIGEST VERIFICATION === + 13-Mar-26 10:12:18 INFO Comparing Index Digests (Manifest Lists): + 13-Mar-26 10:12:18 INFO Source: sha256:5d4c3e0113a5c8ae4490095a80c97e01841059753ced9bee5970d649ef6e0faf + 13-Mar-26 10:12:18 INFO Destination: sha256:5d4c3e0113a5c8ae4490095a80c97e01841059753ced9bee5970d649ef6e0faf + 13-Mar-26 10:12:18 INFO ✓ Index Digest MATCH - Multi-arch structure preserved perfectly! + 13-Mar-26 10:12:18 INFO + 13-Mar-26 10:12:18 INFO Comparing Platform Manifests: + 13-Mar-26 10:12:18 INFO ✓ linux/amd64: sha256:aaf5fa575792bbce3664518ce0685f8697f663009303d378abca192503984264 (MATCH) + 13-Mar-26 10:12:18 INFO ✓ linux/arm64: sha256:a45307ddf05e51464c28297024768ec305d9407a1a6435ca8b9324a8f7b61e82 (MATCH) + 13-Mar-26 10:12:18 INFO ✓ All 2 platform manifest(s) match perfectly! + 13-Mar-26 10:12:18 INFO Creating latest tag: crane copy injistackdev2/mimoto:release-0.21.x index.docker.io/bn46/mimoto:latest + 13-Mar-26 10:12:18 INFO Destination is MULTI-ARCH image + 13-Mar-26 10:12:18 INFO Destination Index Digest (Manifest List): sha256:9d8495ac9df7d01b5a95148d0b6080c2f7b811c81721d0f8a007c015aaf62286 + 13-Mar-26 10:12:18 INFO Destination has 2 platform(s): + 13-Mar-26 10:12:18 INFO - linux/amd64: sha256:b4c3d9bf071b3fcf107b9b97753f53b67dedcbb9d0234b787321cb02b8e77de3 + 13-Mar-26 10:12:18 INFO - linux/arm64: sha256:3a2c7b9c763f08fe1816295e4df3cb6e479808602ec097c97fe619c27f4bcf9b + 13-Mar-26 10:12:18 INFO + 13-Mar-26 10:12:18 INFO === DIGEST VERIFICATION === + 13-Mar-26 10:12:18 INFO Comparing Index Digests (Manifest Lists): + 13-Mar-26 10:12:18 INFO Source: sha256:9d8495ac9df7d01b5a95148d0b6080c2f7b811c81721d0f8a007c015aaf62286 + 13-Mar-26 10:12:18 INFO Destination: sha256:9d8495ac9df7d01b5a95148d0b6080c2f7b811c81721d0f8a007c015aaf62286 + 13-Mar-26 10:12:18 INFO ✓ Index Digest MATCH - Multi-arch structure preserved perfectly! + 13-Mar-26 10:12:18 INFO + 13-Mar-26 10:12:18 INFO Comparing Platform Manifests: + 13-Mar-26 10:12:18 INFO ✓ linux/amd64: sha256:b4c3d9bf071b3fcf107b9b97753f53b67dedcbb9d0234b787321cb02b8e77de3 (MATCH) + 13-Mar-26 10:12:18 INFO ✓ linux/arm64: sha256:3a2c7b9c763f08fe1816295e4df3cb6e479808602ec097c97fe619c27f4bcf9b (MATCH) + 13-Mar-26 10:12:18 INFO ✓ All 2 platform manifest(s) match perfectly! + 13-Mar-26 10:12:18 INFO Creating latest tag: crane copy injistackdev2/inji-web:release-0.16.x index.docker.io/bn46/inji-web:latest + 13-Mar-26 10:12:20 INFO Successfully created latest tag + 13-Mar-26 10:12:20 INFO Image available at: index.docker.io/bn46/mimoto:0.21.x + 13-Mar-26 10:12:20 INFO + 13-Mar-26 10:12:20 INFO NOTE: For multi-arch images, the Index Digest (manifest list) is what matters most. + 13-Mar-26 10:12:20 INFO Individual platform manifests should also match to ensure identical content. + 13-Mar-26 10:12:21 INFO Successfully created latest tag + 13-Mar-26 10:12:21 INFO Image available at: index.docker.io/bn46/inji-web:0.16.x + 13-Mar-26 10:12:21 INFO + 13-Mar-26 10:12:21 INFO NOTE: For multi-arch images, the Index Digest (manifest list) is what matters most. + 13-Mar-26 10:12:21 INFO Individual platform manifests should also match to ensure identical content. + 13-Mar-26 10:12:21 INFO Completed processing injistackdev2/inji-web:release-0.16.x to bn46/inji-web:0.16.x + 13-Mar-26 10:12:21 INFO Completed processing injistackdev2/mimoto:release-0.21.x to bn46/mimoto:0.21.x diff --git a/release/vidivi/transfer_report.md b/release/vidivi/transfer_report.md index 41440683..ef4db698 100644 --- a/release/vidivi/transfer_report.md +++ b/release/vidivi/transfer_report.md @@ -1,14 +1,14 @@ # Image Transfer Report -**Date**: Fri Dec 12 13:27:17 UTC 2025 +**Date**: Fri Mar 13 10:12:21 UTC 2026 **Registry Type**: dockerhub **Registry URL**: https://index.docker.io/v1/ -**Organization**: mosipqa +**Organization**: bn46 **WireGuard VPN**: Disabled ## Statistics -- **Crane transfers**: 1 -- **Total completed**: 1 +- **Crane transfers**: 2 +- **Total completed**: 2 - **Failed transfers**: 00 ## Tools Used @@ -17,4 +17,5 @@ - Registry Support: HTTP/HTTPS auto-detection ## Transferred Images -- index.docker.io/mosipqa/partner-onboarder:1.3.x-beta.2 +- index.docker.io/bn46/mimoto:0.21.x +- index.docker.io/bn46/inji-web:0.16.x