Compare commits

...

17 Commits

Author SHA1 Message Date
Platane
cd3320efff 📦 1.1.1 2022-03-24 12:05:22 +00:00
platane
553d8d8efa 📓 2022-03-24 13:00:13 +01:00
platane
e80a44ca5f 🔨 fix svg rounded square 2022-03-24 12:56:26 +01:00
platane
4ced502e11 📓 update readme 2022-03-24 12:43:09 +01:00
Platane
0374e20a50 📦 1.1.0 2022-03-24 11:25:21 +00:00
platane
7ba88d1fbd 📓 2022-03-24 12:21:27 +01:00
Platane
909a9c7fce 📦 1.0.2-rc.6 2022-03-24 11:03:14 +00:00
platane
e1dcae75b9 👷 2022-03-24 11:58:31 +01:00
Platane
5df41911e6 📦 1.0.2-rc.5 2022-03-24 10:53:45 +00:00
platane
c9b130d9da 🔨 try async import 2022-03-24 11:51:16 +01:00
Platane
05df7cb642 📦 1.0.2-rc.4 2022-03-24 10:35:37 +00:00
Platane
309795a2a5 📦 v1.0.2-rc.4 2022-03-24 10:28:00 +00:00
platane
e79b3bb634 👷 2022-03-24 11:25:50 +01:00
Platane
7c0522bfa8 📦 1.0.2-rc.3 2022-03-24 10:19:14 +00:00
platane
be91c43c71 👷 2022-03-24 11:13:40 +01:00
platane
67c66ac8ae 👷 2022-03-24 11:04:01 +01:00
platane
c97378f175 👷 2022-03-24 10:59:43 +01:00
14 changed files with 48890 additions and 60 deletions

View File

@@ -33,12 +33,16 @@ jobs:
test-action:
runs-on: ubuntu-latest
needs: build-docker-image
steps:
- uses: actions/checkout@v2
- name: update action.yml to use image from local Dockerfile
run: |
sed -i "s/image: .*/image: Dockerfile/" action.yml
- name: generate-snake-game-from-github-contribution-grid
id: snake-gif
uses: Platane/snk@master
id: generate-snake
uses: ./
with:
github_user_name: platane
gif_out_path: dist/github-contribution-grid-snake.gif
@@ -46,15 +50,16 @@ jobs:
- name: ensure the generated file exists
run: |
ls -l ${{ steps.snake-gif.outputs.gif_out_path }}
test -f ${{ steps.snake-gif.outputs.gif_out_path }}
ls dist
test -f ${{ steps.generate-snake.outputs.gif_out_path }}
test -f ${{ steps.generate-snake.outputs.svg_out_path }}
- uses: crazy-max/ghaction-github-pages@v2.5.0
with:
target_branch: output
build_dir: dist
env:
GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN_GH_PAGES }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
deploy-ghpages:
runs-on: ubuntu-latest
@@ -70,41 +75,10 @@ jobs:
env:
GITHUB_USER_CONTRIBUTION_API_ENDPOINT: https://snk-one.vercel.app/api/github-user-contribution/
- uses: crazy-max/ghaction-github-pages@v2.5.0
- uses: crazy-max/ghaction-github-pages@v2.6.0
if: success() && github.ref == 'refs/heads/master'
with:
target_branch: gh-pages
build_dir: packages/demo/dist
env:
GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN_GH_PAGES }}
build-docker-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
cache: yarn
node-version: 16
- run: yarn install --frozen-lockfile
- run: yarn build:action
- uses: docker/setup-qemu-action@v1
- uses: docker/setup-buildx-action@v1
- uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- uses: docker/build-push-action@v2
id: docker_build
with:
push: ${{ github.ref == 'refs/heads/master' }}
tags: |
platane/snk:latest
platane/snk:${{ github.sha }}
file: packages/action/Dockerfile
context: packages/action

