www-apps/misskey: add option to not install full source code

This commit is contained in:
tastytea 2022-05-24 21:05:57 +02:00
parent 2fbcd06768
commit 28da784b28
Signed by: tastytea
SSH Key Fingerprint: SHA256:FBkvrOlhq5use1XEttyUGT4bUTDVA1ar9SgIc9P03cM
2 changed files with 135 additions and 0 deletions

View File

@ -22,5 +22,6 @@
</upstream>
<use>
<flag name="nginx">Make init script depend on nginx</flag>
<flag name="source">Install full source code</flag>
</use>
</pkgmetadata>

View File

@ -0,0 +1,134 @@
# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# TODO: systemd support, ffmpeg USE-flags, postgresql USE-flags,
# nginx USE-flags, bundle node_modules/cypress deps
EAPI=7
inherit optfeature savedconfig
# NOTE: update for each bump
MY_COMMIT_ASSETS="0179793ec891856d6f37a3be16ba4c22f67a81b5"
DESCRIPTION="An interplanetary microblogging platform"
HOMEPAGE="https://misskey-hub.net/"
SRC_URI="
https://github.com/misskey-dev/misskey/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
https://github.com/misskey-dev/assets/archive/${MY_COMMIT_ASSETS}.tar.gz -> ${PN}-assets-${PV}.tar.gz
https://tastytea.de/files/gentoo/${P}-deps.tar
"
# NOTE: To generate the (incomplete) deps archive:
# echo 'yarn-offline-mirror "./npm-cache"' >> .yarnrc
# echo 'cache=./npm_cache' >> .npmrc
# yarn install
# tar -caf ${P}-deps.tar npm-cache
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64"
IUSE="nginx +source"
REQUIRED_USE="savedconfig"
RESTRICT="network-sandbox"
COMMON_DEPEND="
net-libs/nodejs:0/16
sys-apps/yarn
"
BDEPEND="
${COMMON_DEPEND}
dev-lang/nasm
virtual/pkgconfig
"
RDEPEND="
${COMMON_DEPEND}
acct-user/misskey
dev-db/postgresql
dev-db/redis
nginx? ( www-servers/nginx )
"
src_unpack() {
default
mv --no-target-directory assets-${MY_COMMIT_ASSETS} ${P}/${PN}-assets \
|| die "Could not move assets"
mv npm-cache ${P}/ || die "Could not move npm cache"
}
src_prepare() {
yarn config set yarn-offline-mirror $(realpath ./npm-cache) \
|| die "Setting up npm offline cache failed"
npm config set cache $(realpath ./npm-cache) \
|| die "Setting up npm offline cache failed"
restore_config .config/default.yml
if [[ ! -f .config/default.yml ]]; then
eerror "Edit .config/example.yml and save it to the location mentioned above"
die "No config file found"
fi
default
}
src_compile() {
# this still downloads stuff 🙃
yarn --offline install || die "dependency installation failed"
NODE_ENV=production yarn --offline build || die "build failed"
}
src_install() {
rm -rf npm-cache || die "Deleting cache failed"
insinto opt/misskey/misskey
insopts -o misskey -g misskey
if use source; then
doins -r .
else
doins -r package.json .node-version .config built packages
fi
# insopts doesn't affect directories
chown --recursive misskey:misskey "${ED}"/opt/misskey/misskey
chmod o= "${ED}"/opt/misskey/misskey
newinitd ${FILESDIR}/${PN}.initd ${PN}
if use nginx; then
sed -i 's/use logger$/use logger nginx/' "${ED}"/etc/init.d/${PN} \
|| die "Could not modify OpenRC init script"
fi
einstalldocs
}
pkg_postinst() {
elog "Run emerge --config ${CATEGORY}/${PN} to initialise the PostgreSQL database"
einfo "Running 'yarn migrate'"
su --shell /bin/bash --login --command \
"cd misskey && yarn --verbose migrate" \
misskey || die "migration failed"
if use nginx; then
einfo "An nginx example config can be found at <https://misskey-hub.net/en/docs/admin/nginx.html>"
fi
optfeature "thumbnail generation support" media-video/ffmpeg
}
pkg_config() {
einfo "Initialising PostgreSQL database"
echo -n "password for misskey user: "
read MY_PASSWORD
echo "create database misskey; create user misskey with encrypted password '${MY_PASSWORD}'; grant all privileges on database misskey to misskey; \q" \
| su -lc psql postgres || die "database creation failed"
su --shell /bin/bash --login --command \
"cd misskey && yarn --verbose run init" \
misskey || die "database initialisation failed"
ewarn "When you first start Misskey you will be asked to add an admin account via the web interface, and registrations are enabled."
ewarn "Do not expose the web interface to the public until after you configured your instance\!"
}