Update and cleanup
- move to Taskfile - update RevealJS - remove annoying special paths and build overlay file system
This commit is contained in:
parent
4327421a69
commit
f1118a1ba1
13 changed files with 277 additions and 83 deletions
|
@ -2,16 +2,18 @@ version: 2
|
|||
jobs:
|
||||
build:
|
||||
docker:
|
||||
- image: circleci/golang:1.12
|
||||
- image: circleci/golang:1.15
|
||||
steps:
|
||||
- checkout
|
||||
- run: make compile
|
||||
- run: sh -c "$(curl -ssL https://taskfile.dev/install.sh)" -- -d -b /usr/bin
|
||||
- run: task cli-cover-report
|
||||
release:
|
||||
docker:
|
||||
- image: circleci/golang:1.12
|
||||
- image: circleci/golang:1.15
|
||||
steps:
|
||||
- checkout
|
||||
- run: GO111MODULE=off go get -u github.com/gobuffalo/packr/v2/packr2
|
||||
- run: sh -c "$(curl -ssL https://taskfile.dev/install.sh)" -- -d -b /usr/bin
|
||||
- run: task tools download-reveal
|
||||
- run: curl -sL https://git.io/goreleaser | bash
|
||||
workflows:
|
||||
version: 2
|
||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -28,3 +28,6 @@ goveal
|
|||
|
||||
# gorelease
|
||||
dist/
|
||||
|
||||
#Taskfile
|
||||
.task/
|
|
@ -1,11 +1,7 @@
|
|||
project_name: goveal
|
||||
before:
|
||||
hooks:
|
||||
- mkdir -p ./assets/reveal
|
||||
- ./download_revealjs.sh
|
||||
- go mod download
|
||||
- go build -v ./...
|
||||
- packr2
|
||||
- task test
|
||||
builds:
|
||||
- main: ./cmd/goveal/main.go
|
||||
binary: goveal
|
||||
|
|
85
Taskfile.yml
Normal file
85
Taskfile.yml
Normal file
|
@ -0,0 +1,85 @@
|
|||
version: '3'
|
||||
|
||||
vars:
|
||||
DEBUG_PORT: 2345
|
||||
REVEALJS_VERSION: 4.1.0
|
||||
BINARY_NAME: goveal
|
||||
OUT_DIR: ./out
|
||||
GO_BUILD_ARGS: -ldflags="-w -s"
|
||||
CMD_PACKAGE: github.com/baez90/go-reveal-slides/cmd/goveal
|
||||
|
||||
emv:
|
||||
CGO_ENABLED: 0
|
||||
|
||||
tasks:
|
||||
clean:
|
||||
cmds:
|
||||
- rm -f debug {{ .BINARY_NAME }}
|
||||
- rm -rf ./dist {{ .OUT_DIR }}
|
||||
- pkger clean
|
||||
|
||||
format:
|
||||
cmds:
|
||||
- go fmt ./...
|
||||
|
||||
deps:
|
||||
sources:
|
||||
- go.mod
|
||||
- go.sum
|
||||
cmds:
|
||||
- go mod download
|
||||
- go mod tidy
|
||||
|
||||
test:
|
||||
sources:
|
||||
- ./**/*.go
|
||||
deps:
|
||||
- deps
|
||||
cmds:
|
||||
- go test -coverprofile={{ .OUT_DIR }}/cov-raw.out -v ./...
|
||||
- cat {{ .OUT_DIR }}/cov-raw.out | grep -v "generated" > {{ .OUT_DIR }}/cov.out
|
||||
|
||||
cli-cover-report:
|
||||
cmds:
|
||||
- go tool cover -func={{ .OUT_DIR }}/cov.out
|
||||
|
||||
html-cover-report:
|
||||
cmds:
|
||||
- go tool cover -html={{ .OUT_DIR }}/cov.out -o {{ .OUT_DIR }}/coverage.html
|
||||
|
||||
build:
|
||||
deps:
|
||||
- deps
|
||||
sources:
|
||||
- ./**/*.go
|
||||
cmds:
|
||||
- pkger
|
||||
- go build {{ .GO_BUILD_ARGS }} -o {{ .BINARY_NAME }} {{ .CMD_PACKAGE }}
|
||||
|
||||
run:
|
||||
deps:
|
||||
- deps
|
||||
cmds:
|
||||
- go run {{ .CMD_PACKAGE }} serve ./examples/slides.md
|
||||
|
||||
debug:
|
||||
cmds:
|
||||
- dlv debug --headless --listen=127.10.10.2:{{ .DEBUG_PORT }} --api-version=2 {{ .CMD_PACKAGE }} --build-flags="-tags debug" -- serve --config ./examples/goveal.yaml ./examples/slides.md
|
||||
|
||||
snapshot-release:
|
||||
cmds:
|
||||
- goreleaser --snapshot --skip-publish --rm-dist
|
||||
|
||||
tools:
|
||||
cmds:
|
||||
- go get -u github.com/markbates/pkger/cmd/pkger
|
||||
|
||||
download-reveal:
|
||||
cmds:
|
||||
- rm -rf ./assets/reveal
|
||||
- mkdir -p ./assets/reveal
|
||||
- curl -sL https://github.com/hakimel/reveal.js/archive/{{ .REVEALJS_VERSION }}.tar.gz | tar -xvz --strip-components=1 -C ./assets/reveal --wildcards "*.js" --wildcards "*.css" --wildcards "*.html" --wildcards "*.woff" --wildcards "*.ttf" --exclude "test" --exclude "gruntfile.js" --exclude "examples/*.html"
|
||||
- mkdir -p ./assets/reveal/plugin/menu ./assets/reveal/plugin/mouse-pointer
|
||||
- git clone https://github.com/denehyg/reveal.js-menu.git ./assets/reveal/plugin/menu
|
||||
- curl -L -o ./assets/reveal/plugin/mouse-pointer/mouse-pointer.js https://raw.githubusercontent.com/caiofcm/plugin-revealjs-mouse-pointer/master/mouse-pointer.js
|
||||
- rm -f ./assets/reveal/plugin/menu/{bower.json,CONTRIBUTING.md,LICENSE,package.json,README.md,.gitignore,gulpfile.js,package-lock.json}
|
|
@ -6,18 +6,18 @@
|
|||
|
||||
<title>goveal</title>
|
||||
|
||||
<link rel="stylesheet" href="/reveal/dist/reveal.css">
|
||||
<link rel="stylesheet" href="/reveal/dist/reset.css">
|
||||
<link rel="stylesheet" href="/reveal/dist/theme/{{ .Reveal.Theme }}.css" id="theme">
|
||||
<link rel="stylesheet" href="/dist/reveal.css">
|
||||
<link rel="stylesheet" href="/dist/reset.css">
|
||||
<link rel="stylesheet" href="/dist/theme/{{ .Reveal.Theme }}.css" id="theme">
|
||||
|
||||
<link rel="stylesheet" href="/reveal/plugin/highlight/{{ .Reveal.CodeTheme }}.css">
|
||||
<link rel="stylesheet" href="/plugin/highlight/{{ .Reveal.CodeTheme }}.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="reveal">
|
||||
<div class="slides">
|
||||
<section data-markdown="/markdown/content.md"
|
||||
<section data-markdown="/content.md"
|
||||
data-separator="^\n{{ .Reveal.HorizontalSeparator }}\n"
|
||||
data-separator-vertical="^\n{{ .Reveal.VerticalSeparator }}\n"
|
||||
data-separator-notes="^Note:"
|
||||
|
@ -26,11 +26,11 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/reveal/dist/reveal.js"></script>
|
||||
<script src="/reveal/plugin/markdown/markdown.js"></script>
|
||||
<script src="/reveal/plugin/highlight/highlight.js"></script>
|
||||
<script src="/reveal/plugin/notes/notes.js"></script>
|
||||
<script src="/reveal/plugin/menu/menu.js"></script>
|
||||
<script src="/dist/reveal.js"></script>
|
||||
<script src="/plugin/markdown/markdown.js"></script>
|
||||
<script src="/plugin/highlight/highlight.js"></script>
|
||||
<script src="/plugin/notes/notes.js"></script>
|
||||
<script src="/plugin/menu/menu.js"></script>
|
||||
|
||||
<script>
|
||||
Reveal.initialize({
|
||||
|
@ -60,17 +60,17 @@
|
|||
}
|
||||
],
|
||||
themes: [
|
||||
{name: 'Beige', theme: '/reveal/dist/theme/beige.css'},
|
||||
{name: 'Black', theme: '/reveal/dist/theme/black.css'},
|
||||
{name: 'Blood', theme: '/reveal/dist/theme/blood.css'},
|
||||
{name: 'League', theme: '/reveal/dist/theme/league.css'},
|
||||
{name: 'Moon', theme: '/reveal/dist/theme/moon.css'},
|
||||
{name: 'Night', theme: '/reveal/dist/theme/night.css'},
|
||||
{name: 'Serif', theme: '/reveal/dist/theme/serif.css'},
|
||||
{name: 'Simple', theme: '/reveal/dist/theme/simple.css'},
|
||||
{name: 'Sky', theme: '/reveal/dist/theme/sky.css'},
|
||||
{name: 'Solarized', theme: '/reveal/dist/theme/solarized.css'},
|
||||
{name: 'White', theme: '/reveal/dist/theme/white.css'}
|
||||
{name: 'Beige', theme: '/dist/theme/beige.css'},
|
||||
{name: 'Black', theme: '/dist/theme/black.css'},
|
||||
{name: 'Blood', theme: '/dist/theme/blood.css'},
|
||||
{name: 'League', theme: '/dist/theme/league.css'},
|
||||
{name: 'Moon', theme: '/dist/theme/moon.css'},
|
||||
{name: 'Night', theme: '/dist/theme/night.css'},
|
||||
{name: 'Serif', theme: '/dist/theme/serif.css'},
|
||||
{name: 'Simple', theme: '/dist/theme/simple.css'},
|
||||
{name: 'Sky', theme: '/dist/theme/sky.css'},
|
||||
{name: 'Solarized', theme: '/dist/theme/solarized.css'},
|
||||
{name: 'White', theme: '/dist/theme/white.css'}
|
||||
],
|
||||
transitions: true,
|
||||
},
|
||||
|
@ -82,7 +82,7 @@
|
|||
var additionalStyleSheet = document.createElement('link');
|
||||
additionalStyleSheet.rel = 'stylesheet';
|
||||
additionalStyleSheet.type = 'text/css';
|
||||
additionalStyleSheet.href = '/local/{{- $style }}';
|
||||
additionalStyleSheet.href = '/{{- $style }}';
|
||||
document.getElementsByTagName('head')[0].appendChild(additionalStyleSheet);
|
||||
{{ end}}
|
||||
{{ end }}
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
mkdir -p ./assets/reveal
|
||||
curl -sL "https://github.com/hakimel/reveal.js/archive/${1:-3.8.0}.tar.gz" | tar -xvz --strip-components=1 -C ./assets/reveal \
|
||||
--wildcards *.js \
|
||||
--wildcards *.css \
|
||||
--wildcards *.html \
|
||||
--wildcards *.woff \
|
||||
--wildcards *.ttf \
|
||||
--exclude test \
|
||||
--exclude gruntfile.js
|
||||
mkdir -p ./assets/reveal/plugin/
|
||||
git clone https://github.com/denehyg/reveal.js-menu.git ./assets/reveal/plugin/menu
|
||||
|
||||
rm -f ./assets/reveal/plugin/menu/bower.json
|
||||
rm -f ./assets/reveal/plugin/menu/CONTRIBUTING.md
|
||||
rm -f ./assets/reveal/plugin/menu/LICENSE
|
||||
rm -f ./assets/reveal/plugin/menu/package.json
|
||||
rm -f ./assets/reveal/plugin/menu/README.md
|
|
@ -40,7 +40,7 @@ Content 3.2
|
|||
|
||||
## External 4.1
|
||||
|
||||
![Local image](/local/examples/gopher.jpg)
|
||||
![Local image](/examples/gopher.jpg)
|
||||
|
||||
---
|
||||
|
||||
|
|
6
go.mod
6
go.mod
|
@ -4,9 +4,9 @@ go 1.15
|
|||
|
||||
require (
|
||||
github.com/fsnotify/fsnotify v1.4.9
|
||||
github.com/markbates/pkger v0.17.0
|
||||
github.com/markbates/pkger v0.17.1
|
||||
github.com/mitchellh/go-homedir v1.1.0
|
||||
github.com/sirupsen/logrus v1.6.0
|
||||
github.com/spf13/cobra v1.0.0
|
||||
github.com/sirupsen/logrus v1.7.0
|
||||
github.com/spf13/cobra v1.1.1
|
||||
github.com/spf13/viper v1.7.1
|
||||
)
|
||||
|
|
47
go.sum
47
go.sum
|
@ -53,6 +53,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
|
|||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI=
|
||||
github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM=
|
||||
github.com/gobuffalo/here v0.6.2 h1:ZtCqC7F9ou3moLbYfHM1Tj+gwHGgWhjyRjVjsir9BE0=
|
||||
github.com/gobuffalo/here v0.6.2/go.mod h1:D75Sq0p2BVHdgQu3vCRsXbg85rx943V19urJpqAVWjI=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
|
@ -114,9 +116,12 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
|
|||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
|
||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
|
@ -124,8 +129,10 @@ github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDe
|
|||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
|
||||
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/markbates/pkger v0.17.0 h1:RFfyBPufP2V6cddUyyEVSHBpaAnM1WzaMNyqomeT+iY=
|
||||
github.com/markbates/pkger v0.17.0/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI=
|
||||
github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY=
|
||||
github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
||||
github.com/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno=
|
||||
github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI=
|
||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
|
@ -140,6 +147,8 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu
|
|||
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/mapstructure v1.4.0 h1:7ks8ZkOP5/ujthUsT07rNv+nkLXCQWKNHuwzOAesEks=
|
||||
github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
|
@ -147,8 +156,11 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn
|
|||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||
github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM=
|
||||
github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
|
@ -170,6 +182,8 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV
|
|||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
|
||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||
|
@ -178,16 +192,27 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k
|
|||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
|
||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||
github.com/spf13/afero v1.4.1 h1:asw9sl74539yqavKaglDM5hFpdJVK0Y5Dr/JOgQ89nQ=
|
||||
github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
|
||||
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
|
||||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
||||
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||
github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4=
|
||||
github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
|
||||
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
|
||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
||||
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU=
|
||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
|
||||
github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
|
||||
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
|
@ -196,6 +221,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
|
|||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
|
@ -213,6 +240,7 @@ golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnf
|
|||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
|
@ -270,11 +298,18 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9 h1:L2auWcuQIvxz9xSEqzESnV/QN/gNRXNApHi3fYwl2w0=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3 h1:kzM6+9dur93BcC2kVlYl34cHU+TYZLanmpSJHVMmL64=
|
||||
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
|
||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
@ -321,9 +356,13 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
|
|||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
|
||||
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
|
||||
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
|
@ -332,6 +371,10 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo=
|
||||
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
|
|
|
@ -39,7 +39,6 @@ var (
|
|||
navigationMode string
|
||||
horizontalSeparator string
|
||||
verticalSeparator string
|
||||
showSlideNumbers bool
|
||||
slideNumberVisibility string
|
||||
slideNumberFormat string
|
||||
rootCmd = &cobra.Command{
|
||||
|
|
|
@ -15,12 +15,14 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/baez90/go-reveal-slides/internal/app/rendering"
|
||||
"github.com/baez90/go-reveal-slides/internal/app/routing"
|
||||
"github.com/markbates/pkger"
|
||||
"github.com/spf13/cobra"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
@ -33,43 +35,47 @@ var (
|
|||
Args: cobra.ExactArgs(1),
|
||||
Short: "",
|
||||
Long: ``,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
RunE: func(cmd *cobra.Command, args []string) (err error) {
|
||||
|
||||
tmplRenderer, err := rendering.NewRevealRenderer(¶ms)
|
||||
|
||||
if err != nil {
|
||||
router := &routing.RegexpRouter{}
|
||||
var tmplRenderer rendering.RevealRenderer
|
||||
if tmplRenderer, err = rendering.NewRevealRenderer(¶ms); err != nil {
|
||||
log.Errorf("Failed to initialize reveal renderer due to error: %v", err)
|
||||
os.Exit(1)
|
||||
return
|
||||
}
|
||||
|
||||
markdownHandler, err := rendering.NewMarkdownHandler(args[0])
|
||||
if err != nil {
|
||||
log.Errorf("Failed to initialize reveal renderer due to error: %v", err)
|
||||
os.Exit(1)
|
||||
log.Info("Setup template renderer")
|
||||
if err = router.AddRule(`^(/(index.html(l)?)?)?$`, tmplRenderer); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Packr2 handler to serve Reveal.js assets
|
||||
log.Info("Setup reveal assets under route /reveal/ route...")
|
||||
http.Handle("/reveal/", http.StripPrefix("/reveal/", http.FileServer(pkger.Dir("/assets/reveal"))))
|
||||
|
||||
// Static file handler under subroute to serve static files e.g. images
|
||||
log.Info("Setup static file serving under /local/ route...")
|
||||
fs := http.FileServer(http.Dir("."))
|
||||
http.Handle("/local/", http.StripPrefix("/local/", fs))
|
||||
var markdownHandler rendering.MarkdownHandler
|
||||
if markdownHandler, err = rendering.NewMarkdownHandler(args[0]); err != nil {
|
||||
log.Errorf("Failed to initialize reveal renderer due to error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// single file handler that only delivers the single Markdown file containing the slides
|
||||
log.Info("Setup markdown handler under /markdown/content.md route...")
|
||||
http.Handle("/markdown/", markdownHandler)
|
||||
log.Info("Setup markdown handler for any *.md file...")
|
||||
if err = router.AddRule(".*\\.md$", markdownHandler); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// entrypoint that delivers the rendered reveal.js index HTML page
|
||||
http.Handle("/", tmplRenderer)
|
||||
layeredHandler := &routing.LayeredHandler{}
|
||||
layeredHandler.AddHandlers(pkger.Dir("/assets/reveal"), http.Dir("."))
|
||||
|
||||
log.Info("Setup local file system and Reveal assets under / route")
|
||||
if err = router.AddRule("/.+", layeredHandler); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// start HTTP server
|
||||
hostPort := fmt.Sprintf("%s:%d", host, port)
|
||||
log.Infof("Running at addr http://%s/", hostPort)
|
||||
if err := http.ListenAndServe(hostPort, nil); err != nil {
|
||||
log.Error("Error while running serve command: %v", err)
|
||||
if err = http.ListenAndServe(hostPort, router); err != nil && errors.Is(err, http.ErrServerClosed) {
|
||||
log.Errorf("Error while running serve command: %v", err)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
}
|
||||
)
|
||||
|
|
41
internal/app/routing/layered_fs.go
Normal file
41
internal/app/routing/layered_fs.go
Normal file
|
@ -0,0 +1,41 @@
|
|||
package routing
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type LayeredHandler struct {
|
||||
layers []http.FileSystem
|
||||
}
|
||||
|
||||
func (l *LayeredHandler) AddHandlers(layers ...http.FileSystem) {
|
||||
l.layers = append(l.layers, layers...)
|
||||
}
|
||||
|
||||
func (l LayeredHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
|
||||
_, fileName := filepath.Split(request.URL.Path)
|
||||
f, err := l.selectLayer(request.URL.Path)
|
||||
if err != nil {
|
||||
writer.WriteHeader(404)
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
stat, err := f.Stat()
|
||||
if err != nil {
|
||||
writer.WriteHeader(500)
|
||||
return
|
||||
}
|
||||
http.ServeContent(writer, request, fileName, stat.ModTime(), f)
|
||||
}
|
||||
|
||||
func (l LayeredHandler) selectLayer(requestedFilePath string) (f http.File, err error) {
|
||||
for idx := range l.layers {
|
||||
layer := l.layers[idx]
|
||||
if f, err = layer.Open(requestedFilePath); err == nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
return nil, errors.New("not found")
|
||||
}
|
38
internal/app/routing/regexp_router.go
Normal file
38
internal/app/routing/regexp_router.go
Normal file
|
@ -0,0 +1,38 @@
|
|||
package routing
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"regexp"
|
||||
)
|
||||
|
||||
type regexpRule struct {
|
||||
pattern *regexp.Regexp
|
||||
handler http.Handler
|
||||
}
|
||||
|
||||
type RegexpRouter struct {
|
||||
rules []regexpRule
|
||||
}
|
||||
|
||||
func (r *RegexpRouter) AddRule(pattern string, handler http.Handler) (err error) {
|
||||
var exp *regexp.Regexp
|
||||
if exp, err = regexp.Compile(pattern); err != nil {
|
||||
return
|
||||
}
|
||||
r.rules = append(r.rules, regexpRule{
|
||||
pattern: exp,
|
||||
handler: handler,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (r *RegexpRouter) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
|
||||
for idx := range r.rules {
|
||||
rule := r.rules[idx]
|
||||
if rule.pattern.MatchString(request.URL.Path) {
|
||||
rule.handler.ServeHTTP(writer, request)
|
||||
return
|
||||
}
|
||||
}
|
||||
writer.WriteHeader(404)
|
||||
}
|
Loading…
Reference in a new issue