Skip to content

Commit

Permalink
Merge pull request #142 from root-gg/1.1-rc2
Browse files Browse the repository at this point in the history
1.1 relase
  • Loading branch information
Charles-Antoine Mathieu committed Dec 20, 2015
2 parents d93a431 + fb98410 commit a322a3c
Show file tree
Hide file tree
Showing 92 changed files with 8,632 additions and 578 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ clients
client/client
servers
server/server
server/common/version.go
release
releases
debs
Expand Down
5 changes: 5 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,9 @@ go:
- tip

before_install:
- npm install -g bower

before_script:
- make client
- make server
- cd server
174 changes: 128 additions & 46 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,57 +24,77 @@
# THE SOFTWARE.
###

RELEASE_VERSION=`cat VERSION`
RELEASE_VERSION="1.1"
RELEASE_DIR="release/plik-$(RELEASE_VERSION)"
RELEASE_TARGETS=darwin-386 darwin-amd64 freebsd-386 \
freebsd-amd64 linux-386 linux-amd64 linux-arm openbsd-386 \
openbsd-amd64

GOHOSTOS=`go env GOHOSTOS`
GOHOSTARCH=`go env GOHOSTARCH`

all: clean deps frontend server client

###
# Install npm build dependencies
# ( run this first once )
###
deps:
@cd server/public && npm install
DEBROOT_SERVER=debs/server
DEBROOT_CLIENT=debs/client

all: clean frontend clients server

###
# Build frontend ressources
###
frontend:
@if [ ! -d server/public/bower_components ]; then cd server/public && bower install --allow-root ; fi ;
@if [ ! -d server/public/public ]; then cd server/public && grunt ; fi ;
@if [ ! -d server/public/node_modules ]; then cd server/public && npm install ; fi
@if [ ! -d server/public/bower_components ]; then cd server/public && node_modules/bower/bin/bower install --allow-root ; fi
@if [ ! -d server/public/public ]; then cd server/public && node_modules/grunt-cli/bin/grunt ; fi ;


###
# Build plik server for the current architecture
###
server:
@sed -i -e "s/##VERSION##/$(RELEASE_VERSION)/g" server/common/config.go
@server/gen_build_info.sh $(RELEASE_VERSION)
@cd server && go build -o plikd ./
@sed -i -e "s/$(RELEASE_VERSION)/##VERSION##/g" server/common/config.go

###
# Build plik server for all architectures
###
servers:
@cd server/public && bower install --allow-root
@cd server/public && grunt
@server/build.sh servers
servers: frontend
@server/gen_build_info.sh $(RELEASE_VERSION)
@cd server && for target in $(RELEASE_TARGETS) ; do \
SERVER_DIR=../servers/$$target; \
SERVER_PATH=$$SERVER_DIR/plikd; \
export GOOS=`echo $$target | cut -d "-" -f 1`; \
export GOARCH=`echo $$target | cut -d "-" -f 2`; \
mkdir -p ../servers/$$target; \
if [ $$GOOS = "windows" ] ; then SERVER_PATH=$$SERVER_DIR/plikd.exe ; fi ; \
echo "Compiling plik server for $$target to $$SERVER_PATH"; \
go build -o $$SERVER_PATH ; \
done
@sed -i -e "s/$(RELEASE_VERSION)/##VERSION##/g" server/common/config.go

###
# Build plik client for the current architecture
###
client:
@server/gen_build_info.sh $(RELEASE_VERSION)
@cd client && go build -o plik ./

###
# Build plik client for all architectures
###
clients:
@client/build.sh clients
@server/gen_build_info.sh $(RELEASE_VERSION)
@cd client && for target in $(RELEASE_TARGETS) ; do \
CLIENT_DIR=../clients/$$target; \
CLIENT_PATH=$$CLIENT_DIR/plik; \
CLIENT_MD5=$$CLIENT_DIR/MD5SUM; \
export GOOS=`echo $$target | cut -d "-" -f 1`; \
export GOARCH=`echo $$target | cut -d "-" -f 2`; \
mkdir -p $$CLIENT_DIR; \
if [ $$GOOS = "windows" ] ; then CLIENT_PATH=$$CLIENT_DIR/plik.exe ; fi ; \
echo "Compiling plik client for $$target to $$CLIENT_PATH"; \
go build -o $$CLIENT_PATH ; \
md5sum $$CLIENT_PATH | awk '{print $$1}' > $$CLIENT_MD5; \
done
@mkdir -p clients/bash && cp client/plik.sh clients/bash

