Skip to content

Commit

Permalink
feat(docker): Check for /app/config volume mount during setup (#826)
Browse files Browse the repository at this point in the history
  • Loading branch information
TheCatLady committed Feb 4, 2021
1 parent 035534e commit 1e5f88f
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ RUN yarn install --production --ignore-scripts --prefer-offline
RUN rm -rf src && \
rm -rf server

RUN touch config/DOCKER

RUN echo "{\"commitTag\": \"${COMMIT_TAG}\"}" > committag.json


Expand Down
18 changes: 18 additions & 0 deletions overseerr-api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1477,6 +1477,24 @@ paths:
example: 1.0.0
commitTag:
type: string
/status/appdata:
get:
summary: Get /app/data volume status
description: For Docker installs, returns whether or not the /app/data volume mount was configured properly. Always returns true for non-Docker installs.
security: []
tags:
- public
responses:
'200':
description: /app/data volume status
content:
application/json:
schema:
type: object
properties:
appData:
type: boolean
example: true
/settings/main:
get:
summary: Get main settings
Expand Down
7 changes: 7 additions & 0 deletions server/routes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import personRoutes from './person';
import collectionRoutes from './collection';
import { getAppVersion, getCommitTag } from '../utils/appVersion';
import serviceRoutes from './service';
import { appDataStatus } from '../utils/appDataVolume';

const router = Router();

Expand All @@ -27,6 +28,12 @@ router.get('/status', (req, res) => {
});
});

router.get('/status/appdata', (_req, res) => {
return res.status(200).json({
appData: appDataStatus(),
});
});

router.use('/user', isAuthenticated(Permission.MANAGE_USERS), user);
router.get('/settings/public', (_req, res) => {
const settings = getSettings();
Expand Down
8 changes: 8 additions & 0 deletions server/utils/appDataVolume.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { existsSync } from 'fs';
import path from 'path';

const DOCKER_PATH = path.join(__dirname, '../../config/DOCKER');

export const appDataStatus = (): boolean => {
return !existsSync(DOCKER_PATH);
};
41 changes: 41 additions & 0 deletions src/components/AppDataWarning/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import React from 'react';
import { defineMessages, useIntl } from 'react-intl';
import useSWR from 'swr';
import Alert from '../Common/Alert';

const messages = defineMessages({
dockerVolumeMissing: 'Docker Volume Mount Missing',
dockerVolumeMissingDescription:
'The <code>/app/config</code> volume mount was not configured properly. All data will be cleared when the container is stopped or restarted.',
});

const AppDataWarning: React.FC = () => {
const intl = useIntl();
const { data, error } = useSWR<{ appData: boolean }>(
'/api/v1/status/appdata'
);

if (!data && !error) {
return null;
}

if (!data) {
return null;
}

return (
<>
{!data.appData && (
<Alert title={intl.formatMessage(messages.dockerVolumeMissing)}>
{intl.formatMessage(messages.dockerVolumeMissingDescription, {
code: function code(msg) {
return <code className="bg-opacity-50">{msg}</code>;
},
})}
</Alert>
)}
</>
);
};

export default AppDataWarning;
2 changes: 2 additions & 0 deletions src/components/Setup/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import Badge from '../Common/Badge';
import LanguagePicker from '../Layout/LanguagePicker';
import PageTitle from '../Common/PageTitle';
import AppDataWarning from '../AppDataWarning';

const messages = defineMessages({
setup: 'Setup',
Expand Down Expand Up @@ -66,6 +67,7 @@ const Setup: React.FC = () => {
className="w-auto mx-auto mb-10 max-h-32"
alt="Logo"
/>
<AppDataWarning />
<nav className="relative z-50">
<ul
className="bg-gray-800 bg-opacity-50 border border-gray-600 divide-y divide-gray-600 rounded-md md:flex md:divide-y-0"
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locale/en.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{
"components.AppDataWarning.dockerVolumeMissing": "Docker Volume Mount Missing",
"components.AppDataWarning.dockerVolumeMissingDescription": "The <code>/app/config</code> volume mount was not configured properly. All data will be cleared when the container is stopped or restarted.",
"components.CollectionDetails.movies": "Movies",
"components.CollectionDetails.numberofmovies": "Number of Movies: {count}",
"components.CollectionDetails.overview": "Overview",
Expand Down

0 comments on commit 1e5f88f

Please sign in to comment.