Skip to Content

Files Action

Deplite/files-action@v1은 GitHub Actions에서 Deplite 스토리지에 파일을 업·다운·삭제하는 공식 액션이에요.
하나의 액션이 mode 입력으로 세 동작을 분기해요.

Inputs

이름필수모드기본값설명
api-token공통Deplite API 토큰 (Bearer)
mode공통upload, download, delete 중 하나
pathupload업로드할 로컬 파일 경로
filenameuploadbasename(path)저장될 파일명 오버라이드
content-typeuploadMIME 타입 (예: application/vnd.android.package-archive)
cleanup-ruleuploadttl 또는 persistent
ttl-secondsuploadcleanup-rule=ttl일 때 TTL 초 (60 ≤ ttl ≤ 90일)
binding-idupload스토리지 binding UUID. 토큰이 여러 binding 허용 시 필수
file-iddownload, delete파일 UUID
destdownload다운로드 결과 저장 로컬 경로
base-url공통https://api.deplite.io/v1API 베이스 URL 오버라이드

Outputs

이름모드설명
file-idupload새로 생성된 파일의 UUID
sizeupload, download파일 크기(byte)
statusupload파일 상태 (pending / active …)

동작 상세

Upload — 3단계 (presign + PUT + complete)

1. POST ${base-url}/storage/files/presign-upload body: { filename, cleanupRule, contentType?, ttlSeconds?, bindingId? } → { fileId, uploadUrl, uploadHeaders?, expiresInSeconds? } 2. PUT ${uploadUrl} headers: ...uploadHeaders, [Content-Type] body: <file stream> (undici duplex: 'half') 3. POST ${base-url}/storage/files/${fileId}/complete → FileMeta { id, size, status, ... }
  • 1·3은 Bearer 인증, 2는 presigned URL이라 헤더만 그대로 따라가요.
  • 파일은 메모리에 통째로 올리지 않고 fs.createReadStream으로 PUT에 흘려보내요.
  • 재시도는 액션 자체에서 하지 않아요(아래 “에러 처리” 참고).

업로드가 끝나면 outputs.file-id로 다른 step에 넘기거나, trigger-actionparams에 실어 워크플로우로 전달하면 돼요.

Download — 2단계

1. GET ${base-url}/storage/files/${file-id}/download-url → { downloadUrl, expiresInSeconds } 2. GET ${downloadUrl} → 응답 본문을 ${dest}에 스트림으로 저장
  • dest의 상위 디렉토리는 자동 생성돼요.
  • 응답 헤더의 Content-Length(있을 때)가 outputs.size로 들어와요.

Delete — 1단계

DELETE ${base-url}/storage/files/${file-id} → 204 No Content (또는 2xx)
  • 404를 받으면 step은 실패 처리돼요. “이미 없으면 OK”가 필요하면 continue-on-error: true로 감싸주세요.

에러 처리

  • 모든 단계에서 비-2xx 응답은 HTTP status + body를 포함한 메시지로 즉시 throw → core.setFailed() → step 실패 (exit 1)
  • 네트워크 오류·디스크 오류도 마찬가지
  • 자동 재시도는 없어요.
    일시적 5xx에 대응하려면 step 단위 retry를 직접 구성해주세요 (예: nick-fields/retry@v3).

Bearer 인증 외 환경변수 사용 없음

trigger-action과 달리 files-actionGITHUB_* 환경변수를 사용하지 않아요.
모든 동작은 inputs와 토큰으로만 결정돼요.

cleanup-rule 선택 기준

의미적합한 용도
ttl지정한 초 후 자동 삭제빌드 산출물, 단기 임시 파일
persistent명시 삭제 전까지 보관릴리즈 아티팩트, 정식 배포물

빌드 산출물에 persistent를 쓰면 스토리지가 빠르게 차오르니, CI 산출물은 ttl + 짧은 ttl-seconds(잡 평균 실행 시간 +α)를 추천드려요.

스토리지 binding이 여러 개일 때

조직 안에 여러 storage binding이 있고 토큰이 그중 둘 이상에 권한을 가진 경우, 어떤 binding에 올릴지 binding-id로 명시해야 해요.

- uses: Deplite/files-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} mode: upload binding-id: ${{ vars.STAGING_STORAGE_BINDING_ID }} path: ./build/app.apk cleanup-rule: persistent

토큰이 단일 binding만 허용한다면 자동으로 그 binding이 선택돼요.

모드별 최소 예제

Upload

- uses: Deplite/files-action@v1 id: upload with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} mode: upload path: ./build/app.apk content-type: application/vnd.android.package-archive cleanup-rule: ttl ttl-seconds: 86400 - run: echo "fileId=${{ steps.upload.outputs.file-id }}"

Download

- uses: Deplite/files-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} mode: download file-id: 00000000-0000-0000-0000-000000000000 dest: ./downloaded.bin

Delete

- uses: Deplite/files-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} mode: delete file-id: 00000000-0000-0000-0000-000000000000

관련 문서

최종 수정 일자: