snap-packaging for gitea (#2568)
* 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.tokarchuk/v1.17
parent
02ecc03d6d
commit
14f16d6c2e
@ -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 |
Loading…
Reference in new issue