##
Expand All @@ -93,67 +113,129 @@ debs: debs-client debs-server
# Make server Debian packages
###
debs-server: servers clients
@server/build.sh debs
@mkdir -p $(DEBROOT_SERVER)/usr/local/plikd/server
@mkdir -p $(DEBROOT_SERVER)/etc/init.d
@cp -R server/build/deb/DEBIAN $(DEBROOT_SERVER)
@cp -R clients/ $(DEBROOT_SERVER)/usr/local/plikd/clients
@cp -R server/public/ $(DEBROOT_SERVER)/usr/local/plikd/server/public
@cp -R server/plikd.cfg $(DEBROOT_SERVER)/etc/plikd.cfg
@cp -R server/plikd.init $(DEBROOT_SERVER)/etc/init.d/plikd && chmod +x $(DEBROOT_SERVER)/etc/init.d/plikd
@for arch in amd64 i386 armhf ; do \
cp -R server/build/deb/DEBIAN/control $(DEBROOT_SERVER)/DEBIAN/control ; \
sed -i -e "s/##ARCH##/$$arch/g" $(DEBROOT_SERVER)/DEBIAN/control ; \
sed -i -e "s/##VERSION##/$(RELEASE_VERSION)/g" $(DEBROOT_SERVER)/DEBIAN/control ; \
if [ $$arch = 'i386' ]; then \
cp servers/linux-386/plikd $(DEBROOT_SERVER)/usr/local/plikd/server/ ; \
elif [ $$arch = 'armhf' ]; then \
cp servers/linux-arm/plikd $(DEBROOT_SERVER)/usr/local/plikd/server/ ; \
else \
cp servers/linux-$$arch/plikd $(DEBROOT_SERVER)/usr/local/plikd/server/ ; \
fi ; \
dpkg-deb --build $(DEBROOT_SERVER) debs/plikd-$(RELEASE_VERSION)-$$arch.deb ; \
done

###
# Make client Debian packages
###
debs-client: clients
@client/build.sh debs

###
# Build release archive
###
release: clean frontend server clients
@mkdir -p $(DEBROOT_CLIENT)/usr/local/bin
@cp -R client/build/deb/DEBIAN $(DEBROOT_CLIENT)
@for arch in amd64 i386 armhf ; do \
cp -R client/build/deb/DEBIAN/control $(DEBROOT_CLIENT)/DEBIAN/control ; \
sed -i -e "s/##ARCH##/$$arch/g" $(DEBROOT_CLIENT)/DEBIAN/control ; \
sed -i -e "s/##VERSION##/$(RELEASE_VERSION)/g" $(DEBROOT_CLIENT)/DEBIAN/control ; \
if [ $$arch = 'i386' ]; then \
cp clients/linux-386/plik $(DEBROOT_CLIENT)/usr/local/bin ; \
elif [ $$arch = 'armhf' ]; then \
cp clients/linux-arm/plik $(DEBROOT_CLIENT)/usr/local/bin ; \
else \
cp clients/linux-$$arch/plik $(DEBROOT_CLIENT)/usr/local/bin ; \
fi ; \
dpkg-deb --build $(DEBROOT_CLIENT) debs/plik-$(RELEASE_VERSION)-$$arch.deb ; \
done


###
# Prepare the release base (css, js, ...)
###
release-template: clean frontend clients
@mkdir -p $(RELEASE_DIR)/server/public

@cp -R clients $(RELEASE_DIR)

@cp -R server/plikd $(RELEASE_DIR)/server
@cp -R server/plikd.cfg $(RELEASE_DIR)/server

@cp -R server/public/css $(RELEASE_DIR)/server/public
@cp -R server/public/fonts $(RELEASE_DIR)/server/public
@cp -R server/public/img $(RELEASE_DIR)/server/public
@cp -R server/public/js $(RELEASE_DIR)/server/public
@cp -R server/public/partials $(RELEASE_DIR)/server/public
@cp -R server/public/public $(RELEASE_DIR)/server/public
@cp -R server/public/index.html $(RELEASE_DIR)/server/public

