Frequently Asked Questions (FAQ)

Below are some of the most commonly asked technical and development questions about the RDMC project, along with their answers. If you want to see general user faq then go to Frequently Asked Questions (FAQ)

Installation & Setup

1. How do I set up the development environment?

Clone the repository, activate your virtual environment, and install all dependencies including dev and docs extras:

git clone https://gitlab.gwdg.de/nfdixcs/a1-architecture/rdmc-prototype.git
venv\Scripts\Activate
python -m pip install ".[dev,docs]"

Then create a .env file from the .env.example before running the project.

2. Where do I find the example .env file?

An example configuration file is available directly on .env.example.

3. Do I need to create the .env file before running Docker, and why might the app fail to start?

Yes. The .env file must be created in the project root before running docker-compose up -d --build.

The most common cause of the application failing to start or not starting correctly in Docker is a missing or incomplete .env file. See Docker Setup for the full steps.

4. How do I run the project using Docker?

Make sure Docker is running on your system, then execute the following command in your terminal:

docker-compose up -d --build
5. How do I rebuild the documentation after making changes?
cd docs/0.6.0
make html

If changes are not reflecting, clean the build cache first:

rmdir /s /q build\doctrees && make html

Architecture & Apps

6. How is the Django project structured?

The project is split into three Django apps, each with a clear responsibility:

  • rdmc — core app, controls container lifecycle, metadata, and manifest generation

  • rdmc_organiser — manages the step-by-step container creation workflow and form logic

  • rdmc_publish — handles all publish-related logic (Zenodo, Dataverse, Search Portal, ePIC PID)

See Apps Overview for a full breakdown.

7. Which app should I modify for a specific feature?
  • Container or artifact logic → rdmc

  • Wizard steps, questions, or form fields → rdmc_organiser

  • Publishing, registry, or PID updates → rdmc_publish

APIs & Integrations

8. How does the Zenodo integration work internally?

The RDMC prototype communicates with a dedicated Zenodo API microservice. The flow is: OAuth2 authorize → token exchange → file upload → metadata upload. All calls go to https://api.nfdixcs.org/zenodo. See Zenodo Integration for endpoint details and code examples.

9. How does the Search Portal registration work?

After publishing, a POST request is sent to https://api.nfdixcs.org/registryservice/rdmcs with a JSON payload containing the container metadata, PID, and artifact details. See Search Portal for the full payload structure and field reference.

10. When is the ePIC PID created and updated?

The PID is automatically created when the container is sealed and updated when it is published. It is stored in the manifest.rdmc file and updated via the epic_handler in rdmc_publish/handlers/epic_pid.py.

11. Where is the PID stored?

The PID is saved directly inside the container’s manifest.rdmc file and can also be viewed at any time via the Handle Registry.

12. How do I add a new API endpoint to the Registry Service?

The Registry Service is a separate microservice. Its source code is on GitLab and the interactive API reference is at api.nfdixcs.org/registryservice/docs.

Logging

13. How do I add logging to a new function?

Use the @log_process decorator — it automatically logs start, success, and failure:

import logging
from RDMC_Proto.log_utils import log_process

logger = logging.getLogger('app')

@log_process("My Process Label")
def my_function(request):
    ...

Always use logging.getLogger('app') — never the django logger for app-level code.

14. Where are log files stored and how long are they kept?

Logs are written to LOG_DIR in daily files (rdmc.YYYY-MM-DD.log). User-specific logs go into a subfolder named after the user. Files older than 30 days are automatically deleted on each rotation.

15. Why is my function logging a warning instead of success?

The @log_process decorator logs a warning if the wrapped function returns None. Make sure your function explicitly returns a value.

Tags, Releases & Container Registry

16. How are new versions released?

Tags and releases are automatically created via the CI/CD pipeline using Semantic Versioning (X.Y.Z). Select Major, Minor, or Patch during the pipeline run and it handles the rest. See Tags & Releases for the full list of available versions and images.

17. How do I create an access token for the Container Registry?

Go to your GitLab profile → Access Tokens, create a token with read_registry and write_registry scopes, and save it securely. Use this token as the password when logging in with docker login.

18. How do I pull a specific version for local testing?

Login with your GitLab access token, then pull the desired tag:

docker login docker.gitlab.gwdg.de -u YOUR_USERNAME
docker pull docker.gitlab.gwdg.de/nfdixcs/a1-architecture/rdmc-prototype:vX.Y.Z

Contributing & Issues

19. How do I report a bug or propose a change?

Open an issue on the GitLab issue tracker. Follow the workflow: Create → Assign → Link to Merge Request → Review → Close. Check closed issues first to avoid duplicates. See Open Issues for details.