sam.pikesley.org

Pokrovsky

Github History Vandalism as a Service

The unbroken chain of pointless Things-as-a-Service continues. This one uses my Uncle Clive tool (via my Dead Cockroach tool) to generate a script suitable for vandalising your Git commit history (my account is probably displaying an example right now).

API

/:user/:repo/:text

Will return a bash script which, when run locally, will:

  • initialise a local git repo named :repo
  • create a series of empty commits
  • push the repo to git@github.com:user/repo.git

The commits will be structured such that they will 'write' the first six characters of :text on the Github commit calendar using the 1982 Sinclair Spectrum character set. There is a limitation in that the Spectrum font is 8 units high, and the Github calendar has a height of 7 (see dead-cockroach for an explanation of how this is handled).

All of the above assumes that you can do public-key authentication to Github from the box on which you're running this.

Running it

This used to all run on the Heroku free-tier, but they stopped that party in November 2022, so I've now revived it with an over-elaborate docker-compose setup. You need to check out three different repos, so find somewhere on your laptop where you wanna put it all, then:

for REPO in uncle-clive dead-cockroach pokrovsky ;
do
    git clone https://github.com/pikesley/${REPO}
done

Then create the docker-compose files:

cat <<EOF > docker-compose.yaml
version: "3.9"

services:
  uncle-clive:
    build: uncle-clive
    image: pikesley/uncle-clive
    ports:
      - ${CLIVE_PORT}:${CLIVE_PORT}
    working_dir: /opt/uncle-clive
    command: bundle exec rackup -p ${CLIVE_PORT} -o 0.0.0.0

  dead-cockroach:
    build: dead-cockroach
    image: pikesley/dead-cockroach
    ports:
      - ${COCKROACH_PORT}:${COCKROACH_PORT}
    working_dir: /opt/dead-cockroach
    environment:
      CLIVE_PORT: ${CLIVE_PORT}
    command: bundle exec rackup -p ${COCKROACH_PORT} -o 0.0.0.0

  pokrovsky:
    build: pokrovsky
    image: pikesley/pokrovsky
    ports:
      - ${POKROVSKY_PORT}:${POKROVSKY_PORT}
    working_dir: /opt/pokrovsky
    environment:
      POKROVSKY_PORT: ${POKROVSKY_PORT}
      COCKROACH_PORT: ${COCKROACH_PORT}
    command: bundle exec ruby lib/pokrovsky.rb
EOF

cat  <<EOF > .env
CLIVE_PORT=6060
COCKROACH_PORT=7070
POKROVSKY_PORT=8080
EOF

And build and run it:

docker compose build
docker compose up

Using it

To actually vandalise your GH commit graph, from a different terminal,

export SERVER=http://localhost:8080
export REPO=dummy
export TEXT=`echo "© 1982" | sed "s: :%20:g"`
export GHUSER=yourghuser
curl "${SERVER}/${GHUSER}/${REPO}/${TEXT}" | bash

(Note: there's some latency before the commits actually appear in your graph, be patient)

Notes

  • This is ancient Ruby and I have no interest in updating it. Many of the tests are now busted and I really don't care.
  • You should start with a fresh repo each time, both locally and on Github. The script makes no attempt to create a new Github repo, and it certainly doesn't try to delete anything from there. If you can't work out how to do this safely, you probably shouldn't use these tools.
  • If you decide this isn't for you after all, just delete the repo and it will all go away.
  • This owes a massive debt to Gelstudios' splendid Gitfiti.
  • I gave a talk about this at EMF Camp 2014.