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.
This commit is contained in:
		
							parent
							
								
									02ecc03d6d
								
							
						
					
					
						commit
						14f16d6c2e
					
				
					 7 changed files with 394 additions and 0 deletions
				
			
		
							
								
								
									
										10
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							|  | @ -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 | ||||||
|  |  | ||||||
							
								
								
									
										66
									
								
								snap/helpers/app.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								snap/helpers/app.ini
									
									
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||||
							
								
								
									
										126
									
								
								snap/helpers/configuration.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										126
									
								
								snap/helpers/configuration.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -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 | ||||||
							
								
								
									
										23
									
								
								snap/helpers/simple_launcher.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								snap/helpers/simple_launcher.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -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 $@ | ||||||
							
								
								
									
										3
									
								
								snap/hooks/configure
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								snap/hooks/configure
									
									
									
									
										vendored
									
									
										Executable file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | $SNAP/bin/gconfig configure | ||||||
							
								
								
									
										45
									
								
								snap/hooks/install
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										45
									
								
								snap/hooks/install
									
									
									
									
									
										Executable file
									
								
							|  | @ -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/ | ||||||
							
								
								
									
										121
									
								
								snap/snapcraft.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								snap/snapcraft.yaml
									
									
									
									
									
										Normal file
									
								
							|  | @ -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 a new issue