parent
3b7c29eb8a
commit
35217febfc
@ -0,0 +1,22 @@
|
||||
{{ range .Versions }}
|
||||
<a name="{{ .Tag.Name }}"></a>
|
||||
## {{ if .Tag.Previous }}[{{ .Tag.Name }}]({{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}){{ else }}{{ .Tag.Name }}{{ end }} ({{ datetime "2006-01-02" .Tag.Date }})
|
||||
|
||||
{{ range .CommitGroups -}}
|
||||
### {{ .Title }}
|
||||
|
||||
{{ range .Commits -}}
|
||||
* {{ .Subject }}
|
||||
{{ end }}
|
||||
{{ end -}}
|
||||
|
||||
{{- if .NoteGroups -}}
|
||||
{{ range .NoteGroups -}}
|
||||
### {{ .Title }}
|
||||
|
||||
{{ range .Notes }}
|
||||
{{ .Body }}
|
||||
{{ end }}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
@ -0,0 +1,37 @@
|
||||
---
|
||||
style: Github
|
||||
template: CHANGELOG.tpl.md
|
||||
info:
|
||||
title: CHANGELOG
|
||||
repository_url: https://git.mills.io/prologic/tube
|
||||
options:
|
||||
commits:
|
||||
filters:
|
||||
Type:
|
||||
- Add
|
||||
- Fix
|
||||
- Update
|
||||
- Document
|
||||
commit_groups:
|
||||
title_maps:
|
||||
Add: Features
|
||||
Update: Updates
|
||||
Fix: Bug Fixes
|
||||
Document: Documentation
|
||||
header:
|
||||
pattern: "^((\\w+)\\s.*)$"
|
||||
pattern_maps:
|
||||
- Subject
|
||||
- Type
|
||||
refs:
|
||||
actions:
|
||||
- Closes
|
||||
- Fixes
|
||||
reverts:
|
||||
pattern: "^Revert \"([\\s\\S]*)\"$"
|
||||
pattern_maps:
|
||||
- Header
|
||||
notes:
|
||||
keywords:
|
||||
- NOTE
|
||||
- BREAKING CHANGE
|
@ -0,0 +1,36 @@
|
||||
{
|
||||
"library": [
|
||||
{
|
||||
"path": "/data/videos",
|
||||
"prefix": ""
|
||||
}
|
||||
],
|
||||
"server": {
|
||||
"host": "0.0.0.0",
|
||||
"port": 8000,
|
||||
"store_path": "/data/tube.db",
|
||||
"upload_path": "/data/uploads",
|
||||
"max_upload_size": 104857600
|
||||
},
|
||||
"thumbnailer": {
|
||||
"timeout": 60
|
||||
},
|
||||
"transcoder": {
|
||||
"timeout": 300,
|
||||
"sizes": null
|
||||
},
|
||||
"feed": {
|
||||
"external_url": "",
|
||||
"title": "Feed Title",
|
||||
"link": "http://your-url.example/about",
|
||||
"description": "Feed Description",
|
||||
"author": {
|
||||
"name": "Author Name",
|
||||
"email": "author@somewhere.example"
|
||||
},
|
||||
"copyright": "Copyright Text"
|
||||
},
|
||||
"copyright": {
|
||||
"content": "All Content herein Public Domain and User Contributed."
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ -n "${PUID}" ] && usermod -u "${PUID}" tube
|
||||
[ -n "${PGID}" ] && groupmod -g "${PGID}" tube
|
||||
|
||||
printf "Configuring tube ..."
|
||||
[ -z "${DATA}" ] && DATA="/data"
|
||||
|
||||
export DATA
|
||||
|
||||
printf "Switching UID=%s and GID=%s\n" "${PUID}" "${PGID}"
|
||||
exec su-exec tube:ytube "$@"
|
@ -1,14 +1,70 @@
|
||||
# Build
|
||||
FROM prologic/go-builder:latest AS build
|
||||
FROM golang:alpine AS build
|
||||
|
||||
RUN apk add --no-cache -U build-base git make ffmpeg-dev
|
||||
|
||||
RUN mkdir -p /src
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
# Copy Makefile
|
||||
COPY Makefile ./
|
||||
|
||||
# Install deps
|
||||
RUN make deps
|
||||
|
||||
# Copy go.mod and go.sum and install and cache dependencies
|
||||
COPY go.mod .
|
||||
COPY go.sum .
|
||||
|
||||
# Copy static assets
|
||||
COPY ./static/* ./static/
|
||||
|
||||
# Copy templates
|
||||
|
||||
COPY ./templates/* ./templates/
|
||||
|
||||
# Copy sources
|
||||
COPY *.go ./
|
||||
COPY ./app/*.go ./app/
|
||||
COPY ./importers/*.go ./importers/
|
||||
COPY ./media/*.go ./media/
|
||||
COPY ./utils/*.go ./utils/
|
||||
|
||||
# Version/Commit (there there is no .git in Docker build context)
|
||||
# NOTE: This is fairly low down in the Dockerfile instructions so
|
||||
# we don't break the Docker build cache just be changing
|
||||
# unrelated files that actually haven't changed but caused the
|
||||
# COMMIT value to change.
|
||||
ARG VERSION="0.0.0"
|
||||
ARG COMMIT="HEAD"
|
||||
|
||||
# Build server binary
|
||||
RUN make server VERSION=$VERSION COMMIT=$COMMIT
|
||||
|
||||
# Runtime
|
||||
FROM golang:alpine
|
||||
FROM alpine:latest
|
||||
|
||||
RUN apk --no-cache -U add su-exec shadow ca-certificates tzdata ffmpeg
|
||||
|
||||
ENV PUID=1000
|
||||
ENV PGID=1000
|
||||
|
||||
RUN addgroup -g "${PGID}" tube && \
|
||||
adduser -D -H -G tube -h /var/empty -u "${PUID}" tube && \
|
||||
mkdir -p /data && chown -R tube:tube /data
|
||||
|
||||
VOLUME /data
|
||||
|
||||
WORKDIR /
|
||||
|
||||
RUN apk --no-cache -U add git build-base ffmpeg ffmpeg-dev
|
||||
# force cgo resolver
|
||||
ENV GODEBUG=netdns=cgo
|
||||
|
||||
RUN go install github.com/mutschler/mt@latest
|
||||
COPY --from=build /src/tube /usr/local/bin/tube
|
||||
|
||||
COPY --from=build /src/tube /tube
|
||||
COPY .dockerfiles/entrypoint.sh /init
|
||||
COPY .dockerfiles/config.json /
|
||||
|
||||
ENTRYPOINT ["/tube"]
|
||||
CMD [""]
|
||||
ENTRYPOINT ["/init"]
|
||||
CMD ["tube"]
|
||||
|
@ -0,0 +1,26 @@
|
||||
# Runtime
|
||||
FROM alpine:latest
|
||||
|
||||
RUN apk --no-cache -U add su-exec shadow ca-certificates tzdata ffmpeg
|
||||
|
||||
ENV PUID=1000
|
||||
ENV PGID=1000
|
||||
|
||||
RUN addgroup -g "${PGID}" tube && \
|
||||
adduser -D -H -G tube -h /var/empty -u "${PUID}" tube && \
|
||||
mkdir -p /data && chown -R tube:tube /data
|
||||
|
||||
VOLUME /data
|
||||
|
||||
WORKDIR /
|
||||
|
||||
# force cgo resolver
|
||||
ENV GODEBUG=netdns=cgo
|
||||
|
||||
COPY tube /usr/local/bin
|
||||
|
||||
COPY .dockerfiles/entrypoint.sh /init
|
||||
COPY .dockerfiles/config.json /
|
||||
|
||||
ENTRYPOINT ["/init"]
|
||||
CMD ["tube"]
|
@ -1,38 +1,81 @@
|
||||
.PHONY: dev setup build install image test release clean
|
||||
-include environ.inc
|
||||
.PHONY: help deps dev build install image release test clean clean-all
|
||||
|
||||
CGO_ENABLED=0
|
||||
VERSION=$(shell git describe --abbrev=0 --tags)
|
||||
COMMIT=$(shell git rev-parse --short HEAD)
|
||||
export CGO_ENABLED=0
|
||||
VERSION=$(shell git describe --abbrev=0 --tags 2>/dev/null || echo "0.0.0")
|
||||
COMMIT=$(shell git rev-parse --short HEAD || echo "HEAD")
|
||||
BRANCH=$(shell git rev-parse --abbrev-ref HEAD)
|
||||
GOCMD=go
|
||||
GOVER=$(shell go version | grep -o -E 'go1\.17\.[0-9]+')
|
||||
|
||||
all: dev
|
||||
DESTDIR=/usr/local/bin
|
||||
|
||||
dev: build
|
||||
@./tube -v
|
||||
ifeq ($(BRANCH), master)
|
||||
IMAGE := prologic/tube
|
||||
TAG := latest
|
||||
else
|
||||
IMAGE := prologic/tube
|
||||
TAG := dev
|
||||
endif
|
||||
|
||||
setup:
|
||||
@go get github.com/GeertJohan/go.rice/rice
|
||||
all: help
|
||||
|
||||
build: clean
|
||||
@command -v rice > /dev/null || make setup
|
||||
@go generate $(shell go list)/...
|
||||
@go build \
|
||||
-tags "netgo static_build" -installsuffix netgo \
|
||||
-ldflags "-w -X main.Version=$(VERSION) -X main.Commit=$(COMMIT)" \
|
||||
.PHONY: help
|
||||
|
||||
help: ## Show this help message
|
||||
@echo "tube - a Youtube-like (without censorship and features you don't need!) Video Sharing App"
|
||||
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[$$()% a-zA-Z_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
|
||||
|
||||
preflight: ## Run preflight checks to ensure you have the right build tools
|
||||
@./preflight.sh
|
||||
|
||||
deps: ## Install any dependencies required
|
||||
|
||||
dev : DEBUG=1
|
||||
dev : server ## Build debug version of tube
|
||||
@./tube
|
||||
|
||||
server: generate ## Build the tube server
|
||||
@$(GOCMD) build -tags "embed netgo static_build" -installsuffix netgo \
|
||||
-ldflags "-w \
|
||||
-X $(shell go list).Version=$(VERSION) \
|
||||
-X $(shell go list).Commit=$(COMMIT)" \
|
||||
.
|
||||
|
||||
install: build
|
||||
@go install
|
||||
build: server ## Build the server
|
||||
|
||||
docker-image:
|
||||
@docker build -t prologic/tube .
|
||||
docker-run:
|
||||
@docker run -p 8000:8000 -t prologic/tube .
|
||||
generate: ## Genereate any code required by the build
|
||||
@if [ x"$(DEBUG)" = x"1" ]; then \
|
||||
echo 'Running in debug mode...'; \
|
||||
fi
|
||||
|
||||
test: install
|
||||
@go test
|
||||
install: build ## Install tube to $DESTDIR
|
||||
@install -D -m 755 tube $(DESTDIR)/tube
|
||||
|
||||
release:
|
||||
ifeq ($(PUBLISH), 1)
|
||||
image: generate ## Build the Docker image
|
||||
@docker build --build-arg VERSION="$(VERSION)" --build-arg COMMIT="$(COMMIT)" -t $(IMAGE):$(TAG) .
|
||||
@docker push $(IMAGE):$(TAG)
|
||||
else
|
||||
image: generate
|
||||
@docker build --build-arg VERSION="$(VERSION)" --build-arg COMMIT="$(COMMIT)" -t $(IMAGE):$(TAG) .
|
||||
endif
|
||||
|
||||
release: generate ## Release a new version to Gitea
|
||||
@./tools/release.sh
|
||||
|
||||
clean:
|
||||
fmt: ## Format sources fiels
|
||||
@$(GOCMD) fmt ./...
|
||||
|
||||
test: ## Run test suite
|
||||
@CGO_ENABLED=1 $(GOCMD) test -v -cover -race ./...
|
||||
|
||||
coverage: ## Get test coverage report
|
||||
@CGO_ENABLED=1 $(GOCMD) test -v -cover -race -cover -coverprofile=coverage.out ./...
|
||||
@$(GOCMD) tool cover -html=coverage.out
|
||||
|
||||
clean: ## Remove untracked files
|
||||
@git clean -f -d -x
|
||||
|
||||
clean-all: ## Remove untracked and Git ignores files
|
||||
@git clean -f -d -X
|
||||
|
@ -0,0 +1,135 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
color() {
|
||||
fg="$1"
|
||||
bg="${2}"
|
||||
ft="${3:-0}"
|
||||
|
||||
printf "\33[%s;%s;%s" "$ft" "$fg" "$bg"
|
||||
}
|
||||
|
||||
color_reset() {
|
||||
printf "\033[0m"
|
||||
}
|
||||
|
||||
ok() {
|
||||
if [ -t 1 ]; then
|
||||
printf "%s[ OK ]%s\n" "$(color 37 42m 1)" "$(color_reset)"
|
||||
else
|
||||
printf "%s\n" "[ OK ]"
|
||||
fi
|
||||
}
|
||||
|
||||
err() {
|
||||
if [ -t 1 ]; then
|
||||
printf "%s[ ERR ]%s\n" "$(color 37 41m 1)" "$(color_reset)"
|
||||
else
|
||||
printf "%s\n" "[ ERR ]"
|
||||
fi
|
||||
}
|
||||
|
||||
run() {
|
||||
retval=0
|
||||
logfile="$(mktemp -t "run-XXXXXX")"
|
||||
if "$@" 2> "$logfile"; then
|
||||
ok
|
||||
else
|
||||
retval=$?
|
||||
err
|
||||
cat "$logfile" || true
|
||||
fi
|
||||
rm -rf "$logfile"
|
||||
return $retval
|
||||
}
|
||||
|
||||
progress() {
|
||||
printf "%-40s" "$(printf "%s ... " "$1")"
|
||||
}
|
||||
|
||||
log() {
|
||||
printf "%s\n" "$1"
|
||||
}
|
||||
|
||||
log2() {
|
||||
printf "%s\n" "$1" 1>&2
|
||||
}
|
||||
|
||||
error() {
|
||||
log "ERROR: ${1}"
|
||||
}
|
||||
|
||||
fail() {
|
||||
log "FATAL: ${1}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
check_goversion() {
|
||||
progress "Checking Go version"
|
||||
|
||||
if ! command -v go > /dev/null 2>&1; then
|
||||
log2 "Cannot find the Go compiler"
|
||||
return 1
|
||||
fi
|
||||
|
||||
gover="$(go version | grep -o -E 'go[0-9]+\.[0-9]+(\.[0-9]+)?')"
|
||||
|
||||
if ! go version | grep -E 'go1\.1[78](\.[0-9]+)?' > /dev/null; then
|
||||
log2 "Go 1.17+ is required, found ${gover}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
check_path() {
|
||||
progress "Checking \$PATH"
|
||||
|
||||
gobin="$(eval "$(go env | grep GOBIN)")"
|
||||
gopath="$(eval "$(go env | grep GOPATH)")"
|
||||
|
||||
if [ -n "$gobin" ] && ! echo "$PATH" | grep "$gobin" > /dev/null; then
|
||||
log2 "\$GOBIN '$gobin' is not in your \$PATH"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -n "$gopath" ] && ! echo "$PATH" | grep "$gopath/bin" > /dev/null; then
|
||||
log2 "\$GOPATH/bin '$gopath/bin' is not in your \$PATH"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! echo "$PATH" | grep "$HOME/go/bin" > /dev/null; then
|
||||
log2 "\$HOME/go/bin is not in your \$PATH"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
check_deps() {
|
||||
progress "Checking deps"
|
||||
|
||||
if ! command -v ffmpeg > /dev/null 2>&1; then
|
||||
log2 "ffmpeg not found, Please install it using your OS package manager"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
steps="check_goversion check_path check_deps"
|
||||
|
||||
_main() {
|
||||
for step in $steps; do
|
||||
if ! run "$step"; then
|
||||
fail "🙁 preflight failed"
|
||||
fi
|
||||
done
|
||||
|
||||
log "🥳 All Done! Ready to build, run: make build"
|
||||
}
|
||||
|
||||
if [ -n "$0" ] && [ x"$0" != x"-bash" ]; then
|
||||
_main "$@"
|
||||
fi
|
Loading…
Reference in new issue