@cd release && tar czvf plik-`cat ../VERSION`-$(GOHOSTOS)-$(GOHOSTARCH).tar.gz *

###
# Build release archive
###
release: release-template server
@cp -R server/plikd $(RELEASE_DIR)/server
@cd release && tar czvf plik-$(RELEASE_VERSION)-$(GOHOSTOS)-$(GOHOSTARCH).tar.gz plik-$(RELEASE_VERSION)


###
# Build release archives for all architectures
###
releases: release servers
releases: release-template servers

@mkdir -p releases

@cp -R servers/linux-amd64/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-linux-64bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/linux-386/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-linux-32bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/linux-arm/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-linux-arm.tar.gz plik-`cat ../VERSION`

@cp -R servers/freebsd-amd64/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-freebsd-64bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/freebsd-386/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-freebsd-32bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/freebsd-arm/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-freebsd-arm.tar.gz plik-`cat ../VERSION`
@cd release && for target in $(RELEASE_TARGETS) ; do \
SERVER_PATH=../servers/$$target/plikd; \
OS=`echo $$target | cut -d "-" -f 1`; \
ARCH=`echo $$target | cut -d "-" -f 2`; \
if [ $$OS = "darwin" ] ; then OS="macos" ; fi ; \
if [ $$OS = "windows" ] ; then SERVER_PATH=../servers/$$target/plikd.exe ; fi ; \
if [ $$ARCH = "386" ] ; then ARCH="32bits" ; fi ; \
if [ $$ARCH = "amd64" ] ; then ARCH="64bits" ; fi ; \
TARBALL_NAME=plik-$(RELEASE_VERSION)-$$OS-$$ARCH.tar.gz; \
echo "Packaging plik release for $$target to $$TARBALL_NAME"; \
cp -R $$SERVER_PATH plik-$(RELEASE_VERSION)/server; \
tar czvf ../releases/$$TARBALL_NAME plik-$(RELEASE_VERSION); \
done

@cp -R servers/openbsd-amd64/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-openbsd-64bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/openbsd-386/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-openbsd-32bits.tar.gz plik-`cat ../VERSION`

