build(snapcraft): Add snapcraft build yaml and workflow (#608)

pull/671/head
samwiseg0 4 years ago committed by GitHub
parent 00944b1ec2
commit c8a8de38cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,103 @@
name: Publish Snap
on:
push:
branches: [develop]
tags: [v*]
pull_request: ~
jobs:
test:
name: Lint & Build Test
runs-on: ubuntu-latest
container: node:12.18-alpine
steps:
- name: checkout
uses: actions/checkout@v2
- name: install dependencies
env:
HUSKY_SKIP_INSTALL: 1
run: yarn
- name: lint
run: yarn lint
- name: build
run: yarn build
build-snap:
name: Build Snap Package (${{ matrix.architecture }})
needs: test
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[skip ci]')"
strategy:
fail-fast: false
matrix:
architecture:
- amd64
- arm64
- armhf
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Prepare
id: prepare
run: |
git fetch --prune --unshallow --tags
if [[ $GITHUB_REF == refs/tags/* || $GITHUB_REF == refs/heads/master ]]; then
echo ::set-output name=RELEASE::stable
else
echo ::set-output name=RELEASE::edge
fi
- name: Set Up QEMU
uses: docker/setup-qemu-action@v1
- name: Build Snap Package
uses: diddlesnaps/snapcraft-multiarch-action@v1
id: build
with:
architecture: ${{ matrix.architecture }}
- name: Upload Snap Package
uses: actions/upload-artifact@v2
with:
name: overseerr-snap-package-${{ matrix.architecture }}
path: ${{ steps.build.outputs.snap }}
- name: Review Snap Package
uses: diddlesnaps/snapcraft-review-tools-action@v1
with:
snap: ${{ steps.build.outputs.snap }}
- name: Publish Snap Package
uses: snapcore/action-publish@v1
with:
store_login: ${{ secrets.SNAP_LOGIN }}
snap: ${{ steps.build.outputs.snap }}
release: ${{ steps.prepare.outputs.RELEASE }}
discord:
name: Discord Notification
needs: build-snap
if: always() && github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Get Build Job Status
uses: technote-space/workflow-conclusion-action@v1
- name: Combine Job Status
id: status
run: |
failures=(neutral, skipped, timed_out, action_required)
if [[ ${array[@]} =~ $WORKFLOW_CONCLUSION ]]; then
echo ::set-output name=status::failure
else
echo ::set-output name=status::$WORKFLOW_CONCLUSION
fi
- name: Post Status to Discord
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ steps.status.outputs.status }}
title: ${{ github.workflow }}
nofail: true

@ -12,6 +12,7 @@ After running Overseerr for the first time, configure it by visiting the web UI
{% tabs %} {% tabs %}
{% tab title="Basic" %} {% tab title="Basic" %}
```bash ```bash
docker run -d \ docker run -d \
-e LOG_LEVEL=info \ -e LOG_LEVEL=info \
@ -21,9 +22,11 @@ docker run -d \
--restart unless-stopped \ --restart unless-stopped \
sctx/overseerr sctx/overseerr
``` ```
{% endtab %} {% endtab %}
{% tab title="UID/GID" %} {% tab title="UID/GID" %}
```text ```text
docker run -d \ docker run -d \
--user=[ user | user:group | uid | uid:gid | user:gid | uid:group ] \ --user=[ user | user:group | uid | uid:gid | user:gid | uid:group ] \
@ -34,9 +37,11 @@ docker run -d \
--restart unless-stopped \ --restart unless-stopped \
sctx/overseerr sctx/overseerr
``` ```
{% endtab %} {% endtab %}
{% tab title="Manual Update" %} {% tab title="Manual Update" %}
```text ```text
# Stop the Overseerr container # Stop the Overseerr container
docker stop overseerr docker stop overseerr
@ -50,6 +55,7 @@ docker pull sctx/overseerr
# Run the Overseerr container with the same parameters as before # Run the Overseerr container with the same parameters as before
docker run -d ... docker run -d ...
``` ```
{% endtab %} {% endtab %}
{% endtabs %} {% endtabs %}
@ -70,7 +76,7 @@ Use a 3rd party updating mechanism such as [Watchtower](https://github.com/conta
Please refer to the [docker for windows documentation](https://docs.docker.com/docker-for-windows/) for installation. Please refer to the [docker for windows documentation](https://docs.docker.com/docker-for-windows/) for installation.
{% hint style="danger" %} {% hint style="danger" %}
**WSL2 will need to be installed to prevent DB corruption! Please see** [**Docker Desktop WSL 2 backend**](https://docs.docker.com/docker-for-windows/wsl/) **on how to enable WSL2. The command below will only work with WSL2 installed! Details below.** **WSL2 will need to be installed to prevent DB corruption! Please see** [**Docker Desktop WSL 2 backend**](https://docs.docker.com/docker-for-windows/wsl/) **on how to enable WSL2. The command below will only work with WSL2 installed!**
{% endhint %} {% endhint %}
```bash ```bash
@ -81,116 +87,74 @@ docker run -d -e LOG_LEVEL=info -e TZ=Asia/Tokyo -p 5055:5055 -v "/your/path/her
Docker on Windows works differently than it does on Linux; it uses a VM to run a stripped-down Linux and then runs docker within that. The volume mounts are exposed to the docker in this VM via SMB mounts. While this is fine for media, it is unacceptable for the `/app/config` directory because SMB does not support file locking. This will eventually corrupt your database which can lead to slow behavior and crashes. If you must run in docker on Windows, you should put the `/app/config` directory mount inside the VM and not on the Windows host. It's worth noting that this warning also extends to other containers which use SQLite databases. Docker on Windows works differently than it does on Linux; it uses a VM to run a stripped-down Linux and then runs docker within that. The volume mounts are exposed to the docker in this VM via SMB mounts. While this is fine for media, it is unacceptable for the `/app/config` directory because SMB does not support file locking. This will eventually corrupt your database which can lead to slow behavior and crashes. If you must run in docker on Windows, you should put the `/app/config` directory mount inside the VM and not on the Windows host. It's worth noting that this warning also extends to other containers which use SQLite databases.
{% endhint %} {% endhint %}
## Linux \(Unsupported\) ## Linux
{% tabs %}
{% tab title="Ubuntu 16.04+/Debian" %} {% hint style="info" %}
{% hint style="danger" %} The [Overseerr snap](https://snapcraft.io/overseerr) is the only supported linux install method. Currently, the listening port cannot be changed. Port `5055` will need to be available on your host. To install snapd please refer to [Installing snapd](https://snapcraft.io/docs/installing-snapd).
This install method is **not currently supported**. Docker is the only install method supported. Do not create issues or ask for support unless you are able to reproduce the issue with Docker.
{% endhint %} {% endhint %}
```bash **To install:**
# Install nodejs
sudo apt-get install -y curl git gnupg2
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
# Install yarn
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
# Install Overseerr
cd ~ && git clone https://github.com/sct/overseerr.git
cd overseerr
yarn install
yarn build
yarn start
```
**Updating**
In order to update, you will need to re-build overseer.
```bash
cd ~/.overseerr
git pull
yarn install
yarn build
yarn start
``` ```
{% endtab %} sudo snap install overseerr
```
{% tab title="Ubuntu ARM" %} **Updating:**
{% hint style="danger" %} Snap will keep Overseerr up-to-date automatically. You can force a refresh by using the following command.
This install method is **not currently supported**. Docker is the only install method supported. Do not create issues or ask for support unless you are able to reproduce the issue with Docker.
{% endhint %}
```bash ```
# Install nodejs sudo snap refresh
sudo apt-get install -y curl git gnupg2 build-essential
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
# Install yarn
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
# Install Overseerr
cd ~ && git clone https://github.com/sct/overseerr.git
cd overseerr
npm config set python "$(which python3)"
yarn install
yarn build
yarn start
``` ```
**Updating** **To install the development build:**
In order to update, you will need to re-build overseer.
```bash
cd ~/.overseerr
git pull
yarn install
yarn build
yarn start
``` ```
{% endtab %} sudo snap install overseerr --edge
```
{% tab title="ArchLinux \(3rd Party\)" %} {% hint style="danger" %}
Built from tag \(master\): [https://aur.archlinux.org/packages/overseerr/](https://aur.archlinux.org/packages/overseerr/) This version can break any moment. Be prepared to troubleshoot any issues that arise!
Built from latest \(develop\): [aur.archlinux.org/packages/overseerr-git](https://aur.archlinux.org/packages/overseerr-git/) {% endhint %}
**To install these just use your favorite AUR package manager:**
```bash ## Third Party
yay -S overseer
```
{% endtab %}
{% tab title="Gentoo \(3rd Party\)" %} {% tabs %}
{% tab title="Gentoo" %}
Portage overlay [GitHub Repository](https://github.com/chriscpritchard/overseerr-overlay) Portage overlay [GitHub Repository](https://github.com/chriscpritchard/overseerr-overlay)
Efforts will be made to keep up to date with the latest releases, however, this cannot be guaranteed. Efforts will be made to keep up to date with the latest releases, however, this cannot be guaranteed.
To enable using eselect repository, run: To enable using eselect repository, run:
```bash ```bash
eselect repository add overseerr-overlay git https://github.com/chriscpritchard/overseerr-overlay.git eselect repository add overseerr-overlay git https://github.com/chriscpritchard/overseerr-overlay.git
``` ```
Once complete, you can just run: Once complete, you can just run:
```bash ```bash
emerge www-apps/overseerr emerge www-apps/overseerr
``` ```
{% endtab %}
{% endtabs %} {% endtab %}
## Swizzin \(Third party\) {% tab title="Swizzin" %}
The installation is not implemented via docker, but barebones. The latest released version of overseerr will be used. The installation is not implemented via docker, but barebones. The latest released version of overseerr will be used.
Please see the [swizzin documentation](https://swizzin.ltd/applications/overseerr) for more information. Please see the [swizzin documentation](https://swizzin.ltd/applications/overseerr) for more information.
To install, run the following: To install, run the following:
```bash ```bash
box install overseerr box install overseerr
``` ```
To upgrade, run the following: To upgrade, run the following:
```bash ```bash
box upgrade overseerr box upgrade overseerr
``` ```
{% endtab %}
{% endtabs %}

@ -0,0 +1,93 @@
name: overseerr
adopt-info: overseerr
license: MIT
summary: Request management and media discovery tool for the Plex ecosystem.
description: >
Overseerr is a free and open source software application for managing requests for your media library.
It integrates with your existing services such as Sonarr, Radarr and Plex!
base: core18
confinement: strict
parts:
overseerr:
plugin: nodejs
nodejs-version: "12.18.4"
nodejs-package-manager: "yarn"
nodejs-yarn-version: v1.22.5
build-packages:
- git
- on arm64:
- build-essential
- automake
- on armhf:
- libatomic1
- build-essential
- automake
source: .
override-pull: |
snapcraftctl pull
# Get information to determine snap grade and version
BRANCH=$(git rev-parse --abbrev-ref HEAD)
COMMIT=$(git rev-parse HEAD)
COMMIT_SHORT=$(git rev-parse --short HEAD)
VERSION='v'$(cat package.json | grep 'version' | head -1 | sed 's/.*"\(.*\)"\,/\1/')
if [ "$VERSION" = "v0.1.0" ]; then
SNAP_VERSION=$COMMIT_SHORT
GRADE=devel
else
SNAP_VERSION=$VERSION
GRADE=stable
fi
# Write COMMIT_TAG as it is needed durring the build process
echo $COMMIT > commit.txt
# Print debug info for build version
echo "{\"commitShort\": \"$COMMIT_SHORT\", \
\"version\": \"$VERSION\", \
\"snapVersion\": \"$SNAP_VERSION\", \
\"snapGrade\": \"$GRADE\", \
\"branch\": \"$BRANCH\", \
\"commit\": \"$COMMIT\"}"
echo "{\"commitTag\": \"$COMMIT\"}" > committag.json
# Set snap version and grade
snapcraftctl set-version "$SNAP_VERSION"
snapcraftctl set-grade "$GRADE"
build-environment:
- PATH: "$SNAPCRAFT_PART_BUILD/node_modules/.bin:$SNAPCRAFT_PART_BUILD/../npm/bin:$PATH"
override-build: |
set -e
# On arm builds "python" cannot be found. Set python to python3
if [ "$ARCH" != "x86_64" ]; then
npm config set python "$(which python3)"
fi
# Set COMMIT_TAG before the build begins
export COMMIT_TAG=$(cat $SNAPCRAFT_PART_BUILD/commit.txt)
snapcraftctl build
yarn build
# Copy files needed for staging
cp $SNAPCRAFT_PART_BUILD/committag.json $SNAPCRAFT_PART_INSTALL/
cp -R $SNAPCRAFT_PART_BUILD/.next $SNAPCRAFT_PART_INSTALL/
cp -R $SNAPCRAFT_PART_BUILD/dist $SNAPCRAFT_PART_INSTALL/
cp -R $SNAPCRAFT_PART_BUILD/node_modules $SNAPCRAFT_PART_INSTALL/
# Remove .github and gitbook as it will fail snap lint
rm -rf $SNAPCRAFT_PART_INSTALL/.github && rm $SNAPCRAFT_PART_INSTALL/.gitbook.yaml
stage:
[ .next, ./* ]
prime:
[ .next, ./* ]
apps:
deamon:
command: /bin/sh -c "cd $SNAP && node dist/index.js"
daemon: simple
restart-condition: on-failure
restart-delay: 5s
plugs:
- home
- network
- network-bind
environment:
PATH: "$SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH"
OVERSEERR_SNAP: "True"
CONFIG_DIRECTORY: $SNAP_USER_COMMON
LOG_LEVEL: "debug"
NODE_ENV: "production"
Loading…
Cancel
Save