INTEGRITY Документация

Git-клиент

Вы можете использовать стандартный Git-клиент для работы с репозиториями Artifacts. В этом примере рассматривается клонирование, но тот же подход подходит для fetch, pull, push и любой другой операции Git.

Для этого нужно:

Когда у вас есть URL-адрес удалённого репозитория и токен, вы можете использовать их для выполнения команд Git в этом репозитории.

В этом примере предполагается, что репозиторий уже существует и у вас есть API-токен Cloudflare с Артефакты > Изменить.

Получить удалённый репозиторий и клонировать его

Замените значения-заполнители своим идентификатором учётной записи, API-токеном и именем репозитория. Скрипт получает URL-адрес удалённого репозитория через API, создаёт токен только для чтения со сроком действия один час и клонирует репозиторий в локальный каталог.

В примере ниже используется jq для извлечения полей из ответов JSON.

# Set your account details
export ACCOUNT_ID="<YOUR_ACCOUNT_ID>"
export ARTIFACTS_NAMESPACE="default"
export ARTIFACTS_REPO="starter-repo"
export CLOUDFLARE_API_TOKEN="<YOUR_API_TOKEN>"
export ARTIFACTS_BASE_URL="https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/artifacts/namespaces/$ARTIFACTS_NAMESPACE"

# Fetch the repo's remote URL
REPO_JSON=$(curl --silent "$ARTIFACTS_BASE_URL/repos/$ARTIFACTS_REPO" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN")

ARTIFACTS_REMOTE=$(printf '%s' "$REPO_JSON" | jq -r '.result.remote')

# Mint a short-lived read token
TOKEN_JSON=$(curl --silent "$ARTIFACTS_BASE_URL/tokens" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data "{\"repo\":\"$ARTIFACTS_REPO\",\"scope\":\"read\",\"ttl\":3600}")

ARTIFACTS_TOKEN=$(printf '%s' "$TOKEN_JSON" | jq -r '.result.plaintext')

# Clone the repo
git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" clone "$ARTIFACTS_REMOTE" artifacts-clone

Теперь у вас есть стандартная рабочая копия Git в ./artifacts-clone.

Такой подход полезен, когда обнаружение репозиториев или контроль доступа находится в другой системе, но локальные инструменты все равно ожидают обычный git remote.

Аутентификация

Обрабатывать ARTIFACTS_TOKEN как секрет. Не допускайте его попадания в логи и отдавайте предпочтение http.extraHeader чем сохранение учётных данных в URL удалённого репозитория.

Если для недолговечного workflow нужен автономный URL удалённого репозитория, извлеките секрет токена и создайте аутентифицированный удалённый репозиторий только для этой команды:

ARTIFACTS_TOKEN_SECRET="${ARTIFACTS_TOKEN%%\?expires=*}"
ARTIFACTS_AUTH_REMOTE="https://x:${ARTIFACTS_TOKEN_SECRET}@${ARTIFACTS_REMOTE#https://}"

git clone "$ARTIFACTS_AUTH_REMOTE" artifacts-clone