* Modify tbraeutigam/gogs-snap for gitea * Fix building on 16.04 (manually build go-bindata). -> add _source.tar.bz2 to .gitignore (used by snapcraft cleanbuild) * Streamline Snap packaging: - Take advantage of install-hooks (snapd 2.27) - Use snapctl configuration storage for unchanging values * Move to using Snap Hooks for configuration * Missed re-adding daemon statement * Fix two warnings from Codacy.tags/v1.5.0-dev
@@ -59,3 +59,13 @@ coverage.all | |||
/integrations/mysql.ini | |||
/integrations/pgsql.ini | |||
/node_modules | |||
# Snapcraft | |||
snap/.snapcraft/ | |||
parts/ | |||
stage/ | |||
prime/ | |||
*.snap | |||
*.snap-build | |||
*_source.tar.bz2 |
@@ -0,0 +1,66 @@ | |||
APP_NAME = Gitea: Go Git Service | |||
RUN_USER = root | |||
RUN_MODE = prod | |||
CUSTOM_PATH = SNAP_DIR_DATA/custom | |||
[server] | |||
DOMAIN = localhost | |||
PROTOCOL = http | |||
HTTP_PORT = 3001 | |||
ROOT_URL = http://localhost:3001/ | |||
DISABLE_SSH = false | |||
SSH_PORT = 22 | |||
STATIC_ROOT_PATH = SNAP_DIR_DATA/static | |||
APP_DATA_PATH = SNAP_DIR_COMMON/data | |||
SSH_ROOT = SNAP_DIR_COMMON/ssh | |||
SSH_KEY_TEST_PATH = SNAP_DIR_DATA/sshkeytest | |||
[database] | |||
DB_TYPE = sqlite3 | |||
PATH = SNAP_DIR_COMMON/gitea.db | |||
[repository] | |||
ROOT = SNAP_DIR_COMMON/repositories/data | |||
[repository.upload] | |||
ENABLED = true | |||
ALLOWED_TYPES = "image/jpeg|image/png" | |||
FILE_MAX_SIZE = 10 | |||
MAX_FILES = 5 | |||
TEMP_PATH = SNAP_DIR_COMMON/repositories/tmp | |||
[release.attachment] | |||
PATH = SNAP_DIR_COMMON/releases/attachments | |||
[smartypants] | |||
ENABLED = true | |||
[indexer] | |||
ISSUE_INDEXER_PATH = SNAP_DIR_COMMON/indexers/issues.bleve | |||
[mailer] | |||
ENABLED = false | |||
[service] | |||
REGISTER_EMAIL_CONFIRM = false | |||
ENABLE_NOTIFY_MAIL = false | |||
DISABLE_REGISTRATION = false | |||
ENABLE_CAPTCHA = false | |||
REQUIRE_SIGNIN_VIEW = false | |||
[picture] | |||
AVATAR_UPLOAD_PATH = SNAP_DIR_COMMON/pictures/avatars | |||
DISABLE_GRAVATAR = true | |||
ENABLE_FEDERATED_AVATAR = false | |||
[attachment] | |||
PATH = SNAP_DIR_COMMON/attachments | |||
[session] | |||
PROVIDER = memory | |||
[log] | |||
MODE = file | |||
LEVEL = Trace | |||
ROOT_PATH = SNAP_DIR_COMMON/log |
@@ -0,0 +1,126 @@ | |||
#!/bin/bash | |||
if snapctl get gitea.snap.custom; then | |||
cdir=$(snapctl get gitea.snap.custom) | |||
else | |||
cdir=$SNAP_COMMON | |||
fi | |||
cfg="$cdir/conf/app.ini" | |||
bak="$cdir/conf/app.ini.bak-$(date -Ins)" | |||
basecfg="$SNAP/snap/helpers/app.ini" | |||
smp="$SNAP/gitea/custom/conf/app.ini.sample" | |||
function toSnap() { | |||
OIFS=$IFS | |||
IFS=' | |||
' | |||
category="none" | |||
src="$cfg" | |||
[[ "$1" = "init" ]] && src="$smp" | |||
[[ "$1" = "snap" ]] && src="$basecfg" | |||
for l in $(sed 's_;\([A-Z]*\)_\1_g' $src | grep -v -e '^;' -e '^$'); do | |||
if echo $l | grep -q '^[[]'; then | |||
category=$(CatToSnap "$l") | |||
elif echo $l | grep -q '^[A-Z]'; then | |||
option=$(OptToSnap "$l") | |||
value=$(ValToSnap "$l") | |||
if [[ $category = "none" ]]; then | |||
snapctl set "$option=$value" | |||
else | |||
snapctl set "$category.$option=$value" | |||
fi | |||
fi | |||
done | |||
IFS=$OIFS | |||
} | |||
function toIni() { | |||
OIFS=$IFS | |||
IFS=' | |||
' | |||
category="none"; option="none"; catUnset=true | |||
src=$smp | |||
[[ -f $cfg ]] && src="$cfg" | |||
tmpIni="$cfg.tmp" | |||
[[ -f $src ]] && cp "$src" "$tmpIni" | |||
cp $tmpIni $bak | |||
echo '' > $cfg | |||
for l in $(grep -v -e '^;' -e '^$' $tmpIni); do | |||
if echo $l | grep -q '^[[]'; then | |||
category=$(CatToSnap "$l") | |||
catUnset=true | |||
elif echo $l | grep -q '^[A-Z]'; then | |||
option=$(OptToSnap "$l") | |||
if [[ $category = "none" ]]; then | |||
value=$(snapctl get $option) | |||
echo $(OptToIni "$option") = $value >> $cfg | |||
else | |||
value=$(snapctl get $category.$option) | |||
if $catUnset; then | |||
echo "" >> $cfg | |||
echo "[$(CatToIni "$category")]" >> $cfg | |||
catUnset=false | |||
fi | |||
echo $(OptToIni "$option") = $value >> $cfg | |||
fi | |||
fi | |||
done; | |||
IFS=$OIFS | |||
} | |||
function CatToSnap { | |||
ret=$(echo "$1" \ | |||
| grep -oP '[A-Za-z0-9._]+' \ | |||
| sed 's|\.|-|g' \ | |||
| sed 's|_|99|g') | |||
echo $ret | |||
} | |||
function OptToSnap { | |||
ret=$(echo "$1" \ | |||
| grep -oP '^[A-Z_]+' \ | |||
| tr '[:upper:]' '[:lower:]' \ | |||
| sed 's|_|-|g') | |||
echo $ret | |||
} | |||
function ValToSnap { | |||
ret=$(echo "$1" \ | |||
| grep -oP '=.*$' \ | |||
| sed 's_^= __g' \ | |||
| sed 's_^=__g' \ | |||
| sed "s|SNAP_DIR_DATA|$SDATA|g" \ | |||
| sed "s|SNAP_DIR_COMMON|$SCOMMON|g" \ | |||
| sed 's|{}||g') | |||
echo $ret | |||
} | |||
function CatToIni { | |||
ret=$(echo "$1" \ | |||
| sed 's|-|.|g' \ | |||
| sed 's|\ |_|g' \ | |||
| sed 's|99|_|g') | |||
echo $ret | |||
} | |||
function OptToIni { | |||
ret=$(echo "$1" \ | |||
| tr '[:lower:]' '[:upper:]' \ | |||
| sed 's|-|_|g') | |||
echo $ret | |||
} | |||
[[ "$1" = "configure" ]] \ | |||
&& toIni \ | |||
&& exit 0 | |||
[[ "$1" = "install" ]] \ | |||
&& echo "Initial Configuration..." \ | |||
&& mkdir -p $SNAP_COMMON/conf \ | |||
&& toSnap init \ | |||
&& toSnap snap \ | |||
&& toIni sample \ | |||
&& exit 0 | |||
[[ "$1" = "save" ]] \ | |||
&& echo "Saving current config..." \ | |||
&& toSnap \ | |||
&& exit 0 |
@@ -0,0 +1,23 @@ | |||
#!/bin/bash | |||
if ! env | grep -q root; then | |||
echo " | |||
+----------------------------------------+ | |||
| You are not running gitea as root. | | |||
| This is required for the snap package. | | |||
| Please re-run as root. | | |||
+----------------------------------------+ | |||
" | |||
$SNAP/gitea/gitea --help | |||
exit 1 | |||
fi | |||
# Set usernames for gitea | |||
export USERNAME=root | |||
export USER=root | |||
export GITEA_WORK_DIR=$(snapctl get gitea.snap.workdir) | |||
export GITEA_CUSTOM=$(snapctl get gitea.snap.custom) | |||
$SNAP/bin/gconfig save | |||
cd $SNAP/gitea; ./gitea $@ |
@@ -0,0 +1,3 @@ | |||
#!/bin/bash | |||
$SNAP/bin/gconfig configure |
@@ -0,0 +1,45 @@ | |||
#!/bin/bash | |||
export SDATA=$(echo $SNAP_DATA | sed "s|$SNAP_REVISION|current|") | |||
export SCOMMON="$SNAP_COMMON" | |||
export isRoot=`true` | |||
snapctl set gitea.snap.workdir="$SDATA/custom" | |||
snapctl set gitea.snap.custom="$SCOMMON" | |||
function mkDirCommon(){ | |||
for dir in $@; do | |||
mkdir -p "$SCOMMON/$dir" | |||
done | |||
} | |||
function mkdirData(){ | |||
for dir in $@; do | |||
mkdir -p "$SDATA/$dir" | |||
if [ -d $SNAP/$dir ]; then | |||
cp -r --preserve=mode \ | |||
$SNAP/$dir/* \ | |||
$SNAP/$dir/.[a-zA-Z0-9-]* \ | |||
$SDATA/$dir/ 2> $SCOMMON/log/snap-mkdirData.log | |||
fi | |||
done | |||
} | |||
mkDirCommon pictures \ | |||
repositories \ | |||
attachments \ | |||
data \ | |||
log | |||
mkdirData certs \ | |||
sshkeytest \ | |||
custom/conf \ | |||
static/templates \ | |||
static/scripts \ | |||
static/public | |||
[[ -f $SNAP_COMMON/conf/app.ini ]] || $SNAP/bin/gconfig install | |||
# Configure Git to use the right templates | |||
mkdir -p $SDATA/git/ | |||
cp -r --preserve=mode $SNAP/usr/share/git-core/templates $SDATA/git/ | |||
$SNAP/usr/bin/git config --global init.templateDir $SDATA/git/templates/ |
@@ -0,0 +1,121 @@ | |||
name: gitea | |||
summary: Gitea - A painless self-hosted Git service | |||
description: | | |||
The goal of this project is to make the easiest, fastest, and most painless | |||
way of setting up a self-hosted Git service. With Go, this can be done with | |||
an independent binary distribution across ALL platforms that Go supports, | |||
including Linux, Mac OS X, Windows and ARM. | |||
type: app | |||
icon: public/img/gitea-lg.png | |||
confinement: strict | |||
grade: stable | |||
version: 'git' | |||
apps: | |||
gitea: | |||
command: bin/gitea | |||
plugs: [network, network-bind] | |||
web: | |||
command: bin/gitea web | |||
daemon: simple | |||
plugs: [network, network-bind] | |||
serv: | |||
command: bin/gitea serv | |||
plugs: [network, network-bind] | |||
admin: | |||
command: bin/gitea admin | |||
plugs: [network, network-bind] | |||
cert: | |||
command: bin/gitea cert | |||
hook: | |||
command: bin/gitea hook | |||
plugs: [network, network-bind] | |||
dump: | |||
command: bin/gitea dump | |||
plugs: [home] | |||
help: | |||
command: bin/gitea --help | |||
version: | |||
command: bin/gitea --version | |||
sqlite: | |||
command: usr/bin/sqlite3 | |||
parts: | |||
go: | |||
source-tag: go1.8.3 | |||
prime: | |||
- -* | |||
gitea: | |||
plugin: nil | |||
source: . | |||
source-type: git | |||
after: [ go ] | |||
stage-packages: [ git, sqlite3, openssh-client ] | |||
build-packages: [ libpam0g-dev, libsqlite3-dev] | |||
prepare: | | |||
export PATH=$SNAPCRAFT_PART_INSTALL/../../go/install/bin:$PATH | |||
export GOPATH=$SNAPCRAFT_PART_INSTALL/../go | |||
export bld=$SNAPCRAFT_PART_INSTALL/../build | |||
export src=$SNAPCRAFT_PART_INSTALL/../src | |||
mkdir -p $GOPATH/src/code.gitea.io/gitea | |||
cp -r $src/* $GOPATH/src/code.gitea.io/gitea | |||
build: | | |||
export PATH=$SNAPCRAFT_PART_INSTALL/../go/bin/:$SNAPCRAFT_PART_INSTALL/../../go/install/bin:$PATH | |||
export GOPATH=$SNAPCRAFT_PART_INSTALL/../go | |||
go get -u github.com/jteeuwen/go-bindata/... | |||
cd $GOPATH/src/code.gitea.io/gitea | |||
TAGS="bindata sqlite pam cert" make generate build | |||
install: | | |||
# Set Convenience Variables | |||
src=$SNAPCRAFT_PART_INSTALL/../go/src/code.gitea.io/gitea | |||
giteaBase=$SNAPCRAFT_PART_INSTALL/gitea | |||
scurrent=/var/snap/$SNAPCRAFT_PROJECT_NAME/current | |||
scommon=/var/snap/$SNAPCRAFT_PROJECT_NAME/common | |||
# Copy build artifact and necessary files | |||
mkdir -p $giteaBase/conf | |||
# Workaround for gitea ignoring APP_DATA_PATH in app.ini after snap update. | |||
ln -s $scurrent/custom $giteaBase/custom | |||
ln -s $scommon/data $giteaBase/data | |||
# Workaround for cmd/certs not knowing how to put files somewhere else | |||
ln -s $scurrent/cert.pem $giteaBase/cert.pem | |||
ln -s $scurrent/key.pem $giteaBase/key.pem | |||
# Copy static content | |||
mkdir -p $SNAPCRAFT_PART_INSTALL/static | |||
cp $src/gitea $giteaBase/ | |||
cp -r $src/LICENSE \ | |||
$src/templates \ | |||
$src/public \ | |||
$src/scripts \ | |||
$SNAPCRAFT_PART_INSTALL/static/ | |||
cp -r $src/README.md \ | |||
$src/LICENSE \ | |||
$src/custom \ | |||
$SNAPCRAFT_PART_INSTALL/ | |||
prime: | |||
- -etc | |||
- -usr/lib/systemd | |||
- -usr/lib/gcc | |||
- -usr/lib/sasl2 | |||
- -usr/lib/x86_64-linux-gnu/krb5 | |||
- -usr/share/apport | |||
- -usr/share/bash-completion | |||
- -usr/share/doc | |||
- -usr/share/git-core/contrib | |||
- -usr/share/man | |||
- -usr/share/upstart | |||
- -var | |||
helpers: | |||
plugin: dump | |||
source: snap/helpers | |||
organize: | |||
simple_launcher.sh: bin/gitea | |||
app.ini: gitea/snapApp.ini | |||
configuration.sh: bin/gconfig | |||
prime: | |||
- bin/gitea | |||
- bin/gconfig | |||
- gitea/snapApp.ini |