Files
checkout/action.yml

82 lines
2.6 KiB
YAML

name: 'Checkout'
description: 'Checkout a repository in Gitea Actions environments'
author: 'CampbellWireless'
inputs:
repository:
description: 'Repository in owner/name format'
required: false
default: ${{ github.repository }}
ref:
description: 'The branch, tag, or SHA to checkout'
required: false
default: ${{ github.sha }}
token:
description: 'Token used to authenticate fetch operations'
required: false
default: ${{ secrets.GITHUB_TOKEN }}
server-url:
description: 'Base URL of the Git server (include subpath if applicable)'
required: true
path:
description: 'Relative path under GITHUB_WORKSPACE to checkout into'
required: false
default: '.'
fetch-depth:
description: 'Number of commits to fetch. Use 0 for full history.'
required: false
default: '1'
outputs:
commit:
description: 'Checked out commit SHA'
value: ${{ steps.checkout.outputs.commit }}
runs:
using: 'composite'
steps:
- id: checkout
shell: bash
run: |
set -euo pipefail
workspace="${GITHUB_WORKSPACE:-$(pwd)}"
target_path="${{ inputs.path }}"
if [[ "$target_path" == "." ]]; then
repo_dir="$workspace"
else
repo_dir="$workspace/$target_path"
mkdir -p "$repo_dir"
fi
repo_url="${{ inputs.server-url }}"
repo_url="${repo_url%/}/${{ inputs.repository }}.git"
if [[ ! -d "$repo_dir/.git" ]]; then
git init "$repo_dir"
fi
git -C "$repo_dir" remote remove origin >/dev/null 2>&1 || true
git -C "$repo_dir" remote add origin "$repo_url"
token='${{ inputs.token }}'
if [[ -n "$token" ]]; then
auth="$(printf '%s' "${GITHUB_ACTOR:-x-access-token}:$token" | base64 | tr -d '\n')"
host="$(printf '%s' '${{ inputs.server-url }}' | sed -E 's#https?://([^/]+).*#\1#')"
git -C "$repo_dir" config --local "http.https://$host/.extraheader" "AUTHORIZATION: basic $auth"
fi
depth='${{ inputs.fetch-depth }}'
if [[ "$depth" == "0" ]]; then
git -C "$repo_dir" fetch --prune --no-recurse-submodules origin \
+refs/heads/*:refs/remotes/origin/* \
+refs/tags/*:refs/tags/*
git -C "$repo_dir" checkout --detach "${{ inputs.ref }}"
else
git -C "$repo_dir" fetch --prune --no-recurse-submodules --depth "$depth" origin "${{ inputs.ref }}"
git -C "$repo_dir" checkout --detach FETCH_HEAD
fi
commit_sha="$(git -C "$repo_dir" rev-parse HEAD)"
echo "commit=$commit_sha" >> "$GITHUB_OUTPUT"