Git Product home page Git Product logo

delete-run-artifacts-action's Introduction

WARNING: This action deletes data. Use with care and at your own risk.

testrun

delete-run-artifacts

This github action deletes all artifacts generated by a github workflow run. It's intended to be used to delete all artifacts generated by a run at the end of this run.

This can be useful if your workflow temporarily stores artifacts and they're not needed anymore by the end of the run (i.e. because they got uploaded or published as a release by one of the steps). Deleting these redundant artifacts at the end of the run saves storage space (which is limited for private repos).

How to use

This action requires a bit more preparation in your repo than most other actions. Because artifacts cannot get deleted during a workflow run (only after a run has completed), we need to spawn a separate workflow run for the deletion by a webhook at the end of the main workflow run.

First, create a personal access token (required to call a webhook):

then store the token as a secret in the repo, so that the workflow can use it:

  • in your github repo settings: Settings tab -> Secrets -> add a new secret
    • Name: FOR_WEBHOOKS_SECRET
    • Value: <YOUR-TOKEN>

then create a file in your repo .github/workflows/webhook_target.yml with:

name: delete calling job's artifacts
on: repository_dispatch
jobs:
  main:
    runs-on: ubuntu-latest
    steps:
    - name: Delete artifacts
      if: github.event.action == 'delete_all_artifacts'
      uses: christian-korneck/delete-run-artifacts-action@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        parent_runid: ${{ github.event.client_payload.parent_runid  }}
        parent_repo: ${{ github.event.client_payload.parent_repo }}

and finally add the following cleanup job to your actual workflow (i.e. in .github/workflows/workflow.yml). Make sure that needs: points to your last job in the workflow, otherwise the cleanup might run too early.

name: your workflow
on: [push]
  your_last_job:
    (... add your stuff here ...)
  cleanup_job:
    needs: [your_last_job]
    if: always()
    runs-on: ubuntu-latest
    steps:
    - name: call webhook to delete artifacts
      env:
        FOR_WEBHOOKS_SECRET: ${{ secrets.FOR_WEBHOOKS_SECRET }}
      run: |
        echo "::add-mask::$FOR_WEBHOOKS_SECRET"
        curl --verbose --fail --show-error --location --request POST "https://api.github.com/repos/$GITHUB_REPOSITORY/dispatches" --header "Authorization: token $FOR_WEBHOOKS_SECRET" --header 'Content-Type: application/json' --header 'Accept: application/vnd.github.everest-preview+json' --data-raw "{ \"event_type\": \"delete_all_artifacts\", \"client_payload\": {\"parent_runid\": \"$GITHUB_RUN_ID\", \"parent_repo\": \"$GITHUB_REPOSITORY\"} }"

Please note: Due to a github limitation, the file .github/workflows/webhook_target.yml needs to be always present in your master or default branch. The action will work with any branch however.

(Check this repo or the .github/workflow dir for a working example)

Reference

The action can also be used without a webhook on any past workflow run:

Inputs

parent_repo

Required the github repo that hosts the parent github workflow run. Example: "github-user/hello-world".

parent_runid

Required the id of the parent github workflow run whos artifacts should get deleted. Example: "0000000".

Outputs

none (just succeeds or fails)

delete-run-artifacts-action's People

Contributors

christian-korneck avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.