diff --git a/.github/workflows/image-transfer.yml b/.github/workflows/image-transfer.yml index 032b267d..bb9a1dbc 100644 --- a/.github/workflows/image-transfer.yml +++ b/.github/workflows/image-transfer.yml @@ -8,8 +8,8 @@ on: required: true default: '' type: string - TOKEN: - description: 'provide docker hub token' + SECRET_NAME: + description: 'Custom secret name (optional - defaults to _DOCKER_TOKEN)' required: false default: '' type: string @@ -43,27 +43,66 @@ 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: Set organization secrets dynamically id: ORG_TOKEN + env: + DESTINATION_ORGANIZATION: ${{ inputs.DESTINATION_ORGANIZATION }} + CUSTOM_SECRET_NAME: ${{ inputs.SECRET_NAME }} run: | - if [[ ${{ inputs.DESTINATION_ORGANIZATION }} == mosipqa ]]; then - echo "TOKEN=QA_NAMESPACE_DOCKER_HUB" >> $GITHUB_OUTPUT - echo "USERNAME=DOCKER_USERNAME" >> $GITHUB_OUTPUT + # Check if custom secret name is provided + if [ -n "$CUSTOM_SECRET_NAME" ]; then + # Use custom secret name + TOKEN_SECRET="$CUSTOM_SECRET_NAME" + printf 'Using custom secret name: %s\n' "$TOKEN_SECRET" + else + # Use dynamic naming based on organization + ORG="$DESTINATION_ORGANIZATION" + + # Validate DESTINATION_ORGANIZATION before normalization + if [ -z "$ORG" ]; then + printf '❌ ERROR: DESTINATION_ORGANIZATION is empty or not provided\n' >&2 + exit 1 + fi + + # Check for invalid characters (only letters, numbers, and hyphens are allowed) + if ! printf '%s' "$ORG" | grep -qE '^[a-zA-Z0-9-]+$'; then + printf '❌ ERROR: Invalid organization name: "%s"\n' "$ORG" >&2 + printf 'Organization name must contain only letters, numbers, and hyphens (no dots, spaces, or other special characters)\n' >&2 + exit 1 + fi + + # Convert organization name to valid secret name (replace hyphens, then uppercase) + # GitHub secret names can only contain [A-Z0-9_] + ORG_NORMALIZED=$(printf '%s' "$ORG" | tr '-' '_' | tr '[:lower:]' '[:upper:]') + + # Dynamically construct secret name based on organization + TOKEN_SECRET="${ORG_NORMALIZED}_DOCKER_TOKEN" + printf 'Using dynamic 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 +113,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..609d8512 100644 --- a/release/vidivi/README.md +++ b/release/vidivi/README.md @@ -192,19 +192,49 @@ 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` | +| `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` | ### Workflow Secrets -Configure these in GitHub repository settings → Secrets: +Configure these GitHub secrets dynamically based on your destination organization: -- `TOKEN`: Registry authentication token -- `SLACK_WEBHOOK_URL`: Slack notification webhook -- `WIREGUARD_CONFIG`: (Optional) WireGuard VPN configuration for private registries +**Secret Naming Convention:** +- Token: `_DOCKER_TOKEN` +- Organization names are normalized: hyphens converted to underscores, then uppercased +- GitHub secret names can only contain `[A-Z0-9_]` + +**Examples:** + - `mosipqa` → `MOSIPQA_DOCKER_TOKEN` + - `mosipdev` → `MOSIPDEV_DOCKER_TOKEN` + - `acmecorp` → `ACMECORP_DOCKER_TOKEN` + - `my-org` → `MY_ORG_DOCKER_TOKEN` (hyphen → underscore) + - `test-dev-env` → `TEST_DEV_ENV_DOCKER_TOKEN` (all hyphens → underscores) + +**Required Secrets:** +1. **`_DOCKER_TOKEN`**: Registry authentication token for the specific organization + - 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 + +**How to Add Secrets:** +1. Go to GitHub repository → Settings → Secrets and variables → Actions +2. Click "New repository secret" +3. Add secrets following the naming convention above +4. For organization `myorg`, create: `MYORG_DOCKER_TOKEN` +5. For organization `my-org`, create: `MY_ORG_DOCKER_TOKEN` (hyphens become underscores) + +**Security Benefits:** +- Tokens are never exposed in workflow logs +- Each organization has isolated credentials +- No hardcoded credentials in workflow files +- Automatic secret selection based on destination organization ### Running the Workflow @@ -221,6 +251,13 @@ Configure these in GitHub repository settings → Secrets: ``` 5. Click "Run workflow" +**Note:** The workflow automatically selects the correct token secret based on the `DESTINATION_ORGANIZATION` input: +- Organization `mosipqa` uses secret `MOSIPQA_DOCKER_TOKEN` +- Organization `mosipdev` uses secret `MOSIPDEV_DOCKER_TOKEN` +- Organization `acmecorp` uses secret `ACMECORP_DOCKER_TOKEN` +- Organization `my-org` uses secret `MY_ORG_DOCKER_TOKEN` (hyphens converted to underscores) +- Organization names are normalized: hyphens → underscores, then uppercased + ### Workflow Features ✅ **Automated Verification**: Checks source image existence before transfer diff --git a/release/vidivi/logs/vidivi.log b/release/vidivi/logs/vidivi.log index 3fa47d90..fc2925ac 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 + 16-Feb-26 09:20:54 INFO LOGFILE CREATED : vidivi.log + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO ******************** Check Images List ************************************************************************************ + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO IMAGES= [['injistackdev2/inji-web:release-0.16.x', '0.16.x'], ['injistackdev2/mimoto:release-0.21.x', '0.21.x']] + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO ******************** Check existence of Source Images ******************************************************************* + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO src = "injistackdev2/inji-web" tag = "release-0.16.x" + 16-Feb-26 09:20:54 DEBUG Starting new HTTPS connection (1): auth.docker.io:443 + 16-Feb-26 09:20:54 DEBUG https://auth.docker.io:443 "GET /token?service=registry.docker.io&scope=repository:injistackdev2/inji-web:pull HTTP/1.1" 200 None + 16-Feb-26 09:20:54 DEBUG Starting new HTTPS connection (1): registry.hub.docker.com:443 + 16-Feb-26 09:20:54 DEBUG https://registry.hub.docker.com:443 "GET /v2/repositories/injistackdev2/inji-web/tags/release-0.16.x HTTP/1.1" 200 None + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO src = "injistackdev2/mimoto" tag = "release-0.21.x" + 16-Feb-26 09:20:54 DEBUG Starting new HTTPS connection (1): auth.docker.io:443 + 16-Feb-26 09:20:54 DEBUG https://auth.docker.io:443 "GET /token?service=registry.docker.io&scope=repository:injistackdev2/mimoto:pull HTTP/1.1" 200 None + 16-Feb-26 09:20:54 DEBUG Starting new HTTPS connection (1): registry.hub.docker.com:443 + 16-Feb-26 09:20:54 DEBUG https://registry.hub.docker.com:443 "GET /v2/repositories/injistackdev2/mimoto/tags/release-0.21.x HTTP/1.1" 200 None + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO ******************** Check existence of Destination Docker Account *************************************************************** + 16-Feb-26 09:20:54 DEBUG Starting new HTTPS connection (1): hub.docker.com:443 + 16-Feb-26 09:20:54 DEBUG https://hub.docker.com:443 "GET /v2/users/bn46 HTTP/1.1" 200 None + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO ******************** Check existence of Destination Images *************************************************************** + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO [ bn46/inji-web ] + 16-Feb-26 09:20:54 INFO Destination Image = "bn46/inji-web" Destination Image tag = "0.16.x" IMAGE_ID : sha256:862abbee3278c4417b701811954825a3cc635ee871d8041296b9642839867df2 + 16-Feb-26 09:20:54 INFO + 16-Feb-26 09:20:54 INFO [ bn46/mimoto ] + 16-Feb-26 09:20:55 INFO Destination Image = "bn46/mimoto" Destination Image tag = "0.21.x" IMAGE_ID : sha256:aaace9caa29bd331811d786669e585769931a24e64f04ed19496e5a8dffe6ec0 + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO ******************** HASH Operation Results ********************************************************************** + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO ******************** Start Image Transfer operation *********************************************************************** + 16-Feb-26 09:20:55 DEBUG Trying paths: ['/home/runner/.docker/config.json', '/home/runner/.dockercfg'] + 16-Feb-26 09:20:55 DEBUG Found file at path: /home/runner/.docker/config.json + 16-Feb-26 09:20:55 DEBUG Found 'auths' section + 16-Feb-26 09:20:55 DEBUG Found entry (registry='https://index.docker.io/v1/', username='bn46') + 16-Feb-26 09:20:55 DEBUG http://localhost:None "GET /version HTTP/1.1" 200 823 + 16-Feb-26 09:20:55 DEBUG Looking for auth entry for 'docker.io' + 16-Feb-26 09:20:55 DEBUG Found 'https://index.docker.io/v1/' + 16-Feb-26 09:20:55 INFO Using 3 parallel workers for image transfers + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO ********** [ bn46/inji-web:0.16.x ] **************************************************** + 16-Feb-26 09:20:55 INFO Transferring image using crane... + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO ********** [ bn46/mimoto:0.21.x ] **************************************************** + 16-Feb-26 09:20:55 INFO Transferring image using crane... + 16-Feb-26 09:20:55 INFO Source uses tag reference: injistackdev2/inji-web:release-0.16.x + 16-Feb-26 09:20:55 INFO Analyzing source image manifest... + 16-Feb-26 09:20:55 INFO Source uses tag reference: injistackdev2/mimoto:release-0.21.x + 16-Feb-26 09:20:55 INFO Analyzing source image manifest... + 16-Feb-26 09:20:55 INFO Source is MULTI-ARCH image + 16-Feb-26 09:20:55 INFO Source Index Digest (Manifest List): sha256:862abbee3278c4417b701811954825a3cc635ee871d8041296b9642839867df2 + 16-Feb-26 09:20:55 INFO Source has 2 platform(s): + 16-Feb-26 09:20:55 INFO - linux/amd64: sha256:bdcd423130503707f8b023b74debbdab5e3660538cb0f58ae95b2fdbfdeb9c67 + 16-Feb-26 09:20:55 INFO - linux/arm64: sha256:215b937f6fec27e47c328b65be54aaf0adbb6feb6ae6f0d112f8ae5a496accce + 16-Feb-26 09:20:55 INFO Using secure connection for HTTPS registry + 16-Feb-26 09:20:55 INFO Executing: crane copy injistackdev2/inji-web:release-0.16.x index.docker.io/bn46/inji-web:0.16.x + 16-Feb-26 09:20:55 INFO Source is MULTI-ARCH image + 16-Feb-26 09:20:55 INFO Source Index Digest (Manifest List): sha256:aaace9caa29bd331811d786669e585769931a24e64f04ed19496e5a8dffe6ec0 + 16-Feb-26 09:20:55 INFO Source has 2 platform(s): + 16-Feb-26 09:20:55 INFO - linux/amd64: sha256:f0f371927bb3727cb2e63bd554cbc3c5821c7221cd9709216c0ee71e6a75cdb6 + 16-Feb-26 09:20:55 INFO - linux/arm64: sha256:4ab0bf4794697bb894590371900b660bfba31ad465d0849f191f2a1d42615350 + 16-Feb-26 09:20:55 INFO Using secure connection for HTTPS registry + 16-Feb-26 09:20:55 INFO Executing: crane copy injistackdev2/mimoto:release-0.21.x index.docker.io/bn46/mimoto:0.21.x + 16-Feb-26 09:20:55 INFO Successfully transferred image with crane + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO Analyzing destination image manifest... + 16-Feb-26 09:20:55 INFO Successfully transferred image with crane + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO Analyzing destination image manifest... + 16-Feb-26 09:20:55 INFO Destination is MULTI-ARCH image + 16-Feb-26 09:20:55 INFO Destination Index Digest (Manifest List): sha256:862abbee3278c4417b701811954825a3cc635ee871d8041296b9642839867df2 + 16-Feb-26 09:20:55 INFO Destination has 2 platform(s): + 16-Feb-26 09:20:55 INFO - linux/amd64: sha256:bdcd423130503707f8b023b74debbdab5e3660538cb0f58ae95b2fdbfdeb9c67 + 16-Feb-26 09:20:55 INFO - linux/arm64: sha256:215b937f6fec27e47c328b65be54aaf0adbb6feb6ae6f0d112f8ae5a496accce + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO === DIGEST VERIFICATION === + 16-Feb-26 09:20:55 INFO Comparing Index Digests (Manifest Lists): + 16-Feb-26 09:20:55 INFO Source: sha256:862abbee3278c4417b701811954825a3cc635ee871d8041296b9642839867df2 + 16-Feb-26 09:20:55 INFO Destination: sha256:862abbee3278c4417b701811954825a3cc635ee871d8041296b9642839867df2 + 16-Feb-26 09:20:55 INFO ✓ Index Digest MATCH - Multi-arch structure preserved perfectly! + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO Comparing Platform Manifests: + 16-Feb-26 09:20:55 INFO ✓ linux/amd64: sha256:bdcd423130503707f8b023b74debbdab5e3660538cb0f58ae95b2fdbfdeb9c67 (MATCH) + 16-Feb-26 09:20:55 INFO ✓ linux/arm64: sha256:215b937f6fec27e47c328b65be54aaf0adbb6feb6ae6f0d112f8ae5a496accce (MATCH) + 16-Feb-26 09:20:55 INFO ✓ All 2 platform manifest(s) match perfectly! + 16-Feb-26 09:20:55 INFO Creating latest tag: crane copy injistackdev2/inji-web:release-0.16.x index.docker.io/bn46/inji-web:latest + 16-Feb-26 09:20:55 INFO Destination is MULTI-ARCH image + 16-Feb-26 09:20:55 INFO Destination Index Digest (Manifest List): sha256:aaace9caa29bd331811d786669e585769931a24e64f04ed19496e5a8dffe6ec0 + 16-Feb-26 09:20:55 INFO Destination has 2 platform(s): + 16-Feb-26 09:20:55 INFO - linux/amd64: sha256:f0f371927bb3727cb2e63bd554cbc3c5821c7221cd9709216c0ee71e6a75cdb6 + 16-Feb-26 09:20:55 INFO - linux/arm64: sha256:4ab0bf4794697bb894590371900b660bfba31ad465d0849f191f2a1d42615350 + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO === DIGEST VERIFICATION === + 16-Feb-26 09:20:55 INFO Comparing Index Digests (Manifest Lists): + 16-Feb-26 09:20:55 INFO Source: sha256:aaace9caa29bd331811d786669e585769931a24e64f04ed19496e5a8dffe6ec0 + 16-Feb-26 09:20:55 INFO Destination: sha256:aaace9caa29bd331811d786669e585769931a24e64f04ed19496e5a8dffe6ec0 + 16-Feb-26 09:20:55 INFO ✓ Index Digest MATCH - Multi-arch structure preserved perfectly! + 16-Feb-26 09:20:55 INFO + 16-Feb-26 09:20:55 INFO Comparing Platform Manifests: + 16-Feb-26 09:20:55 INFO ✓ linux/amd64: sha256:f0f371927bb3727cb2e63bd554cbc3c5821c7221cd9709216c0ee71e6a75cdb6 (MATCH) + 16-Feb-26 09:20:55 INFO ✓ linux/arm64: sha256:4ab0bf4794697bb894590371900b660bfba31ad465d0849f191f2a1d42615350 (MATCH) + 16-Feb-26 09:20:55 INFO ✓ All 2 platform manifest(s) match perfectly! + 16-Feb-26 09:20:55 INFO Creating latest tag: crane copy injistackdev2/mimoto:release-0.21.x index.docker.io/bn46/mimoto:latest + 16-Feb-26 09:20:56 INFO Successfully created latest tag + 16-Feb-26 09:20:56 INFO Image available at: index.docker.io/bn46/mimoto:0.21.x + 16-Feb-26 09:20:56 INFO + 16-Feb-26 09:20:56 INFO NOTE: For multi-arch images, the Index Digest (manifest list) is what matters most. + 16-Feb-26 09:20:56 INFO Individual platform manifests should also match to ensure identical content. + 16-Feb-26 09:20:56 INFO Successfully created latest tag + 16-Feb-26 09:20:56 INFO Image available at: index.docker.io/bn46/inji-web:0.16.x + 16-Feb-26 09:20:56 INFO + 16-Feb-26 09:20:56 INFO NOTE: For multi-arch images, the Index Digest (manifest list) is what matters most. + 16-Feb-26 09:20:56 INFO Individual platform manifests should also match to ensure identical content. + 16-Feb-26 09:20:56 INFO Completed processing injistackdev2/inji-web:release-0.16.x to bn46/inji-web:0.16.x + 16-Feb-26 09:20:56 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..f0b94f0c 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**: Mon Feb 16 09:20:56 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