githubocto / github-archive-action

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Archive your GitHub data

This action archives GitHub-specific data into your repository.

GitHub has data that is not represented in git — like Issues and PRs. The purpose of this action is to capture that data in a portable, usable fashion.

How does it work?

This action is triggered whenever GitHub data changes — for example, when issues are created or edited. It does not capture data that is already represented in your git repo, like commits.

This action is triggered whenever changes are made to GitHub data. See below for a list of events which trigger this action.

The event payload JSON is written into a SQLite database that is stored on an orphan branch called github-meta. Because these commits are made to an orphan branch, they won't get in the way of your day-to-day usage of git.

A clone of the repository will include the github-meta branch, making it easy to build tooling that uses that data.

Setup

Clone your repo, and then create/push the orphan branch:

# in your repo:

# create the orphan branch
$ git checkout --orphan github-meta

# Remove all your repo content from the orphan branch.
# Don't worry — this only affects the orphan branches. Your content is safe!
$ git rm -rf .
$ git commit --allow-empty -m "Creating github-meta branch"

# and push it up to github
$ git push origin github-meta

Next, setup the action! Copy the following into .github/workflows/archive.yaml:

name: GitHub Archive

on:
  create:
  delete:
  push:
  fork:
  gollum:
  issues:
  issue_comment:
  label:
  milestone:
  page_build:
  project:
  project_card:
  project_column:
  public:
  pull_request:
  pull_request_review:
  pull_request_review_comment:
  registry_package:
  release:
  status:
  watch:

jobs:
  archive:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repo
        uses: actions/checkout@v2
        with:
          ref: 'github-meta'
      - name: Archive event
        uses: githubocto/github-archive-action@v1

This workflow definition is triggered for almost all of the webhook event types that GitHub supports. Notably, workflow_run is excluded as it would capture runs of this archiving action.

If you don't care about a given kind of event, you can remove that from the list of triggers in the on: block of your workflow file.

How is the data serialized?

The data is written to a SQLite database named github-archive.sqlite in the github-meta branch. It contains one table, events, with the following schema:

CREATE TABLE events (
    id TEXT PRIMARY KEY,
    timestamp TEXT NOT NULL,
    kind TEXT NOT NULL,
    event TEXT NOT NULL
);
Column Description
id A globally-unique ID for the captured event record.
timestamp An timestamp indicating when the event was captured, in simplified extended ISO-8601 format
kind The name of the webhook event type which triggered the action, like issues or pull_request
event The JSON payload data for the event

See the webhook events documentation to find links to example payloads for each event.

License

MIT

About

License:MIT License


Languages

Language:TypeScript 100.0%