* 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.21.12.1
| @@ -59,3 +59,13 @@ coverage.all | |||||
| /integrations/mysql.ini | /integrations/mysql.ini | ||||
| /integrations/pgsql.ini | /integrations/pgsql.ini | ||||
| /node_modules | /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 | |||||