mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-21 21:05:34 +03:00
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