75
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,75 @@
name: release
on:
workflow_dispatch:
inputs:
version:
description: "Version"
default: "0.0.1"
required: true
type: string
description:
description: "Version description"
type: string
prerelease:
description: "Prerelease"
default: false
required: true
type: boolean
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: docker/setup-qemu-action@v1
- uses: docker/setup-buildx-action@v1
- uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: build and publish the docker image
uses: docker/build-push-action@v2
id: docker-build
with:
push: true
tags: |
platane/snk:${{ github.sha }}
platane/snk:${{ github.event.inputs.version }}
- name: update action.yml to point to the newly created docker image
run: |
sed -i "s/image: .*/image: docker:\/\/platane\/snk@${{ steps.docker-build.outputs.digest }}/" action.yml
- uses: actions/setup-node@v2
with:
cache: yarn
node-version: 16
- name: build svg-only action
run: |
yarn install --frozen-lockfile
yarn build:action
mv packages/action/dist svg-only/dist
- name: bump package version
run: yarn version --no-git-tag-version --new-version ${{ github.event.inputs.version }}
- name: push new commit
uses: EndBug/add-and-commit@v7
with:
add: package.json svg-only/dist action.yml
message: 📦 ${{ github.event.inputs.version }}
tag: v${{ github.event.inputs.version }}
- uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ github.event.inputs.version }}
body: ${{ github.event.inputs.description }}
prerelease: ${{ github.event.inputs.prerelease }}

1
.gitignore vendored
View File

@@ -2,4 +2,5 @@ node_modules
npm-debug.log*
yarn-error.log*
dist
!svg-only/dist
build

32
Dockerfile Normal file
View File

@@ -0,0 +1,32 @@
FROM node:16-slim as builder
WORKDIR /app
COPY package.json yarn.lock ./
COPY tsconfig.json ./
COPY packages packages
RUN export YARN_CACHE_FOLDER="$(mktemp -d)" \
&& yarn install --frozen-lockfile \
&& rm -r "$YARN_CACHE_FOLDER"
RUN yarn build:action
FROM node:16-slim
WORKDIR /action-release
RUN export YARN_CACHE_FOLDER="$(mktemp -d)" \
&& yarn add canvas@2.9.1 gifsicle@5.3.0 --no-lockfile \
&& rm -r "$YARN_CACHE_FOLDER"
COPY --from=builder /app/packages/action/dist/ /action-release/
CMD ["node", "/action-release/index.js"]

View File

