CLI 자동화 및 CI#
정확한 CLI 릴리스를 핀으로 고정하고 확인한 다음, 액션 매니페스트 검사 및 오프라인 클라이언트 사전 비행만 자동화합니다.
한국어 번역 검토 중 기술적 의미가 충돌하는 경우 영어 원문을 기준으로 사용하세요.
개요#
CI는 정확한 CLI 아카이브를 고정 및 검증하고, 포함된 작업 매니페스트를 검사하고, 오프라인 클라이언트 사전 전달 영수증을 생성할 수 있습니다. 이 릴리스에서 자동화할 수 있는 시스템 설치 명령, 성공적인 설치 기능 검색, 자격 있는 로컬 엔진 실행 또는 일반적으로 사용 가능한 원격 작업 워크플로는 없습니다.
준비 게이트#
워크플로가 CLI를 사용하기 전에:
하나의 CLI 버전(이 워크플로가 확인된 버전)과 정확한 Linux x86_64 아카이브 파일 이름 및 게시된 체크섬을 고정합니다.
공식 출시 경로를 통해 다운로드하고 다운로드 확인에 문서화된 대로 체크섬 및 분리 서명을 확인합니다.
새로운 job-owned 디렉토리로 추출합니다.
해당 디렉터리에서 정확한 경로를 실행합니다. 개별 실행 파일을 공유 시스템 위치에 복사하지 마십시오.
정확한 추출에서
alti commands를 실행하고 25개의 항목이 있는 JSON 배열이 필요합니다.작업 흐름에 작업 엔벨로프 검사가 필요한 경우 CLI 첫 번째 성공에서 오프라인 유효성 검사만 사용하십시오.
매니페스트 검사 전의 모든 단계는 행동이 아닌 정체성에 관한 것으로, 게이트가 파일 이름과 체크섬을 먼저 핀으로 고정한 다음 바이너리에 포함된 내용을 묻는 이유입니다.
압축 파일의 파일 이름에 로컬 엔진 실행을 조건부로 만들지 마십시오. 일반 압축 파일에는 신뢰할 수 있는 로컬 기능을 증명하는 데 필요한 영수증 레이아웃이 없습니다.
오프라인 CI 레시피#
job.json 및 소유자 전용 소스를 CLI 첫 번째 성공에 설명된 대로 정확하게 준비합니다. 그런 다음 다음과 동등한 단계를 실행합니다.
set -euo pipefail
CLI_VERSION="${CLI_VERSION:?pin the CLI version this workflow verified}"
EXPECTED_CLI_SHA256="${EXPECTED_CLI_SHA256:?pin the published checksum for that version}"
CLI_ARCHIVE="$RUNNER_TEMP/altifigence-cli-v$CLI_VERSION-x86_64-unknown-linux-gnu.tar.gz"
CLI_DIR="$RUNNER_TEMP/altifigence-cli-$CLI_VERSION"
CLI_WORKSPACE="$RUNNER_TEMP/alti-offline-workspace"
test "$(sha256sum "$CLI_ARCHIVE" | awk '{print $1}')" = "$EXPECTED_CLI_SHA256"
test ! -e "$CLI_DIR"
mkdir -m 700 "$CLI_DIR"
tar -xzf "$CLI_ARCHIVE" -C "$CLI_DIR"
chmod 600 "$CLI_WORKSPACE/inputs/rtl/top.sv"
"$CLI_DIR/alti" commands > "$RUNNER_TEMP/alti-commands.json"
"$CLI_DIR/alti" --json job validate \
--job "$CLI_WORKSPACE/job.json" \
--workspace-root "$CLI_WORKSPACE" \
--source rtl/top.sv \
> "$RUNNER_TEMP/alti-preflight.json" \
2> "$RUNNER_TEMP/alti-preflight-error.json"
jq -e 'length == 25' "$RUNNER_TEMP/alti-commands.json" >/dev/null
jq -e '
.receipt_schema == "altifigence.cli.engine-job-preflight.v1" and
.status == "client_preflight_valid" and
.submitted == false and
.server_authority_verified == false
' "$RUNNER_TEMP/alti-preflight.json" >/dev/null
CLI_VERSION 및 EXPECTED_CLI_SHA256을 워크플로 입력 또는 저장소 변수로 공급합니다. 확인한 버전과 확인된 공개 신뢰 자료에서 가져온 체크섬으로 설정하십시오. 둘 다 :?를 사용하므로 고정되지 않은 아카이브를 진행하지 않고 해당 줄에서 메시지를 잊어 버리는 워크플로가 실패합니다.
버전을 변수로 유지하는 것은 플로팅 상태로 두는 것과 다릅니다. 다운로드 확인에서 새 아카이브를 다시 확인한 후에도 워크플로는 여전히 하나의 리터럴 값을 고정하고 의도적으로 변경해야 합니다. 여기에 인쇄된 번호가 다음 프로모션에서 오래되기 때문에 이 페이지에서 벗어났습니다. 워크플로에서 벗어나지 않았습니다.
위의 실행 경로는 CI 플랫폼에서 제공하는 예제입니다. 작업 소유 디렉토리에 맞게 조정하십시오. 공유 또는 권한 있는 시스템 위치를 사용하지 마십시오.
이 단계는 아카이브 및 신뢰 자료가 존재하는 후에 ALTI_TOKEN, ALTI_ORG_ID 또는 네트워크 액세스가 필요하지 않습니다. 자격 증명을 삽입하지 마십시오.
기능 및 출력 규칙#
JSON 파일을 읽기 전에 종료 상태를 확인하십시오.
정확한 영수증 스키마와 두 개의 거짓 권한 부울이 필요합니다.
stdout과 stderr을 별도로 유지하십시오. JSON 오류 객체는 영수증이 아닙니다.
소스가 러너에 의해 소유되지 않거나, 두 번 이상 링크되거나, 그룹/세계에 쓰기 가능하거나, 작업 공간을 벗어나는 경우 실패합니다.
봉투의 클라우드 배치 필드를 제출 단계로 전환하지 마십시오.
로컬 엔진, 소스 업로드, MCP 또는 원격 API 단계를 이 레시피에 추가하지 마십시오.
증거 보존#
압축 파일 및 확인된 체크섬, 액션 매니페스트 JSON, 편집된 명령줄, 종료 상태, 오프라인 사전 비행 영수증, 작업 엔벨로프 수정본 및 소스 SHA-256을 유지합니다. 사전 비행이 다이제스트를 계산했기 때문에 소스 바이트를 유지하지 마십시오.
로그를 업로드하기 전에 고객 데이터를 수정합니다. 매니페스트 항목, 클라이언트 사전 비행, 제출, 수락된 작업, 완료된 실행 및 엔진 증거는 서로 다른 결과이며 보존된 증거에 따라 달라져야 합니다.