Compare commits

..

No commits in common. "master" and "null-ls1" have entirely different histories.

41 changed files with 1164 additions and 987 deletions

View File

@ -1,20 +0,0 @@
# This file is globally distributed to all container image projects from
# https://github.com/linuxserver/docker-jenkins-builder/blob/master/.editorconfig
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
# trim_trailing_whitespace may cause unintended issues and should not be globally set true
trim_trailing_whitespace = false
[{Dockerfile*,**.yml}]
indent_style = space
indent_size = 2
[{**.sh,root/etc/s6-overlay/s6-rc.d/**,root/etc/cont-init.d/**,root/etc/services.d/**}]
indent_style = space
indent_size = 4

View File

@ -1,123 +0,0 @@
# Contributing to snapdrop
## Gotchas
* While contributing make sure to make all your changes before creating a Pull Request, as our pipeline builds each commit after the PR is open.
* Read, and fill the Pull Request template
* If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://linuxserver.io/discord)
## Common files
| File | Use case |
| :----: | --- |
| `Dockerfile` | Dockerfile used to build amd64 images |
| `Dockerfile.aarch64` | Dockerfile used to build 64bit ARM architectures |
| `Dockerfile.armhf` | Dockerfile used to build 32bit ARM architectures |
| `Jenkinsfile` | This file is a product of our builder and should not be edited directly. This is used to build the image |
| `jenkins-vars.yml` | This file is used to generate the `Jenkinsfile` mentioned above, it only affects the build-process |
| `package_versions.txt` | This file is generated as a part of the build-process and should not be edited directly. It lists all the installed packages and their versions |
| `README.md` | This file is a product of our builder and should not be edited directly. This displays the readme for the repository and image registries |
| `readme-vars.yml` | This file is used to generate the `README.md` |
## Readme
If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit.
Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-snapdrop/edit/master/readme-vars.yml).
These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play.
Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-snapdrop)
### Fixing typos or clarify the text in the readme
There are variables for multiple parts of the readme, the most common ones are:
| Variable | Description |
| :----: | --- |
| `project_blurb` | This is the short excerpt shown above the project logo. |
| `app_setup_block` | This is the text that shows up under "Application Setup" if enabled |
### Parameters
The compose and run examples are also generated from these variables.
We have a [reference file](https://github.com/linuxserver/docker-jenkins-builder/blob/master/vars/_container-vars-blank) in our Jenkins Builder.
These are prefixed with `param_` for required parameters, or `opt_param` for optional parameters, except for `cap_add`.
Remember to enable param, if currently disabled. This differs between parameters, and can be seen in the reference file.
Devices, environment variables, ports and volumes expects its variables in a certain way.
### Devices
```yml
param_devices:
- { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "For hardware transcoding" }
opt_param_devices:
- { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "For hardware transcoding" }
```
### Environment variables
```yml
param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
opt_param_env_vars:
- { env_var: "VERSION", env_value: "latest", desc: "Supported values are LATEST, PLEXPASS or a specific version number." }
```
### Ports
```yml
param_ports:
- { external_port: "80", internal_port: "80", port_desc: "Application WebUI" }
opt_param_ports:
- { external_port: "80", internal_port: "80", port_desc: "Application WebUI" }
```
### Volumes
```yml
param_volumes:
- { vol_path: "/config", vol_host_path: "</path/to/appdata/config>", desc: "Configuration files." }
opt_param_volumes:
- { vol_path: "/config", vol_host_path: "</path/to/appdata/config>", desc: "Configuration files." }
```
### Testing template changes
After you make any changes to the templates, you can use our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) to have the files updated from the modified templates. Please use the command found under `Running Locally` [on this page](https://github.com/linuxserver/docker-jenkins-builder/blob/master/README.md) to generate them prior to submitting a PR.
## Dockerfiles
We use multiple Dockerfiles in our repos, this is because sometimes some CPU architectures needs different packages to work.
If you are proposing additional packages to be added, ensure that you added the packages to all the Dockerfiles in alphabetical order.
### Testing your changes
```bash
git clone https://github.com/linuxserver/docker-snapdrop.git
cd docker-snapdrop
docker build \
--no-cache \
--pull \
-t linuxserver/snapdrop:latest .
```
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Update the changelog
If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-snapdrop/tree/master/root), add an entry to the changelog
```yml
changelogs:
- { date: "DD.MM.YY:", desc: "Added some love to templates" }
```

34
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,34 @@
[linuxserverurl]: https://linuxserver.io
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
If you are new to Docker or this application our issue tracker is **ONLY** used for reporting bugs or requesting features. Please use [our discord server](https://discord.gg/YWrKVTn) for general support.
<!--- Provide a general summary of the issue in the Title above -->
------------------------------
## Expected Behavior
<!--- Tell us what should happen -->
## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->
## Steps to Reproduce
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
## Environment
**OS:**
**CPU architecture:** x86_64/arm32/arm64
**How docker service was installed:**
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Command used to create docker container (run/create/compose/screenshot)
<!--- Provide your docker create/run command or compose yaml snippet, or a screenshot of settings if using a gui to create the container -->
## Docker logs
<!--- Provide a full docker log, output of "docker logs snapdrop" -->

View File

@ -1,13 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: Discord chat support
url: https://linuxserver.io/discord
about: Realtime support / chat with the community and the team.
- name: Discourse discussion forum
url: https://discourse.linuxserver.io
about: Post on our community forum.
- name: Documentation
url: https://docs.linuxserver.io/images/docker-snapdrop
about: Documentation - information about all of our containers.

View File

@ -1,14 +0,0 @@
# Based on the issue template
name: Bug report
description: Create a report to help us improve
title: "[BUG] <title>"
labels: [Bug]
body:
- type: markdown
attributes:
value: |
# DEPRECATION NOTICE
This image is deprecated. We will not offer support for this image and it will not be updated.
Consider switching to https://github.com/linuxserver/docker-pairdrop for similar functionality

View File

@ -1,14 +0,0 @@
# Based on the issue template
name: Feature request
description: Suggest an idea for this project
title: "[FEAT] <title>"
labels: [enhancement]
body:
- type: markdown
attributes:
value: |
# DEPRECATION NOTICE
This image is deprecated. We will not offer support for this image and it will not be updated.
Consider switching to https://github.com/linuxserver/docker-pairdrop for similar functionality

View File

@ -1,17 +1,12 @@
# DEPRECATION NOTICE
This image is deprecated. We will not offer support for this image and it will not be updated.
Consider switching to https://github.com/linuxserver/docker-pairdrop for similar functionality
<!--- Provide a general summary of your changes in the Title above -->
[linuxserverurl]: https://linuxserver.io
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
<!--- Before submitting a pull request please check the following -->
<!--- If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR -->
<!--- If this is a fix for a typo in code or documentation in the README please file an issue and let us sort it out we do not need a PR -->
<!--- Ask yourself if this modification is something the whole userbase will benefit from, if this is a specific change for corner case functionality or plugins please look at making a Docker Mod or local script https://blog.linuxserver.io/2019/09/14/customizing-our-containers/ -->
<!--- That if the PR is addressing an existing issue include, closes #<issue number> , in the body of the PR commit message -->
<!--- You have included links to any files / patches etc your PR may be using in the body of the PR commit message -->
@ -26,11 +21,7 @@ Consider switching to https://github.com/linuxserver/docker-pairdrop for similar
------------------------------
- [ ] I have read the [contributing](https://github.com/linuxserver/docker-snapdrop/blob/master/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications
------------------------------
<!--- We welcome all PRs though this doesnt guarantee it will be accepted. -->
We welcome all PRs though this doesnt guarantee it will be accepted.
## Description:
<!--- Describe your changes in detail -->

View File

@ -8,6 +8,6 @@ jobs:
steps:
- uses: actions/first-interaction@v1
with:
issue-message: 'Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.'
pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-snapdrop/blob/master/.github/PULL_REQUEST_TEMPLATE.md)!'
issue-message: 'Thanks for opening your first issue here! Be sure to follow the [issue template](https://github.com/linuxserver/docker-snapdrop/.github/ISSUE_TEMPLATE.md)!'
pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-snapdrop/.github/PULL_REQUEST_TEMPLATE.md)!'
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,12 +0,0 @@
name: Permission check
on:
pull_request_target:
paths:
- '**/run'
- '**/finish'
- '**/check'
- 'root/migrations/*'
jobs:
permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1

23
.github/workflows/stale.yml vendored Executable file
View File

@ -0,0 +1,23 @@
name: Mark stale issues and pull requests
on:
schedule:
- cron: "30 1 * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v1
with:
stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
stale-pr-message: "This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
stale-issue-label: 'no-issue-activity'
stale-pr-label: 'no-pr-activity'
days-before-stale: 30
days-before-close: 365
exempt-issue-labels: 'awaiting-approval,work-in-progress'
exempt-pr-labels: 'awaiting-approval,work-in-progress'
repo-token: ${{ secrets.GITHUB_TOKEN }}

1
.gitignore vendored
View File

@ -1 +0,0 @@
.jenkins-external

View File

@ -1,6 +1,4 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.20
FROM lsiobase/nginx:3.12
# set version label
ARG BUILD_DATE
@ -14,37 +12,32 @@ ENV HOME="/app"
ENV NODE_ENV="production"
RUN \
echo "**** install runtime packages ****" && \
apk add --no-cache \
nodejs \
npm && \
echo "**** install snapdrop ****" && \
mkdir -p /app/www && \
if [ -z ${SNAPDROP_RELEASE} ]; then \
SNAPDROP_RELEASE=$(curl -sX GET "https://api.github.com/repos/snapdrop/snapdrop/commits/master" \
| awk '/sha/{print $4;exit}' FS='[""]'); \
fi && \
curl -o \
/tmp/snapdrop.tar.gz -L \
"https://github.com/snapdrop/snapdrop/archive/${SNAPDROP_RELEASE}.tar.gz" && \
tar xf \
/tmp/snapdrop.tar.gz -C \
/app/www/ --strip-components=1 && \
cd /app/www/server && \
npm i && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
rm -rf \
/etc/logrotate.d/php-fpm \
/etc/s6-overlay/s6-rc.d/svc-php-fpm \
/etc/s6-overlay/s6-rc.d/user/contents.d/svc-php-fpm \
/tmp/* \
$HOME/.cache
echo "**** install build packages ****" && \
apk add --no-cache \
nodejs \
npm && \
apk add --no-cache --virtual=build-dependencies \
curl && \
echo "**** install snapdrop ****" && \
mkdir -p /app/snapdrop && \
if [ -z ${SNAPDROP_RELEASE} ]; then \
SNAPDROP_RELEASE=$(curl -sX GET "https://api.github.com/repos/RobinLinus/snapdrop/commits/master" \
| awk '/sha/{print $4;exit}' FS='[""]'); \
fi && \
curl -o \
/tmp/snapdrop.tar.gz -L \
"https://github.com/RobinLinus/snapdrop/archive/${SNAPDROP_RELEASE}.tar.gz" && \
tar xf \
/tmp/snapdrop.tar.gz -C \
/app/snapdrop/ --strip-components=1 && \
cd /app/snapdrop/server && \
npm i && \
echo "**** cleanup ****" && \
apk del --purge \
build-dependencies && \
rm -rf \
/root/.cache \
/tmp/*
# copy local files
COPY root/ /
# ports and volumes
EXPOSE 80 443
VOLUME /config

View File

@ -1,6 +1,4 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.20
FROM lsiobase/nginx:arm64v8-3.12
# set version label
ARG BUILD_DATE
@ -14,37 +12,32 @@ ENV HOME="/app"
ENV NODE_ENV="production"
RUN \
echo "**** install runtime packages ****" && \
apk add --no-cache \
nodejs \
npm && \
echo "**** install snapdrop ****" && \
mkdir -p /app/www && \
if [ -z ${SNAPDROP_RELEASE} ]; then \
SNAPDROP_RELEASE=$(curl -sX GET "https://api.github.com/repos/snapdrop/snapdrop/commits/master" \
| awk '/sha/{print $4;exit}' FS='[""]'); \
fi && \
curl -o \
/tmp/snapdrop.tar.gz -L \
"https://github.com/snapdrop/snapdrop/archive/${SNAPDROP_RELEASE}.tar.gz" && \
tar xf \
/tmp/snapdrop.tar.gz -C \
/app/www/ --strip-components=1 && \
cd /app/www/server && \
npm i && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
rm -rf \
/etc/logrotate.d/php-fpm \
/etc/s6-overlay/s6-rc.d/svc-php-fpm \
/etc/s6-overlay/s6-rc.d/user/contents.d/svc-php-fpm \
/tmp/* \
$HOME/.cache
echo "**** install build packages ****" && \
apk add --no-cache \
nodejs \
npm && \
apk add --no-cache --virtual=build-dependencies \
curl && \
echo "**** install snapdrop ****" && \
mkdir -p /app/snapdrop && \
if [ -z ${SNAPDROP_RELEASE} ]; then \
SNAPDROP_RELEASE=$(curl -sX GET "https://api.github.com/repos/RobinLinus/snapdrop/commits/master" \
| awk '/sha/{print $4;exit}' FS='[""]'); \
fi && \
curl -o \
/tmp/snapdrop.tar.gz -L \
"https://github.com/RobinLinus/snapdrop/archive/${SNAPDROP_RELEASE}.tar.gz" && \
tar xf \
/tmp/snapdrop.tar.gz -C \
/app/snapdrop/ --strip-components=1 && \
cd /app/snapdrop/server && \
npm i && \
echo "**** cleanup ****" && \
apk del --purge \
build-dependencies && \
rm -rf \
/root/.cache \
/tmp/*
# copy local files
COPY root/ /
# ports and volumes
EXPOSE 80 443
VOLUME /config

43
Dockerfile.armhf Normal file
View File

@ -0,0 +1,43 @@
FROM lsiobase/nginx:arm32v7-3.12
# set version label
ARG BUILD_DATE
ARG VERSION
ARG SNAPDROP_RELEASE
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="alex-phillips"
# environment settings
ENV HOME="/app"
ENV NODE_ENV="production"
RUN \
echo "**** install build packages ****" && \
apk add --no-cache \
nodejs \
npm && \
apk add --no-cache --virtual=build-dependencies \
curl && \
echo "**** install snapdrop ****" && \
mkdir -p /app/snapdrop && \
if [ -z ${SNAPDROP_RELEASE} ]; then \
SNAPDROP_RELEASE=$(curl -sX GET "https://api.github.com/repos/RobinLinus/snapdrop/commits/master" \
| awk '/sha/{print $4;exit}' FS='[""]'); \
fi && \
curl -o \
/tmp/snapdrop.tar.gz -L \
"https://github.com/RobinLinus/snapdrop/archive/${SNAPDROP_RELEASE}.tar.gz" && \
tar xf \
/tmp/snapdrop.tar.gz -C \
/app/snapdrop/ --strip-components=1 && \
cd /app/snapdrop/server && \
npm i && \
echo "**** cleanup ****" && \
apk del --purge \
build-dependencies && \
rm -rf \
/root/.cache \
/tmp/*
# copy local files
COPY root/ /

756
Jenkinsfile vendored Normal file
View File

@ -0,0 +1,756 @@
pipeline {
agent {
label 'X86-64-MULTI'
}
options {
buildDiscarder(logRotator(numToKeepStr: '10', daysToKeepStr: '60'))
parallelsAlwaysFailFast()
}
// Input to determine if this is a package check
parameters {
string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK')
}
// Configuration for the variables used for this specific repo
environment {
BUILDS_DISCORD=credentials('build_webhook_url')
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
EXT_GIT_BRANCH = 'master'
EXT_USER = 'RobinLinus'
EXT_REPO = 'snapdrop'
BUILD_VERSION_ARG = 'SNAPDROP_VERSION'
LS_USER = 'linuxserver'
LS_REPO = 'docker-snapdrop'
CONTAINER_NAME = 'snapdrop'
DOCKERHUB_IMAGE = 'linuxserver/snapdrop'
DEV_DOCKERHUB_IMAGE = 'lsiodev/snapdrop'
PR_DOCKERHUB_IMAGE = 'lspipepr/snapdrop'
DIST_IMAGE = 'alpine'
MULTIARCH='true'
CI='true'
CI_WEB='true'
CI_PORT='3000'
CI_SSL='false'
CI_DELAY='120'
CI_DOCKERENV='TZ=US/Pacific'
CI_AUTH='user:password'
CI_WEBPATH=''
}
stages {
// Setup all the basic environment variables needed for the build
stage("Set ENV Variables base"){
steps{
script{
env.EXIT_STATUS = ''
env.LS_RELEASE = sh(
script: '''docker run --rm alexeiled/skopeo sh -c 'skopeo inspect docker://docker.io/'${DOCKERHUB_IMAGE}':latest 2>/dev/null' | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
returnStdout: true).trim()
env.LS_RELEASE_NOTES = sh(
script: '''cat readme-vars.yml | awk -F \\" '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''',
returnStdout: true).trim()
env.GITHUB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
env.COMMIT_SHA = sh(
script: '''git rev-parse HEAD''',
returnStdout: true).trim()
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE.md ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/greetings.yml ./.github/workflows/stale.yml'
}
script{
env.LS_RELEASE_NUMBER = sh(
script: '''echo ${LS_RELEASE} |sed 's/^.*-ls//g' ''',
returnStdout: true).trim()
}
script{
env.LS_TAG_NUMBER = sh(
script: '''#! /bin/bash
tagsha=$(git rev-list -n 1 ${LS_RELEASE} 2>/dev/null)
if [ "${tagsha}" == "${COMMIT_SHA}" ]; then
echo ${LS_RELEASE_NUMBER}
elif [ -z "${GIT_COMMIT}" ]; then
echo ${LS_RELEASE_NUMBER}
else
echo $((${LS_RELEASE_NUMBER} + 1))
fi''',
returnStdout: true).trim()
}
}
}
/* #######################
Package Version Tagging
####################### */
// Grab the current package versions in Git to determine package tag
stage("Set Package tag"){
steps{
script{
env.PACKAGE_TAG = sh(
script: '''#!/bin/bash
if [ -e package_versions.txt ] ; then
cat package_versions.txt | md5sum | cut -c1-8
else
echo none
fi''',
returnStdout: true).trim()
}
}
}
/* ########################
External Release Tagging
######################## */
// If this is a stable github release use the latest endpoint from github to determine the ext tag
stage("Set ENV github_stable"){
steps{
script{
env.EXT_RELEASE = sh(
script: '''curl -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq -r '. | .tag_name' ''',
returnStdout: true).trim()
}
}
}
// If this is a stable or devel github release generate the link for the build message
stage("Set ENV github_link"){
steps{
script{
env.RELEASE_LINK = 'https://github.com/' + env.EXT_USER + '/' + env.EXT_REPO + '/releases/tag/' + env.EXT_RELEASE
}
}
}
// Sanitize the release tag and strip illegal docker or github characters
stage("Sanitize tag"){
steps{
script{
env.EXT_RELEASE_CLEAN = sh(
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''',
returnStdout: true).trim()
}
}
}
// If this is a master build use live docker endpoints
stage("Set ENV live build"){
when {
branch "master"
environment name: 'CHANGE_ID', value: ''
}
steps {
script{
env.IMAGE = env.DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
}
}
// If this is a dev build use dev docker endpoints
stage("Set ENV dev build"){
when {
not {branch "master"}
environment name: 'CHANGE_ID', value: ''
}
steps {
script{
env.IMAGE = env.DEV_DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
}
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
}
}
}
// If this is a pull request build use dev docker endpoints
stage("Set ENV PR build"){
when {
not {environment name: 'CHANGE_ID', value: ''}
}
steps {
script{
env.IMAGE = env.PR_DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
}
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
}
}
}
// Run ShellCheck
stage('ShellCheck') {
when {
environment name: 'CI', value: 'true'
}
steps {
withCredentials([
string(credentialsId: 'spaces-key', variable: 'DO_KEY'),
string(credentialsId: 'spaces-secret', variable: 'DO_SECRET')
]) {
script{
env.SHELLCHECK_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/shellcheck-result.xml'
}
sh '''curl -sL https://raw.githubusercontent.com/linuxserver/docker-shellcheck/master/checkrun.sh | /bin/bash'''
sh '''#! /bin/bash
set -e
docker pull lsiodev/spaces-file-upload:latest
docker run --rm \
-e DESTINATION=\"${IMAGE}/${META_TAG}/shellcheck-result.xml\" \
-e FILE_NAME="shellcheck-result.xml" \
-e MIMETYPE="text/xml" \
-v ${WORKSPACE}:/mnt \
-e SECRET_KEY=\"${DO_SECRET}\" \
-e ACCESS_KEY=\"${DO_KEY}\" \
-t lsiodev/spaces-file-upload:latest \
python /upload.py'''
}
}
}
// Use helper containers to render templated files
stage('Update-Templates') {
when {
branch "master"
environment name: 'CHANGE_ID', value: ''
expression {
env.CONTAINER_NAME != null
}
}
steps {
sh '''#! /bin/bash
set -e
TEMPDIR=$(mktemp -d)
docker pull linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=master -v ${TEMPDIR}:/ansible/jenkins linuxserver/jenkins-builder:latest
CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
NEWHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
if [[ "${CURRENTHASH}" != "${NEWHASH}" ]]; then
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows
cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${LS_REPO}/
cd ${TEMPDIR}/repo/${LS_REPO}/
git add ${TEMPLATED_FILES}
git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
else
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
fi
mkdir -p ${TEMPDIR}/gitbook
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation
if [[ "${BRANCH_NAME}" == "master" ]] && [[ (! -f ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md ${TEMPDIR}/gitbook/docker-documentation/images/
cd ${TEMPDIR}/gitbook/docker-documentation/
git add images/docker-${CONTAINER_NAME}.md
git commit -m 'Bot Updating Documentation'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all
fi
rm -Rf ${TEMPDIR}'''
script{
env.FILES_UPDATED = sh(
script: '''cat /tmp/${COMMIT_SHA}-${BUILD_NUMBER}''',
returnStdout: true).trim()
}
}
}
// Exit the build if the Templated files were just updated
stage('Template-exit') {
when {
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'FILES_UPDATED', value: 'true'
expression {
env.CONTAINER_NAME != null
}
}
steps {
script{
env.EXIT_STATUS = 'ABORTED'
}
}
}
/* #######################
GitLab Mirroring
####################### */
// Ping into Gitlab to mirror this repo and have a registry endpoint
stage("GitLab Mirror"){
when {
environment name: 'EXIT_STATUS', value: ''
}
steps{
sh '''curl -H "Content-Type: application/json" -H "Private-Token: ${GITLAB_TOKEN}" -X POST https://gitlab.com/api/v4/projects \
-d '{"namespace_id":'${GITLAB_NAMESPACE}',\
"name":"'${LS_REPO}'",
"mirror":true,\
"import_url":"https://github.com/linuxserver/'${LS_REPO}'.git",\
"issues_access_level":"disabled",\
"merge_requests_access_level":"disabled",\
"repository_access_level":"enabled",\
"visibility":"public"}' '''
}
}
/* ###############
Build Container
############### */
// Build Docker container for push to LS Repo
stage('Build-Single') {
when {
environment name: 'MULTIARCH', value: 'false'
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh "docker build --no-cache --pull -t ${IMAGE}:${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
}
}
// Build MultiArch Docker containers for push to LS Repo
stage('Build-Multi') {
when {
environment name: 'MULTIARCH', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
parallel {
stage('Build X86') {
steps {
sh "docker build --no-cache --pull -t ${IMAGE}:amd64-${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
}
}
stage('Build ARMHF') {
agent {
label 'ARMHF'
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
echo 'Logging into DockerHub'
sh '''#! /bin/bash
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
'''
sh "docker build --no-cache --pull -f Dockerfile.armhf -t ${IMAGE}:arm32v7-${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm32v7-${META_TAG} lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) {
sh "docker push lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
}
sh '''docker rmi \
${IMAGE}:arm32v7-${META_TAG} \
lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
}
}
}
stage('Build ARM64') {
agent {
label 'ARM64'
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
echo 'Logging into DockerHub'
sh '''#! /bin/bash
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
'''
sh "docker build --no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) {
sh "docker push lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
}
sh '''docker rmi \
${IMAGE}:arm64v8-${META_TAG} \
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
}
}
}
}
}
// Take the image we just built and dump package versions for comparison
stage('Update-packages') {
when {
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh '''#! /bin/bash
set -e
TEMPDIR=$(mktemp -d)
if [ "${MULTIARCH}" == "true" ]; then
LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG}
else
LOCAL_CONTAINER=${IMAGE}:${META_TAG}
fi
if [ "${DIST_IMAGE}" == "alpine" ]; then
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
apk info -v > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
elif [ "${DIST_IMAGE}" == "ubuntu" ]; then
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
apt list -qq --installed | sed "s#/.*now ##g" | cut -d" " -f1 > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
fi
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO}
git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f master
cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/
cd ${TEMPDIR}/${LS_REPO}/
wait
git add package_versions.txt
git commit -m 'Bot Updating Package Versions'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
echo "Package tag updated, stopping build process"
else
echo "false" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
echo "Package tag is same as previous continue with build process"
fi
rm -Rf ${TEMPDIR}'''
script{
env.PACKAGE_UPDATED = sh(
script: '''cat /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}''',
returnStdout: true).trim()
}
}
}
// Exit the build if the package file was just updated
stage('PACKAGE-exit') {
when {
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
steps {
script{
env.EXIT_STATUS = 'ABORTED'
}
}
}
// Exit the build if this is just a package check and there are no changes to push
stage('PACKAGECHECK-exit') {
when {
branch "master"
environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'false'
environment name: 'EXIT_STATUS', value: ''
expression {
params.PACKAGE_CHECK == 'true'
}
}
steps {
script{
env.EXIT_STATUS = 'ABORTED'
}
}
}
/* #######
Testing
####### */
// Run Container tests
stage('Test') {
when {
environment name: 'CI', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
string(credentialsId: 'spaces-key', variable: 'DO_KEY'),
string(credentialsId: 'spaces-secret', variable: 'DO_SECRET')
]) {
script{
env.CI_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/index.html'
}
sh '''#! /bin/bash
set -e
docker pull lsiodev/ci:latest
if [ "${MULTIARCH}" == "true" ]; then
docker pull lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi
docker run --rm \
--shm-size=1gb \
-v /var/run/docker.sock:/var/run/docker.sock \
-e IMAGE=\"${IMAGE}\" \
-e DELAY_START=\"${CI_DELAY}\" \
-e TAGS=\"${CI_TAGS}\" \
-e META_TAG=\"${META_TAG}\" \
-e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \
-e SECRET_KEY=\"${DO_SECRET}\" \
-e ACCESS_KEY=\"${DO_KEY}\" \
-e DOCKER_ENV=\"${CI_DOCKERENV}\" \
-e WEB_SCREENSHOT=\"${CI_WEB}\" \
-e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \
-e DO_REGION="ams3" \
-e DO_BUCKET="lsio-ci" \
-t lsiodev/ci:latest \
python /ci/ci.py'''
}
}
}
/* ##################
Release Logic
################## */
// If this is an amd64 only image only push a single image
stage('Docker-Push-Single') {
when {
environment name: 'MULTIARCH', value: 'false'
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
retry(5) {
sh '''#! /bin/bash
set -e
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
echo $GITHUB_TOKEN | docker login docker.pkg.github.com -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
docker push ${PUSHIMAGE}:latest
docker push ${PUSHIMAGE}:${META_TAG}
done
'''
}
sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "{GITLABIMAGE}" "${IMAGE}"; do
docker rmi \
${DELETEIMAGE}:${META_TAG} \
${DELETEIMAGE}:latest || :
done
'''
}
}
}
// If this is a multi arch release push all images and define the manifest
stage('Docker-Push-Multi') {
when {
environment name: 'MULTIARCH', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
retry(5) {
sh '''#! /bin/bash
set -e
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
echo $GITHUB_TOKEN | docker login docker.pkg.github.com -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
if [ "${CI}" == "false" ]; then
docker pull lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-latest
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker push ${MANIFESTIMAGE}:amd64-latest
docker push ${MANIFESTIMAGE}:arm32v7-latest
docker push ${MANIFESTIMAGE}:arm64v8-latest
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm64v8-latest --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:latest
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
done
docker tag ${IMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:amd64-${META_TAG}
docker tag ${IMAGE}:arm32v7-${META_TAG} ${GITHUBIMAGE}:arm32v7-${META_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${GITHUBIMAGE}:arm64v8-${META_TAG}
docker tag ${GITHUBIMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:latest
docker tag ${GITHUBIMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:${META_TAG}
docker tag ${GITHUBIMAGE}:arm32v7-${META_TAG} ${GITHUBIMAGE}:arm32v7-latest
docker tag ${GITHUBIMAGE}:arm64v8-${META_TAG} ${GITHUBIMAGE}:arm64v8-latest
docker push ${GITHUBIMAGE}:amd64-${META_TAG}
docker push ${GITHUBIMAGE}:arm32v7-${META_TAG}
docker push ${GITHUBIMAGE}:arm64v8-${META_TAG}
docker push ${GITHUBIMAGE}:latest
docker push ${GITHUBIMAGE}:${META_TAG}
docker push ${GITHUBIMAGE}:arm32v7-latest
docker push ${GITHUBIMAGE}:arm64v8-latest
'''
}
sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
docker rmi \
${DELETEIMAGE}:amd64-${META_TAG} \
${DELETEIMAGE}:amd64-latest \
${DELETEIMAGE}:arm32v7-${META_TAG} \
${DELETEIMAGE}:arm32v7-latest \
${DELETEIMAGE}:arm64v8-${META_TAG} \
${DELETEIMAGE}:arm64v8-latest || :
done
docker rmi \
lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :
'''
}
}
}
// If this is a public release tag it in the LS Github
stage('Github-Tag-Push-Release') {
when {
branch "master"
expression {
env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
echo "Pushing New tag for current commit ${EXT_RELEASE_CLEAN}-ls${LS_TAG_NUMBER}"
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
"type": "commit",\
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag"
sh '''#! /bin/bash
curl -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq '. |.body' | sed 's:^.\\(.*\\).$:\\1:' > releasebody.json
echo '{"tag_name":"'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\
"target_commitish": "master",\
"name": "'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n**'${EXT_REPO}' Changes:**\\n\\n' > start
printf '","draft": false,"prerelease": false}' >> releasebody.json
paste -d'\\0' start releasebody.json > releasebody.json.done
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
}
}
// Use helper container to sync the current README on master to the dockerhub endpoint
stage('Sync-README') {
when {
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
sh '''#! /bin/bash
set -e
TEMPDIR=$(mktemp -d)
docker pull linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=master -v ${TEMPDIR}:/ansible/jenkins linuxserver/jenkins-builder:latest
docker pull lsiodev/readme-sync
docker run --rm=true \
-e DOCKERHUB_USERNAME=$DOCKERUSER \
-e DOCKERHUB_PASSWORD=$DOCKERPASS \
-e GIT_REPOSITORY=${LS_USER}/${LS_REPO} \
-e DOCKER_REPOSITORY=${IMAGE} \
-e GIT_BRANCH=master \
-v ${TEMPDIR}/docker-${CONTAINER_NAME}:/mnt \
lsiodev/readme-sync bash -c 'node sync'
rm -Rf ${TEMPDIR} '''
}
}
}
// If this is a Pull request send the CI link as a comment on it
stage('Pull Request Comment') {
when {
not {environment name: 'CHANGE_ID', value: ''}
environment name: 'CI', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/issues/${PULL_REQUEST}/comments \
-d '{"body": "I am a bot, here are the test results for this PR: \\n'${CI_URL}' \\n'${SHELLCHECK_URL}'"}' '''
}
}
}
/* ######################
Send status to Discord
###################### */
post {
always {
script{
if (env.EXIT_STATUS == "ABORTED"){
sh 'echo "build aborted"'
}
else if (currentBuild.currentResult == "SUCCESS"){
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
else {
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
}
cleanup {
cleanWs()
}
}
}

271
README.md
View File

@ -1,9 +1,7 @@
<!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read https://github.com/linuxserver/docker-snapdrop/blob/master/.github/CONTRIBUTING.md -->
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.")
[![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.")
[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
[![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.")
@ -11,121 +9,102 @@
The [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring:
* regular and timely application updates
* easy user mappings (PGID, PUID)
* custom base image with s6 overlay
* weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
* regular security updates
* regular and timely application updates
* easy user mappings (PGID, PUID)
* custom base image with s6 overlay
* weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
* regular security updates
Find us at:
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
* [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum.
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
# DEPRECATION NOTICE
This image is deprecated. We will not offer support for this image and it will not be updated.
Consider switching to https://github.com/linuxserver/docker-pairdrop for similar functionality
# [linuxserver/snapdrop](https://github.com/linuxserver/docker-snapdrop)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fsnapdrop?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh)
[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-snapdrop.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-snapdrop)
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-snapdrop.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-snapdrop/releases)
[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-snapdrop/packages)
[![GitLab Container Registry](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitLab%20Registry&logo=gitlab)](https://gitlab.com/linuxserver.io/docker-snapdrop/container_registry)
[![Quay.io](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Quay.io)](https://quay.io/repository/linuxserver.io/snapdrop)
[![GitLab Container Registry](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitLab%20Registry&logo=gitlab)](https://gitlab.com/Linuxserver.io/docker-snapdrop/container_registry)
[![MicroBadger Layers](https://img.shields.io/microbadger/layers/linuxserver/snapdrop.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge)](https://microbadger.com/images/linuxserver/snapdrop "Get your own version badge on microbadger.com")
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/snapdrop.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/snapdrop)
[![Docker Stars](https://img.shields.io/docker/stars/linuxserver/snapdrop.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/snapdrop)
[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-snapdrop%2Fjob%2Fmaster%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-snapdrop/job/master/)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fsnapdrop%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/snapdrop/latest/index.html)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Flsio-ci.ams3.digitaloceanspaces.com%2Flinuxserver%2Fsnapdrop%2Flatest%2Fci-status.yml)](https://lsio-ci.ams3.digitaloceanspaces.com/linuxserver/snapdrop/latest/index.html)
[Snapdrop](https://github.com/snapdrop/snapdrop) A local file sharing in your browser. Inspired by Apple's Airdrop.
[Snapdrop](https://github.com/RobinLinus/snapdrop) A local file sharing in your browser. Inspired by Apple's Airdrop.
[![snapdrop](https://raw.githubusercontent.com/snapdrop/snapdrop/master/client/images/logo_transparent_512x512.png)](https://github.com/snapdrop/snapdrop)
[![snapdrop]()](https://github.com/RobinLinus/snapdrop)
## Supported Architectures
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Our images support multiple architectures such as `x86-64`, `arm64` and `armhf`. We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `lscr.io/linuxserver/snapdrop:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
Simply pulling `linuxserver/snapdrop` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
The architectures supported by this image are:
| Architecture | Available | Tag |
| :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | |
| Architecture | Tag |
| :----: | --- |
| x86-64 | amd64-latest |
| arm64 | arm64v8-latest |
| armhf | arm32v7-latest |
## Application Setup
Webui is accessible at http://SERVERIP:PORT
If only using locally, comment out the following line in /config/nginx/site-confs/default.conf for local discovery:
```
proxy_set_header X-Forwarded-for $remote_addr;
```
## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
Here are some example snippets to help you get started creating a container.
>[!NOTE]
>Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided.
### docker
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```
docker create \
--name=snapdrop \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Europe/London \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
linuxserver/snapdrop
```
```yaml
### docker-compose
Compatible with docker-compose v2 schemas.
```
---
version: "2.1"
services:
snapdrop:
image: lscr.io/linuxserver/snapdrop:latest
image: linuxserver/snapdrop
container_name: snapdrop
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /path/to/snapdrop/config:/config
- TZ=Europe/London
ports:
- 80:80
- 443:443
restart: unless-stopped
```
### docker cli ([click here for more info](https://docs.docker.com/engine/reference/commandline/cli/))
```bash
docker run -d \
--name=snapdrop \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-p 80:80 \
-p 443:443 \
-v /path/to/snapdrop/config:/config \
--restart unless-stopped \
lscr.io/linuxserver/snapdrop:latest
```
## Parameters
Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function |
| :----: | --- |
| `-p 80:80` | http gui |
| `-p 443:443` | https gui |
| `-p 80` | http gui |
| `-p 443` | https gui |
| `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
| `-v /config` | Persistent config files |
| `-e TZ=Europe/London` | Specify a timezone to use EG Europe/London. |
## Environment variables from files (Docker secrets)
@ -133,11 +112,11 @@ You can set any environment variable from a file by using a special prepend `FIL
As an example:
```bash
-e FILE__MYVAR=/run/secrets/mysecretvariable
```
-e FILE__PASSWORD=/run/secrets/mysecretpassword
```
Will set the environment variable `MYVAR` based on the contents of the `/run/secrets/mysecretvariable` file.
Will set the environment variable `PASSWORD` based on the contents of the `/run/secrets/mysecretpassword` file.
## Umask for running applications
@ -146,156 +125,88 @@ Keep in mind umask is not chmod it subtracts from permissions based on it's valu
## User / Group Identifiers
When using volumes (`-v` flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
When using volumes (`-v` flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id your_user` as below:
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
```bash
id your_user
```
$ id username
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
```
Example output:
```text
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
```
&nbsp;
## Docker Mods
[![Docker Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=mods&query=%24.mods%5B%27snapdrop%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=snapdrop "view available mods for this container.")
[![Docker Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=snapdrop&query=%24.mods%5B%27snapdrop%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=snapdrop "view available mods for this container.") [![Docker Universal Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=universal&query=%24.mods%5B%27universal%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=universal "view available universal mods.")
We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to enable additional functionality within the containers. The list of Mods available for this image (if any) can be accessed via the dynamic badge above.
We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.
## Support Info
* Shell access whilst the container is running:
```bash
docker exec -it snapdrop /bin/bash
```
* To monitor the logs of the container in realtime:
```bash
docker logs -f snapdrop
```
* Container version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' snapdrop
```
* Image version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/snapdrop:latest
```
* Shell access whilst the container is running: `docker exec -it snapdrop /bin/bash`
* To monitor the logs of the container in realtime: `docker logs -f snapdrop`
* container version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' snapdrop`
* image version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/snapdrop`
## Updating Info
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Below are the instructions for updating containers:
### Via Docker Run/Create
* Update the image: `docker pull linuxserver/snapdrop`
* Stop the running container: `docker stop snapdrop`
* Delete the container: `docker rm snapdrop`
* Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* Start the new container: `docker start snapdrop`
* You can also remove the old dangling images: `docker image prune`
### Via Docker Compose
* Update all images: `docker-compose pull`
* or update a single image: `docker-compose pull snapdrop`
* Let compose update all containers as necessary: `docker-compose up -d`
* or update a single container: `docker-compose up -d snapdrop`
* You can also remove the old dangling images: `docker image prune`
* Update images:
* All images:
### Via Watchtower auto-updater (especially useful if you don't remember the original parameters)
* Pull the latest image at its tag and replace it with the same env variables in one run:
```
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once snapdrop
```
```bash
docker-compose pull
```
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using Docker Compose.
* Single image:
```bash
docker-compose pull snapdrop
```
* Update containers:
* All containers:
```bash
docker-compose up -d
```
* Single container:
```bash
docker-compose up -d snapdrop
```
* You can also remove the old dangling images:
```bash
docker image prune
```
### Via Docker Run
* Update the image:
```bash
docker pull lscr.io/linuxserver/snapdrop:latest
```
* Stop the running container:
```bash
docker stop snapdrop
```
* Delete the container:
```bash
docker rm snapdrop
```
* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* You can also remove the old dangling images:
```bash
docker image prune
```
### Image Update Notifications - Diun (Docker Image Update Notifier)
>[!TIP]
>We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
* You can also remove the old dangling images: `docker image prune`
## Building locally
If you want to make local modifications to these images for development purposes or just to customize the logic:
```bash
```
git clone https://github.com/linuxserver/docker-snapdrop.git
cd docker-snapdrop
docker build \
--no-cache \
--pull \
-t lscr.io/linuxserver/snapdrop:latest .
-t linuxserver/snapdrop:latest .
```
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
```
docker run --rm --privileged multiarch/qemu-user-static:register --reset
```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Versions
* **19.02.25:** - Deprecate.
* **31.05.24:** - Rebase to Alpine 3.20. Existing users should update their nginx confs to avoid http2 deprecation warnings.
* **06.02.24:** - Existing users should update: site-confs/default.conf - Cleanup default site conf.
* **23.12.23:** - Rebase to Alpine 3.19 with php 8.3.
* **25.05.23:** - Rebase to Alpine 3.18, deprecate armhf.
* **13.04.23:** - Move ssl.conf include to default.conf.
* **20.01.23:** - Rebase to alpine 3.17 with php8.1.
* **20.08.22:** - Rebasing to alpine 3.15 with php8. Restructure nginx configs ([see changes announcement](https://info.linuxserver.io/issues/2022-08-20-nginx-base)).
* **09.08.21:** - Rebase to Alpine 3.14. Add real_ip block to nginx default site config.
* **15.09.20:** - Initial Release.

View File

@ -2,13 +2,13 @@
# jenkins variables
project_name: docker-snapdrop
external_type: github_commit
external_type: github_stable
release_type: stable
release_tag: latest
ls_branch: master
repo_vars:
- EXT_GIT_BRANCH = 'master'
- EXT_USER = 'snapdrop'
- EXT_USER = 'RobinLinus'
- EXT_REPO = 'snapdrop'
- BUILD_VERSION_ARG = 'SNAPDROP_VERSION'
- LS_USER = 'linuxserver'
@ -21,9 +21,9 @@ repo_vars:
- MULTIARCH='true'
- CI='true'
- CI_WEB='true'
- CI_PORT='80'
- CI_PORT='3000'
- CI_SSL='false'
- CI_DELAY='60'
- CI_DOCKERENV=''
- CI_AUTH=''
- CI_DELAY='120'
- CI_DOCKERENV='TZ=US/Pacific'
- CI_AUTH='user:password'
- CI_WEBPATH=''

View File

@ -1,311 +1,69 @@
NAME VERSION TYPE
@isaacs/cliui 8.0.2 npm
@isaacs/fs-minipass 4.0.1 npm
@isaacs/string-locale-compare 1.1.0 npm
@npmcli/agent 2.2.2 npm
@npmcli/agent 3.0.0 npm
@npmcli/arborist 8.0.0 npm
@npmcli/config 9.0.0 npm
@npmcli/fs 3.1.1 npm
@npmcli/fs 4.0.0 npm
@npmcli/git 6.0.1 npm
@npmcli/installed-package-contents 3.0.0 npm
@npmcli/map-workspaces 4.0.1 npm
@npmcli/metavuln-calculator 8.0.1 npm
@npmcli/name-from-folder 3.0.0 npm
@npmcli/node-gyp 4.0.0 npm
@npmcli/package-json 6.0.1 npm
@npmcli/promise-spawn 8.0.2 npm
@npmcli/query 4.0.0 npm
@npmcli/redact 3.0.0 npm
@npmcli/run-script 9.0.1 npm
@pkgjs/parseargs 0.11.0 npm
@sigstore/bundle 3.0.0 npm
@sigstore/core 2.0.0 npm
@sigstore/protobuf-specs 0.3.2 npm
@sigstore/sign 3.0.0 npm
@sigstore/tuf 3.0.0 npm
@sigstore/verify 2.0.0 npm
@tufjs/canonical-json 2.0.0 npm
@tufjs/models 3.0.1 npm
abbrev 2.0.0 npm (+1 duplicate)
abbrev 3.0.0 npm
ada-libs 2.7.8-r0 apk
agent-base 7.1.1 npm
aggregate-error 3.1.0 npm
alpine-baselayout 3.6.5-r0 apk
alpine-baselayout-data 3.6.5-r0 apk
alpine-keys 2.4-r1 apk
alpine-release 3.20.5-r0 apk
ansi-regex 5.0.1 npm
ansi-regex 6.1.0 npm (+1 duplicate)
ansi-styles 4.3.0 npm
ansi-styles 6.2.1 npm
apache2-utils 2.4.62-r0 apk
apk-tools 2.14.4-r1 apk
apr 1.7.5-r0 apk
apr-util 1.6.3-r1 apk
aproba 2.0.0 npm
archy 1.0.0 npm
argon2-libs 20190702-r5 apk
balanced-match 1.0.2 npm
bash 5.2.26-r0 apk
bin-links 5.0.0 npm
binary-extensions 2.3.0 npm
brace-expansion 2.0.1 npm
brotli-libs 1.1.0-r2 apk
busybox 1.36.1-r29 apk
busybox-binsh 1.36.1-r29 apk
c-ares 1.33.1-r0 apk
ca-certificates 20241121-r1 apk
ca-certificates-bundle 20241121-r1 apk
cacache 18.0.4 npm
cacache 19.0.1 npm
catatonit 0.2.0-r0 apk
chalk 5.3.0 npm
chownr 2.0.0 npm
chownr 3.0.0 npm
ci-info 4.1.0 npm
cidr-regex 4.1.1 npm
clean-stack 2.2.0 npm
cli-columns 4.0.0 npm
cmd-shim 7.0.0 npm
color-convert 2.0.1 npm
color-name 1.1.4 npm
common-ancestor-path 1.0.1 npm
composer 2.8.5 binary
coreutils 9.5-r2 apk
coreutils-env 9.5-r2 apk
coreutils-fmt 9.5-r2 apk
coreutils-sha512sum 9.5-r2 apk
cross-spawn 7.0.6 npm
cssesc 3.0.0 npm
curl 8.12.0-r0 apk
debug 4.3.7 npm
diff 5.2.0 npm
eastasianwidth 0.2.0 npm
emoji-regex 8.0.0 npm
emoji-regex 9.2.2 npm (+1 duplicate)
encoding 0.1.13 npm
env-paths 2.2.1 npm
err-code 2.0.3 npm
exponential-backoff 3.1.1 npm
fastest-levenshtein 1.0.16 npm
findutils 4.9.0-r5 apk
foreground-child 3.3.0 npm
fs-minipass 2.1.0 npm
fs-minipass 3.0.3 npm
git 2.45.3-r0 apk
git-init-template 2.45.3-r0 apk
glob 10.4.5 npm
gmp 6.3.0-r1 apk
graceful-fs 4.2.11 npm
hosted-git-info 8.0.2 npm
http-cache-semantics 4.1.1 npm
http-proxy-agent 7.0.2 npm
https-proxy-agent 7.0.5 npm
iconv-lite 0.6.3 npm
icu-data-en 74.2-r0 apk
icu-libs 74.2-r0 apk
ignore-walk 7.0.0 npm
imurmurhash 0.1.4 npm
indent-string 4.0.0 npm
ini 5.0.0 npm
init-package-json 7.0.1 npm
ip-address 9.0.5 npm
ip-regex 5.0.0 npm
is-cidr 5.1.0 npm
is-fullwidth-code-point 3.0.0 npm
is-lambda 1.0.1 npm
isexe 2.0.0 npm
isexe 3.1.1 npm (+1 duplicate)
jackspeak 3.4.3 npm
jq 1.7.1-r0 apk
jsbn 1.1.0 npm
json-parse-even-better-errors 4.0.0 npm
json-stringify-nice 1.1.4 npm
jsonparse 1.3.1 npm
just-diff 6.0.2 npm
just-diff-apply 5.5.0 npm
libacl 2.3.2-r0 apk
libattr 2.5.2-r0 apk
libbase64 0.5.2-r0 apk
libbsd 0.12.2-r0 apk
libbz2 1.0.8-r6 apk
libcrypto3 3.3.3-r0 apk
libcurl 8.12.0-r0 apk
libedit 20240517.3.1-r0 apk
libexpat 2.6.4-r0 apk
libgcc 13.2.1_git20240309-r0 apk
libidn2 2.3.7-r0 apk
libintl 0.22.5-r0 apk
libmd 1.1.0-r0 apk
libncursesw 6.4_p20240420-r2 apk
libnpmaccess 9.0.0 npm
libnpmdiff 7.0.0 npm
libnpmexec 9.0.0 npm
libnpmfund 6.0.0 npm
libnpmhook 11.0.0 npm
libnpmorg 7.0.0 npm
libnpmpack 8.0.0 npm
libnpmpublish 10.0.1 npm
libnpmsearch 8.0.0 npm
libnpmteam 7.0.0 npm
libnpmversion 7.0.0 npm
libproc2 4.0.4-r0 apk
libpsl 0.21.5-r1 apk
libssl3 3.3.3-r0 apk
libstdc++ 13.2.1_git20240309-r0 apk
libunistring 1.2-r0 apk
libuuid 2.40.1-r1 apk
libxml2 2.12.7-r0 apk
libzip 1.10.1-r0 apk
linux-pam 1.6.0-r0 apk
logrotate 3.21.0-r1 apk
lru-cache 10.4.3 npm
make-fetch-happen 13.0.1 npm
make-fetch-happen 14.0.3 npm
minimatch 9.0.5 npm
minipass 3.3.6 npm (+4 duplicates)
minipass 5.0.0 npm
minipass 7.1.2 npm
minipass-collect 2.0.1 npm
minipass-fetch 3.0.5 npm
minipass-fetch 4.0.0 npm
minipass-flush 1.0.5 npm
minipass-pipeline 1.2.4 npm
minipass-sized 1.0.3 npm
minizlib 2.1.2 npm
minizlib 3.0.1 npm (+2 duplicates)
mkdirp 1.0.4 npm
mkdirp 3.0.1 npm (+1 duplicate)
ms 2.1.3 npm
musl 1.2.5-r0 apk
musl-utils 1.2.5-r0 apk
mute-stream 2.0.0 npm
nano 8.0-r0 apk
ncurses-terminfo-base 6.4_p20240420-r2 apk
negotiator 0.6.4 npm
negotiator 1.0.0 npm
netcat-openbsd 1.226-r0 apk
nghttp2-libs 1.62.1-r0 apk
nginx 1.26.2-r0 apk
node-gyp 10.2.0 npm
nodejs 20.15.1-r0 apk
nopt 7.2.1 npm
nopt 8.0.0 npm
normalize-package-data 7.0.0 npm
npm 10.9.1 npm
npm 10.9.1-r0 apk
npm-audit-report 6.0.0 npm
npm-bundled 4.0.0 npm
npm-install-checks 7.1.1 npm
npm-normalize-package-bin 4.0.0 npm
npm-package-arg 12.0.0 npm
npm-packlist 9.0.0 npm
npm-pick-manifest 10.0.0 npm
npm-profile 11.0.1 npm
npm-registry-fetch 18.0.2 npm
npm-user-validate 3.0.0 npm
oniguruma 6.9.9-r0 apk
openssl 3.3.3-r0 apk
p-map 4.0.0 npm
p-map 7.0.2 npm
package-json-from-dist 1.0.1 npm
pacote 19.0.1 npm
pacote 20.0.0 npm
parse-conflict-json 4.0.0 npm
path-key 3.1.1 npm
path-scurry 1.11.1 npm
pcre 8.45-r3 apk
pcre2 10.43-r0 apk
php83 8.3.15-r0 apk
php83-common 8.3.15-r0 apk
php83-ctype 8.3.15-r0 apk
php83-curl 8.3.15-r0 apk
php83-fileinfo 8.3.15-r0 apk
php83-fpm 8.3.15-r0 apk
php83-iconv 8.3.15-r0 apk
php83-mbstring 8.3.15-r0 apk
php83-openssl 8.3.15-r0 apk
php83-phar 8.3.15-r0 apk
php83-session 8.3.15-r0 apk
php83-simplexml 8.3.15-r0 apk
php83-xml 8.3.15-r0 apk
php83-xmlwriter 8.3.15-r0 apk
php83-zip 8.3.15-r0 apk
popt 1.19-r3 apk
postcss-selector-parser 6.1.2 npm
proc-log 4.2.0 npm
proc-log 5.0.0 npm
procps-ng 4.0.4-r0 apk
proggy 3.0.0 npm
promise-all-reject-late 1.0.1 npm
promise-call-limit 3.0.2 npm
promise-inflight 1.0.1 npm
promise-retry 2.0.1 npm
promzard 2.0.0 npm
qrcode-terminal 0.12.0 npm
read 4.0.0 npm
read-cmd-shim 5.0.0 npm
read-package-json-fast 4.0.0 npm
readline 8.2.10-r0 apk
retry 0.12.0 npm
rimraf 5.0.10 npm
safer-buffer 2.1.2 npm
scanelf 1.3.7-r2 apk
semver 7.6.3 npm
shadow 4.15.1-r0 apk
shebang-command 2.0.0 npm
shebang-regex 3.0.0 npm
signal-exit 4.1.0 npm
sigstore 3.0.0 npm
skalibs 2.14.1.1-r0 apk
smart-buffer 4.2.0 npm
snapdrop 1.0.0 npm
socks 2.8.3 npm
socks-proxy-agent 8.0.4 npm
spdx-correct 3.2.0 npm
spdx-exceptions 2.5.0 npm
spdx-expression-parse 3.0.1 npm (+1 duplicate)
spdx-expression-parse 4.0.0 npm
spdx-license-ids 3.0.20 npm
sprintf-js 1.1.3 npm
ssl_client 1.36.1-r29 apk
ssri 10.0.6 npm
ssri 12.0.0 npm
string-width 4.2.3 npm (+1 duplicate)
string-width 5.1.2 npm (+1 duplicate)
strip-ansi 6.0.1 npm (+1 duplicate)
strip-ansi 7.1.0 npm (+1 duplicate)
supports-color 9.4.0 npm
tar 6.2.1 npm
tar 7.4.3 npm
text-table 0.2.0 npm
tiny-relative-date 1.3.0 npm
treeverse 3.0.0 npm
tuf-js 3.0.1 npm
tzdata 2024b-r0 apk
ua-parser-js 0.7.24 npm
unique-filename 3.0.0 npm
unique-filename 4.0.0 npm
unique-names-generator 4.3.0 npm
unique-slug 4.0.0 npm
unique-slug 5.0.0 npm
util-deprecate 1.0.2 npm
utmps-libs 0.1.2.2-r1 apk
validate-npm-package-license 3.0.4 npm
validate-npm-package-name 6.0.0 npm
walk-up-path 3.0.1 npm
which 2.0.2 npm
which 4.0.0 npm
which 5.0.0 npm
wrap-ansi 7.0.0 npm
wrap-ansi 8.1.0 npm
write-file-atomic 6.0.0 npm
ws 7.4.6 npm
xz-libs 5.6.2-r0 apk
yallist 4.0.0 npm
yallist 5.0.0 npm
zlib 1.3.1-r1 apk
zstd-libs 1.5.6-r0 apk
alpine-baselayout-3.2.0-r7
alpine-keys-2.2-r0
apache2-utils-2.4.46-r0
apk-tools-2.10.5-r1
apr-1.7.0-r0
apr-util-1.6.1-r6
argon2-libs-20190702-r1
bash-5.0.17-r0
brotli-libs-1.0.7-r5
busybox-1.31.1-r19
c-ares-1.16.1-r0
ca-certificates-20191127-r4
ca-certificates-bundle-20191127-r4
coreutils-8.32-r0
expat-2.2.9-r1
git-2.26.2-r0
libacl-2.2.53-r0
libattr-2.4.48-r0
libc-utils-0.7.2-r3
libcrypto1.1-1.1.1g-r0
libcurl-7.69.1-r0
libedit-20191231.3.1-r0
libgcc-9.3.0-r2
libintl-0.20.2-r0
libmagic-5.38-r0
libproc-3.3.16-r0
libressl3.1-libcrypto-3.1.2-r0
libressl3.1-libssl-3.1.2-r0
libssl1.1-1.1.1g-r0
libstdc++-9.3.0-r2
libtls-standalone-2.9.1-r1
libuuid-2.35.2-r0
libuv-1.37.0-r0
libxml2-2.9.10-r4
linux-pam-1.3.1-r4
logrotate-3.16.0-r0
musl-1.1.24-r9
musl-utils-1.1.24-r9
nano-4.9.3-r0
ncurses-libs-6.2_p20200523-r0
ncurses-terminfo-base-6.2_p20200523-r0
nghttp2-libs-1.41.0-r0
nginx-1.18.0-r0
nodejs-12.18.3-r0
npm-12.18.3-r0
openssl-1.1.1g-r0
pcre-8.44-r0
pcre2-10.35-r0
php7-7.3.22-r0
php7-common-7.3.22-r0
php7-fileinfo-7.3.22-r0
php7-fpm-7.3.22-r0
php7-json-7.3.22-r0
php7-mbstring-7.3.22-r0
php7-openssl-7.3.22-r0
php7-session-7.3.22-r0
php7-simplexml-7.3.22-r0
php7-xml-7.3.22-r0
php7-xmlwriter-7.3.22-r0
popt-1.16-r7
procps-3.3.16-r0
readline-8.0.4-r0
scanelf-1.2.6-r0
shadow-4.8.1-r0
ssl_client-1.31.1-r19
tzdata-2020a-r0
xz-5.2.5-r0
xz-libs-5.2.5-r0
zlib-1.2.11-r3

View File

@ -2,108 +2,62 @@
# project information
project_name: snapdrop
project_url: "https://github.com/snapdrop/snapdrop"
project_logo: "https://raw.githubusercontent.com/snapdrop/snapdrop/master/client/images/logo_transparent_512x512.png"
project_url: "https://github.com/RobinLinus/snapdrop"
project_logo: ""
project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) A local file sharing in your browser. Inspired by Apple's Airdrop."
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_categories: "File Sharing"
project_blurb_optional_extras_enabled: false
project_blurb_optional_extras: []
# deprecation information
project_deprecation_status: true
project_deprecation_message: "Consider switching to https://github.com/linuxserver/docker-pairdrop for similar functionality"
# supported architectures
available_architectures:
- {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- {arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
- { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
- { arch: "{{ arch_armhf }}", tag: "arm32v7-latest"}
# development version
development_versions: false
development_versions_items:
# container parameters
common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}"
param_usage_include_vols: true
param_volumes:
- {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Persistent config files"}
param_usage_include_net: false
param_usage_include_env: true
param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
param_usage_include_ports: true
param_ports:
- {external_port: "80", internal_port: "80", port_desc: "http gui"}
- {external_port: "443", internal_port: "443", port_desc: "https gui"}
- { external_port: "80", internal_port: "80", port_desc: "http gui" }
- { external_port: "443", internal_port: "443", port_desc: "https gui" }
# optional container parameters
opt_param_usage_include_env: false
opt_param_env_vars:
opt_param_usage_include_vols: false
opt_param_volumes:
opt_param_usage_include_ports: false
opt_param_ports:
opt_param_device_map: false
opt_param_devices:
opt_cap_add_param: false
opt_cap_add_param_vars:
optional_block_1: false
optional_block_1_items: ""
# application setup block
app_setup_block_enabled: true
app_setup_block: |
Webui is accessible at http://SERVERIP:PORT
app_setup_block_enabled: false
app_setup_block: ""
If only using locally, comment out the following line in /config/nginx/site-confs/default.conf for local discovery:
```
proxy_set_header X-Forwarded-for $remote_addr;
```
# init diagram
init_diagram: |
"snapdrop:latest": {
docker-mods
base {
fix-attr +\nlegacy cont-init
}
docker-mods -> base
legacy-services
custom services
init-services -> legacy-services
init-services -> custom services
custom services -> legacy-services
legacy-services -> ci-service-check
init-migrations -> init-adduser
init-nginx-end -> init-config
init-os-end -> init-config
init-config -> init-config-end
init-snapdrop-config -> init-config-end
init-os-end -> init-crontab-config
init-mods-end -> init-custom-files
init-config-end -> init-deprecate
base -> init-envfile
init-os-end -> init-folders
init-php -> init-keygen
base -> init-migrations
base -> init-mods
init-config-end -> init-mods
init-version-checks -> init-mods
init-mods -> init-mods-end
init-mods-package-install -> init-mods-end
init-mods -> init-mods-package-install
init-samples -> init-nginx
init-permissions -> init-nginx-end
base -> init-os-end
init-adduser -> init-os-end
init-envfile -> init-os-end
init-migrations -> init-os-end
init-keygen -> init-permissions
init-nginx -> init-php
init-folders -> init-samples
init-custom-files -> init-services
init-deprecate -> init-services
init-mods-end -> init-services
init-nginx-end -> init-snapdrop-config
init-config-end -> init-version-checks
init-services -> svc-cron
svc-cron -> legacy-services
init-services -> svc-nginx
svc-nginx -> legacy-services
init-services -> svc-php-fpm
svc-php-fpm -> legacy-services
init-services -> svc-snapdrop
svc-snapdrop -> legacy-services
}
Base Images: {
"baseimage-alpine-nginx:3.20" <- "baseimage-alpine:3.20"
}
"snapdrop:latest" <- Base Images
# changelog
changelogs:
- {date: "19.02.25:", desc: "Deprecate."}
- {date: "31.05.24:", desc: "Rebase to Alpine 3.20. Existing users should update their nginx confs to avoid http2 deprecation warnings."}
- {date: "06.02.24:", desc: "Existing users should update: site-confs/default.conf - Cleanup default site conf."}
- {date: "23.12.23:", desc: "Rebase to Alpine 3.19 with php 8.3."}
- {date: "25.05.23:", desc: "Rebase to Alpine 3.18, deprecate armhf."}
- {date: "13.04.23:", desc: "Move ssl.conf include to default.conf."}
- {date: "20.01.23:", desc: "Rebase to alpine 3.17 with php8.1."}
- {date: "20.08.22:", desc: "Rebasing to alpine 3.15 with php8. Restructure nginx configs ([see changes announcement](https://info.linuxserver.io/issues/2022-08-20-nginx-base))."}
- {date: "09.08.21:", desc: "Rebase to Alpine 3.14. Add real_ip block to nginx default site config."}
- {date: "15.09.20:", desc: "Initial Release."}
- { date: "15.09.20:", desc: "Initial Release." }

View File

@ -1,40 +0,0 @@
<html>
<head>
<title>Upgrade Required!</title>
<style>
body{
font-family: Helvetica, Arial, sans-serif;
}
.message{
width:440px;
padding:20px 40px;
margin:0 auto;
background-color:#f9f9f9;
border:1px solid #ddd;
color: #1e3d62;
}
center{
margin:40px 0;
}
h1{
font-size: 18px;
line-height: 26px;
}
p{
font-size: 12px;
}
a{
color: rgb(207, 48, 139);
}
</style>
</head>
<body>
<div class="message">
<h1>Upgrade Required!</h1>
<p>The application inside this image has been moved to a new folder.</p>
<p>You will need to update your <strong>/config/nginx/nginx.conf</strong> and <strong>/config/nginx/site-confs/default.conf</strong> in order for the application to work.</p>
<p>New config samples are located at <strong>/config/nginx/nginx.conf.sample</strong> and <strong>/config/nginx/site-confs/default.conf.sample</strong></p>
<p>Please review our announcement: <a target="_blank" href="https://info.linuxserver.io/issues/2022-08-20-nginx-base/">Significant changes to nginx based images</a></p>
</div>
</body>
</html>

28
root/defaults/default Normal file
View File

@ -0,0 +1,28 @@
server {
listen 80 default_server;
listen 443 ssl;
root /app/snapdrop/client;
index index.php index.html index.htm;
server_name _;
ssl_certificate /config/keys/cert.crt;
ssl_certificate_key /config/keys/cert.key;
client_max_body_size 0;
location / {
root /app/snapdrop/client;
index index.html index.htm;
}
location /server {
proxy_connect_timeout 300;
proxy_pass http://localhost:3000;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-for $remote_addr;
}
}

View File

@ -1,36 +0,0 @@
## Version 2024/07/16 - Changelog: https://github.com/linuxserver/docker-snapdrop/commits/master/root/defaults/nginx/site-confs/default.conf.sample
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
include /config/nginx/ssl.conf;
root /app/www/client;
index index.html;
location / {
# enable for basic auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
try_files $uri $uri/ /index.html;
}
location /server {
proxy_connect_timeout 300;
proxy_pass http://localhost:3000;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-for $remote_addr;
}
# deny access to .htaccess/.htpasswd files
location ~ /\.ht {
deny all;
}
}

View File

@ -0,0 +1,5 @@
#!/usr/bin/with-contenv bash
# permissions
chown -R abc:abc \
/config

View File

@ -1,17 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
echo '
╔════════════════════════════════════════════════════╗
╠════════════════════════════════════════════════════╣
║ ║
║ This image is deprecated. ║
║ We will not offer support for this image ║
║ and it will not be updated. ║
║ ║
╠════════════════════════════════════════════════════╣
╚════════════════════════════════════════════════════╝
Consider switching to https://github.com/linuxserver/docker-pairdrop for similar functionality
══════════════════════════════════════════════════════'

View File

@ -1 +0,0 @@
oneshot

View File

@ -1,6 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# permissions
lsiown -R abc:abc \
/config

View File

@ -1 +0,0 @@
oneshot

View File

@ -1 +0,0 @@
/etc/s6-overlay/s6-rc.d/init-snapdrop-config/run

View File

@ -1,7 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
cd /app/www/server || exit 1
exec \
s6-setuidgid abc /usr/bin/node index.js

View File

@ -1 +0,0 @@
longrun

View File

@ -0,0 +1,6 @@
#!/usr/bin/with-contenv bash
cd /app/snapdrop/server || exit
exec \
s6-setuidgid abc /usr/bin/node index.js

View File

@ -1,11 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
DEFAULT_CONF="/config/nginx/site-confs/default.conf"
OLD_ROOT="root /app/snapdrop/client;"
NEW_ROOT="root /app/www/client;"
if [[ -f "${DEFAULT_CONF}" ]] && grep -q "${OLD_ROOT}" "${DEFAULT_CONF}" 2>/dev/null; then
echo "updating root in ${DEFAULT_CONF}"
sed -i "s|${OLD_ROOT}|${NEW_ROOT}|" "${DEFAULT_CONF}"
fi