@rm $(RELEASE_DIR)/server/plikd
@cp -R servers/windows-amd64/plikd.exe $(RELEASE_DIR)/server && cd release && zip -r ../releases/plik-`cat ../VERSION`-windows-64bits.zip plik-`cat ../VERSION`
@cp -R servers/windows-386/plikd.exe $(RELEASE_DIR)/server && cd release && zip -r ../releases/plik-`cat ../VERSION`-windows-32bits.zip plik-`cat ../VERSION`
@md5sum releases/* > releases/md5sum.txt

@cp -R servers/darwin-amd64/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-macos-64bits.tar.gz plik-`cat ../VERSION`
@cp -R servers/darwin-386/plikd $(RELEASE_DIR)/server && cd release && tar czvf ../releases/plik-`cat ../VERSION`-macos-32bits.tar.gz plik-`cat ../VERSION`

@md5sum releases/* > releases/md5sum.txt
###
# Run tests and sanity checks
###
test:

@server/gen_build_info.sh $(RELEASE_VERSION)
@ERR="" ; for directory in server client ; do \
cd $$directory; \
echo -n "go test $$directory : "; \
TEST=`go test ./... 2>&1`; \
if [ $$? = 0 ] ; then echo "OK" ; else echo "$$TEST" | grep -v "no test files" | grep -v "^\[" && ERR="1"; fi ; \
echo "go fmt $$directory : "; \
for file in $$(find -name "*.go" | grep -v Godeps ); do \
echo -n " - file $$file : " ; \
FMT=`gofmt -l $$file` ; \
if [ "$$FMT" = "" ] ; then echo "OK" ; else echo "FAIL" && ERR="1" ; fi ; \
done; \
echo -n "go vet $$directory : "; \
VET=`go vet ./... 2>&1`; \
if [ $$? = 0 ] ; then echo "OK" ; else echo "FAIL" && echo $$VET && ERR="1" ; fi ; \
echo -n "go lint $$directory : "; \
LINT=`golint ./...`; \
if [ "$$LINT" = "" ] ; then echo "OK" ; else echo "FAIL" && echo $$LINT && ERR="1" ; fi ; \
cd - 2>&1 > /dev/null; \
done ; if [ "$$ERR" = "1" ] ; then exit 1 ; fi
@echo "cli client integration tests :\n" && cd client && ./test.sh

###
# Remove all build files
###
clean:
@rm -rf server/common/version.go
@rm -rf server/public/bower_components
@rm -rf server/public/public
@rm -rf server/plikd
Expand Down
44 changes: 27 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ Plik is an simple and powerful file uploading system written in golang.
- Comments : Add custom message (in Markdown format)

### Version
1.0
1.1

### Installation

##### From release
To run plik, it's very simple :
```sh
$ wget https://github.com/root-gg/plik/releases/download/1.0/plik-1.0.tar.gz
$ tar xvf plik-1.0.tar.gz
$ cd plik-1.0/server
$ wget https://github.com/root-gg/plik/releases/download/1.1/plik-1.1.tar.gz
$ tar xvf plik-1.1.tar.gz
$ cd plik-1.1/server
$ ./plikd
```
Et voilà ! You now have a fully functional instance of plik running on http://127.0.0.1:8080.
Expand Down Expand Up @@ -58,18 +58,10 @@ $ go get github.com/root-gg/plik/server
$ cd $GOPATH/github.com/root-gg/plik/
```

As root user you need to install grunt, bower, and setup the golang crosscompilation environnement :
```sh
$ sudo -c "npm install -g bower grunt-cli"
$ sudo -c "client/build.sh env"
```

To build everything and run it :
```sh
$ make deps
$ make release
$ cd server
$ ./plikd
$ make
$ cd server && ./plikd
```

To make debian packages :
Expand Down Expand Up @@ -174,6 +166,23 @@ Remove file :
- **DELETE** /$mode/:uploadid:/:fileid:/:filename:
- Delete file. Upload **MUST** have "removable" option enabled.

Show server details :

- **GET** /version
- Show plik server version, and some build informations (build host, date, git revision,...)

- **GET** /config
- Show plik server configuration (ttl values, max file size, ...)

QRCode :

- **GET** /qrcode
- Generate a QRCode image from an url
- Params :
- url : The url you want to store in the QRCode
- size : The size of the generated image in pixels (default: 250, max: 1000)


$mode can be "file" or "stream" depending if stream mode is enabled. See FAQ for more details.

Examples :
Expand Down Expand Up @@ -215,20 +224,21 @@ Options:
-n, --name NAME Set file name when piping from STDIN
--server SERVER Overrides plik url
--comments COMMENT Set comments of the upload ( MarkDown compatible )
--archive-options OPTIONS [tar|zip] Additional command line options
-p Protect the upload with login and password
--password PASSWD Protect the upload with login:password ( if omitted default login is "plik" )
-y, --yubikey Protect the upload with a Yubikey OTP
-a Archive upload using default archive params ( see ~/.plikrc )
--archive MODE Archive upload using specified archive backend : tar|zip
--compress MODE [tar] Compression codec : gzip|bzip2|xz|lzip|lzma|lzop|compress|no
--archive-options OPTIONS [tar|zip] Additional command line options
-s Encrypt upload usnig default encrypt params ( see ~/.plikrc )
--secure MODE Archive upload using specified archive backend : openssl|pgp
--cipher CIPHER [openssl] Openssl cipher to use ( see openssl help )
--passphrase PASSPHRASE [openssl] Passphrase or '-' to be prompted for a passphrase
--secure-options OPTIONS [openssl|pgp] Additional command line options
--recipient RECIPIENT [pgp] Set recipient for pgp backend ( example : --recipient Bob )
--secure-options OPTIONS [openssl|pgp] Additional command line options
--update Update client
-v --version Show client version
```
For example to create directory tar.gz archive and encrypt it with openssl :
Expand All @@ -248,7 +258,7 @@ Client configuration and preferences are stored at ~/.plikrc ( overridable with
### FAQ
##### I have an error when uploading from client : "Unable upload file : HTTP error 411 Length Required"
##### I have an error when uploading from client : "Unable to upload file : HTTP error 411 Length Required"
Under nginx < 1.3.9, you must enable HttpChunkin module to allow transfer-encoding "chunked".
You might want to install the "nginx-extras" Debian package with built-in HttpChunkin module.
Expand Down
1 change: 0 additions & 1 deletion VERSION

This file was deleted.

Loading

0 comments on commit a322a3c

Please sign in to comment.