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/pgsql.ini | ||||
| /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