@@ -1,6 +1,6 @@
# snk
[![GitHub marketplace](https://img.shields.io/badge/marketplace-snake-blue?logo=github&style=flat-square)](https://github.com/marketplace/actions/generate-snake-game-from-github-contribution-grid)
[![GitHub marketplace](https://img.shields.io/github/v/tag/platane/snk?label=marketplace&logo=github&sort=semver&style=flat-square)](https://github.com/marketplace/actions/generate-snake-game-from-github-contribution-grid)
![type definitions](https://img.shields.io/npm/types/typescript?style=flat-square)
![code style](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)
@@ -20,7 +20,7 @@ Available as github action. Automatically generate a new image at the end of the
**github action**
```yaml
- uses: Platane/snk@master
- uses: Platane/snk@v1.1.0
with:
# github user name to read the contribution graph from (**required**)
# using action context var `github.repository_owner` or specified user
@@ -35,7 +35,9 @@ Available as github action. Automatically generate a new image at the end of the
svg_out_path: dist/github-snake.svg
```
> [example with cron job](https://github.com/Platane/Platane/blob/master/.github/workflows/main.yml#L24-L29)
[example with cron job](https://github.com/Platane/Platane/blob/master/.github/workflows/main.yml#L24-L29)
If you are only interested in generating a svg, you can use this other faster action: `uses: Platane/snk/svg-only@v1.1.0`
**interactive demo**

View File

@@ -3,8 +3,8 @@ description: "Generates a snake game from a github user contributions grid. Outp
author: "platane"
runs:
using: "docker"
image: "docker://platane/snk:latest"
using: docker
image: docker://platane/snk@sha256:368d5c159c47ebfe2c8afa2e2029fe4820e5fdfb80d69e499f327f895c5c2a00
inputs:
github_user_name:

View File

@@ -1,7 +1,7 @@
{
"name": "snk",
"description": "Generates a snake game from a github user contributions grid",
"version": "1.0.0",
"version": "1.1.1",
"private": true,
"repository": "github:platane/snk",
"devDependencies": {
@@ -17,7 +17,7 @@
],
"scripts": {
"type": "tsc --noEmit",
"lint": "yarn prettier -c '**/*.{ts,js,json,md,yml,yaml}' '!packages/*/dist/**'",
"lint": "yarn prettier -c '**/*.{ts,js,json,md,yml,yaml}' '!packages/*/dist/**' '!svg-only/dist/**'",
"test": "jest --verbose --passWithNoTests --no-cache",
"dev:demo": "( cd packages/demo ; yarn dev )",
"build:demo": "( cd packages/demo ; yarn build )",

View File

@@ -1,9 +0,0 @@
FROM node:16-slim
WORKDIR /github/snk
RUN npm install canvas@2.8.0 gifsicle@5.2.0 --no-save --no-package-lock
COPY dist /github/snk/
CMD ["node", "/github/snk/index.js"]

View File

@@ -1,8 +1,6 @@
import { getGithubUserContribution } from "@snk/github-user-contribution";
import { userContributionToGrid } from "./userContributionToGrid";
import { getBestRoute } from "@snk/solver/getBestRoute";
import { createGif } from "@snk/gif-creator";
import { createSvg } from "../svg-creator";
import { snake4 } from "@snk/types/__fixtures__/snake";
import { getPathToPose } from "@snk/solver/getPathToPose";
@@ -41,11 +39,13 @@ export const generateContributionSnake = async (
if (format.gif) {
console.log("📹 creating gif");
const { createGif } = await import("@snk/gif-creator");
output.gif = await createGif(grid, chain, drawOptions, gifOptions);
}
if (format.svg) {
console.log("🖌 creating svg");
const { createSvg } = await import("@snk/svg-creator");
output.svg = createSvg(grid, chain, drawOptions, gifOptions);
}

View File

@@ -4,7 +4,10 @@
"dependencies": {
"@actions/core": "1.6.0",
"@snk/gif-creator": "1.0.0",
"@snk/github-user-contribution": "1.0.0"
"@snk/github-user-contribution": "1.0.0",
"@snk/solver": "1.0.0",
"@snk/svg-creator": "1.0.0",
"@snk/types": "1.0.0"
},
"devDependencies": {
"@zeit/ncc": "0.22.3",

View File

@@ -22,8 +22,6 @@ export const createGrid = (
const styles = [
`.c{
shape-rendering: geometricPrecision;
rx: ${sizeBorderRadius};
ry: ${sizeBorderRadius};
fill: var(--ce);
stroke-width: 1px;
stroke: var(--cb);
@@ -56,6 +54,8 @@ export const createGrid = (
class: ["c", id].filter(Boolean).join(" "),
x: x * s + m,
y: y * s + m,
rx: sizeBorderRadius,
ry: sizeBorderRadius,
width: d,
height: d,
})

9
svg-only/README.md Normal file
View File

@@ -0,0 +1,9 @@
# svg-only
Another action running purely on js (without Docker).
As a drawback, it can not generate gif image.
## Build process
dist file are built and push on release, by the release action.

20
svg-only/action.yml Normal file
View File

@@ -0,0 +1,20 @@
name: "generate-snake-game-from-github-contribution-grid"
description: "Generates a snake game from a github user contributions grid. Output the animation as svg"
author: "platane"
runs:
using: node16
main: dist/index.js
inputs:
github_user_name:
description: "github user name"
required: true
svg_out_path:
description: "path of the generated svg file. If left empty, the svg file will not be generated."
required: false
default: null
outputs:
svg_out_path:
description: "path of the generated svg"

48723
svg-only/dist/index.js vendored Normal file

File diff suppressed because one or more lines are too long