name: 'Setup CI metadata' description: 'Composite action to derive the registry and CI image tag for the current repository.' inputs: registry: description: 'Container registry derived from the current GitHub server URL' required: false default: '' repository: description: 'GitHub repository in the format owner/repo' required: false default: ${{ github.repository }} image_tag: description: 'Tag for the CI image' required: false default: 'latest' outputs: registry: description: 'Container registry derived from the current GitHub server URL' value: ${{ steps.setup.outputs.registry }} image_tag: description: 'Fully qualified CI image tag' value: ${{ steps.setup.outputs.image_tag }} latest_tag: description: 'Fully qualified latest CI image tag' value: ${{ steps.setup.outputs.latest_tag }} runs: using: 'composite' steps: - name: Setup Dynamic Metadata id: setup shell: bash run: | # Extract the domain from server_url, handling both https:// and ssh:// schemes SERVER_URL="${{ github.server_url }}" if [[ "$SERVER_URL" =~ ^ssh:// ]]; then # For SSH URLs like ssh://git@host:port/path, extract just the hostname SERVER_DOMAIN=$(echo "$SERVER_URL" | sed -e 's|^ssh://||' -e 's|^[^@]*@||' -e 's|:[0-9]*.*||') else # For HTTPS URLs, extract domain without scheme SERVER_DOMAIN=$(echo "$SERVER_URL" | sed -e 's|^[^/]*//||' -e 's|/.*$||') fi echo "Extracted server domain: $SERVER_DOMAIN" if [[ -n "${{ inputs.registry }}" ]]; then REGISTRY="${{ inputs.registry }}" elif [[ "$SERVER_DOMAIN" == "github.com" ]]; then REGISTRY="ghcr.io" else REGISTRY="$SERVER_DOMAIN" fi # Extract owner/repo from github.repository, handling SSH URLs REPO="${{ inputs.repository }}" if [[ "$REPO" =~ ^ssh:// ]] || [[ "$REPO" =~ ^https:// ]]; then # Extract owner/repo from URLs like ssh://git@host/owner/repo.git or https://host/owner/repo.git REPO=$(echo "$REPO" | sed -e 's|^[^/]*/||' -e 's|\.git$||' | rev | cut -d'/' -f1,2 | rev) fi # Docker image names must be lowercase REGISTRY="${REGISTRY,,}" REPO="${REPO,,}" IMAGE_TAG="${REGISTRY}/${REPO}/ci:${{ inputs.image_tag }}" LATEST_TAG="${REGISTRY}/${REPO}/ci:latest" echo "registry=$REGISTRY" >> "$GITHUB_OUTPUT" echo "image_tag=$IMAGE_TAG" >> "$GITHUB_OUTPUT" echo "latest_tag=$LATEST_TAG" >> "$GITHUB_OUTPUT"