From af1394e665806226c88e3e4e4e0b4e97e909adda Mon Sep 17 00:00:00 2001
From: David Douard <david.douard@sdfa3.org>
Date: Fri, 16 Aug 2024 17:49:17 +0200
Subject: [PATCH] Migrate the build system to hatch

This allows especially to install the sources in editable mode from a
read-only directory. i.e. it allows to install it from sources in a
docker environment where the source directory is mounter read-only, for
example when running (docker based) integration tests using local sources.

We move static assets as proper package data (i.e. under swh/web/) for
easier packaging.
---
 .gitignore                                    |  12 ++---
 assets/config/webpack.config.development.js   |  14 ++---
 pyproject.toml                                |  51 +++++++++++++-----
 swh/web/settings/common.py                    |  16 ++++--
 .../web/static}/img/arrow-up-small.png        | Bin
 .../web/static}/img/icons/swh-logo-32x32.png  | Bin
 .../img/icons/swh-logo-archive-180x180.png    | Bin
 .../img/icons/swh-logo-archive-192x192.png    | Bin
 .../img/icons/swh-logo-archive-270x270.png    | Bin
 {static => swh/web/static}/img/logos/arch.png | Bin
 {static => swh/web/static}/img/logos/aur.png  | Bin
 .../web/static}/img/logos/bioconductor.png    | Bin
 .../web/static}/img/logos/bitbucket-hg.png    |   0
 .../web/static}/img/logos/bitbucket.png       | Bin
 .../web/static}/img/logos/bower.png           | Bin
 {static => swh/web/static}/img/logos/cgit.png | Bin
 .../web/static}/img/logos/conda.png           | Bin
 {static => swh/web/static}/img/logos/cpan.png | Bin
 {static => swh/web/static}/img/logos/cran.png | Bin
 .../web/static}/img/logos/crates.png          | Bin
 .../web/static}/img/logos/debian.png          | Bin
 .../web/static}/img/logos/dlang.png           | Bin
 .../web/static}/img/logos/elife.png           | Bin
 .../web/static}/img/logos/gitea.png           | Bin
 .../web/static}/img/logos/github.png          | Bin
 .../web/static}/img/logos/gitlab.png          | Bin
 .../web/static}/img/logos/gitorious.png       | Bin
 .../web/static}/img/logos/gitweb.png          | Bin
 {static => swh/web/static}/img/logos/gnu.png  | Bin
 {static => swh/web/static}/img/logos/gogs.png | Bin
 .../web/static}/img/logos/golang.png          | Bin
 .../web/static}/img/logos/googlecode.png      | Bin
 {static => swh/web/static}/img/logos/guix.png | Bin
 .../web/static}/img/logos/hackage.png         | Bin
 {static => swh/web/static}/img/logos/hal.png  | Bin
 .../web/static}/img/logos/heptapod.png        | Bin
 .../web/static}/img/logos/inria.jpg           | Bin
 {static => swh/web/static}/img/logos/ipol.png | Bin
 .../web/static}/img/logos/launchpad.png       | Bin
 .../web/static}/img/logos/maven.png           | Bin
 .../web/static}/img/logos/nixos.png           | Bin
 {static => swh/web/static}/img/logos/npm.png  | Bin
 {static => swh/web/static}/img/logos/opam.png | Bin
 .../web/static}/img/logos/packagist.png       | Bin
 .../web/static}/img/logos/pagure.png          | Bin
 .../web/static}/img/logos/phabricator.png     | Bin
 .../web/static}/img/logos/pubdev.png          | Bin
 .../web/static}/img/logos/puppet.png          | Bin
 {static => swh/web/static}/img/logos/pypi.png | Bin
 {static => swh/web/static}/img/logos/rpm.png  | Bin
 .../web/static}/img/logos/rubygems.png        | Bin
 .../web/static}/img/logos/sourceforge.png     | Bin
 .../web/static}/img/logos/zenodo.png          | Bin
 {static => swh/web/static}/img/swh-donor.png  | Bin
 .../web/static}/img/swh-logo-white.svg        |   0
 {static => swh/web/static}/img/swh-logo.png   | Bin
 {static => swh/web/static}/img/swh-logo.svg   |   0
 {static => swh/web/static}/img/swh-mirror.png | Bin
 .../web/static}/img/swh-spinner-small.gif     | Bin
 .../web/static}/img/swh-spinner.gif           | Bin
 {static => swh/web/static}/img/swh-vault.png  | Bin
 .../static}/json/highlightjs-languages.json   |   0
 .../web/static}/xml/swh-opensearch.xml        |   0
 63 files changed, 62 insertions(+), 31 deletions(-)
 rename {static => swh/web/static}/img/arrow-up-small.png (100%)
 rename {static => swh/web/static}/img/icons/swh-logo-32x32.png (100%)
 rename {static => swh/web/static}/img/icons/swh-logo-archive-180x180.png (100%)
 rename {static => swh/web/static}/img/icons/swh-logo-archive-192x192.png (100%)
 rename {static => swh/web/static}/img/icons/swh-logo-archive-270x270.png (100%)
 rename {static => swh/web/static}/img/logos/arch.png (100%)
 rename {static => swh/web/static}/img/logos/aur.png (100%)
 rename {static => swh/web/static}/img/logos/bioconductor.png (100%)
 rename {static => swh/web/static}/img/logos/bitbucket-hg.png (100%)
 rename {static => swh/web/static}/img/logos/bitbucket.png (100%)
 rename {static => swh/web/static}/img/logos/bower.png (100%)
 rename {static => swh/web/static}/img/logos/cgit.png (100%)
 rename {static => swh/web/static}/img/logos/conda.png (100%)
 rename {static => swh/web/static}/img/logos/cpan.png (100%)
 rename {static => swh/web/static}/img/logos/cran.png (100%)
 rename {static => swh/web/static}/img/logos/crates.png (100%)
 rename {static => swh/web/static}/img/logos/debian.png (100%)
 rename {static => swh/web/static}/img/logos/dlang.png (100%)
 rename {static => swh/web/static}/img/logos/elife.png (100%)
 rename {static => swh/web/static}/img/logos/gitea.png (100%)
 rename {static => swh/web/static}/img/logos/github.png (100%)
 rename {static => swh/web/static}/img/logos/gitlab.png (100%)
 rename {static => swh/web/static}/img/logos/gitorious.png (100%)
 rename {static => swh/web/static}/img/logos/gitweb.png (100%)
 rename {static => swh/web/static}/img/logos/gnu.png (100%)
 rename {static => swh/web/static}/img/logos/gogs.png (100%)
 rename {static => swh/web/static}/img/logos/golang.png (100%)
 rename {static => swh/web/static}/img/logos/googlecode.png (100%)
 rename {static => swh/web/static}/img/logos/guix.png (100%)
 rename {static => swh/web/static}/img/logos/hackage.png (100%)
 rename {static => swh/web/static}/img/logos/hal.png (100%)
 rename {static => swh/web/static}/img/logos/heptapod.png (100%)
 rename {static => swh/web/static}/img/logos/inria.jpg (100%)
 rename {static => swh/web/static}/img/logos/ipol.png (100%)
 rename {static => swh/web/static}/img/logos/launchpad.png (100%)
 rename {static => swh/web/static}/img/logos/maven.png (100%)
 rename {static => swh/web/static}/img/logos/nixos.png (100%)
 rename {static => swh/web/static}/img/logos/npm.png (100%)
 rename {static => swh/web/static}/img/logos/opam.png (100%)
 rename {static => swh/web/static}/img/logos/packagist.png (100%)
 rename {static => swh/web/static}/img/logos/pagure.png (100%)
 rename {static => swh/web/static}/img/logos/phabricator.png (100%)
 rename {static => swh/web/static}/img/logos/pubdev.png (100%)
 rename {static => swh/web/static}/img/logos/puppet.png (100%)
 rename {static => swh/web/static}/img/logos/pypi.png (100%)
 rename {static => swh/web/static}/img/logos/rpm.png (100%)
 rename {static => swh/web/static}/img/logos/rubygems.png (100%)
 rename {static => swh/web/static}/img/logos/sourceforge.png (100%)
 rename {static => swh/web/static}/img/logos/zenodo.png (100%)
 rename {static => swh/web/static}/img/swh-donor.png (100%)
 rename {static => swh/web/static}/img/swh-logo-white.svg (100%)
 rename {static => swh/web/static}/img/swh-logo.png (100%)
 rename {static => swh/web/static}/img/swh-logo.svg (100%)
 rename {static => swh/web/static}/img/swh-mirror.png (100%)
 rename {static => swh/web/static}/img/swh-spinner-small.gif (100%)
 rename {static => swh/web/static}/img/swh-spinner.gif (100%)
 rename {static => swh/web/static}/img/swh-vault.png (100%)
 rename {static => swh/web/static}/json/highlightjs-languages.json (100%)
 rename {static => swh/web/static}/xml/swh-opensearch.xml (100%)

diff --git a/.gitignore b/.gitignore
index c10b97018..2590ee1c9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,12 +12,12 @@ docs/dev-info.md
 *.sqlite3*
 .directory
 node_modules/
-static/*.*
-static/js/
-static/css/
-static/fonts/
-static/jssources/
-static/img/thirdParty/
+swh/web/static/*.*
+swh/web/static/js/
+swh/web/static/css/
+swh/web/static/fonts/
+swh/web/static/jssources/
+swh/web/static/img/thirdParty/
 build/
 dist/
 package-lock.json
diff --git a/assets/config/webpack.config.development.js b/assets/config/webpack.config.development.js
index 64d48f13e..d3a0a900f 100644
--- a/assets/config/webpack.config.development.js
+++ b/assets/config/webpack.config.development.js
@@ -161,7 +161,7 @@ module.exports = {
   entry: bundles,
   // assets output configuration
   output: {
-    path: path.resolve('./static/'),
+    path: path.resolve('./swh/web/static/'),
     filename: 'js/[name].[contenthash].js',
     chunkFilename: 'js/[name].[contenthash].js',
     publicPath: publicPath,
@@ -363,7 +363,7 @@ module.exports = {
     }),
     // needed in order to use django_webpack_loader
     new BundleTracker({
-      path: './static/',
+      path: './swh/web/static/',
       filename: 'webpack-stats.json'
     }),
     // for generating the robots.txt file
@@ -390,23 +390,23 @@ module.exports = {
       patterns: [
         {
           from: path.resolve(nodeModules, 'pdfjs-dist/legacy/build/pdf.worker.min.mjs'),
-          to: path.resolve(repoRootPath, 'static/js/pdf.worker.min.js')
+          to: path.resolve(repoRootPath, 'swh/web/static/js/pdf.worker.min.js')
         },
         {
           from: path.resolve(nodeModules, 'mathjax/es5/output/chtml/fonts/woff-v2/**'),
-          to: path.resolve(repoRootPath, 'static/fonts/[name][ext]')
+          to: path.resolve(repoRootPath, 'swh/web/static/fonts/[name][ext]')
         },
         {
           from: path.resolve(nodeModules, 'mathjax/es5/input/tex/extensions/'),
-          to: path.resolve(repoRootPath, 'static/js/mathjax/input/tex/extensions/')
+          to: path.resolve(repoRootPath, 'swh/web/static/js/mathjax/input/tex/extensions/')
         },
         {
           from: path.resolve(nodeModules, 'mathjax/es5/input/mml/extensions/'),
-          to: path.resolve(repoRootPath, 'static/js/mathjax/input/mml/extensions/')
+          to: path.resolve(repoRootPath, 'swh/web/static/js/mathjax/input/mml/extensions/')
         },
         {
           from: path.resolve(nodeModules, 'mathjax/es5/sre/mathmaps/'),
-          to: path.resolve(repoRootPath, 'static/js/mathjax/sre/mathmaps/')
+          to: path.resolve(repoRootPath, 'swh/web/static/js/mathjax/sre/mathmaps/')
         }
       ]
     }),
diff --git a/pyproject.toml b/pyproject.toml
index 9fd738e0c..5cc351c32 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,14 +17,44 @@ classifiers = [
 ]
 dynamic = ["version", "dependencies", "optional-dependencies"]
 
-[tool.setuptools.packages.find]
-include = ["swh.*"]
+[build-system]
+requires = ["hatchling", "hatch-requirements-txt", "hatch-vcs", "hatch-build-scripts"]
+build-backend = "hatchling.build"
+
+[tool.hatch]
+[tool.hatch.build.targets.wheel]
+packages = ["swh"]
 
-[tool.setuptools.dynamic]
-dependencies = { file = ["requirements.txt", "requirements-swh.txt"] }
 
-[tool.setuptools.dynamic.optional-dependencies]
-testing = { file = ["requirements-test.txt"] }
+[tool.hatch.build.targets.sdist]
+exclude = [
+   "docs/_build",
+   "docs/apidoc",
+]
+
+[tool.hatch.version]
+source = "vcs"
+fallback-version = "0.0.1"
+
+[tool.hatch.metadata.hooks.requirements_txt]
+files = ["requirements.txt", "requirements-swh.txt"]
+
+[tool.hatch.metadata.hooks.requirements_txt.optional-dependencies]
+testing = ["requirements-test.txt"]
+
+# Note: the [[...]] syntax denotes an array of tables in toml, see
+# https://toml.io/en/v1.0.0#array-of-tables
+#[[tool.hatch.build.targets.wheel.hooks.build-scripts.scripts]]
+#commands = [
+#    "make build-webpack-prod"
+    #"make java",
+    #"cargo build --all-features --release",
+    #"sh -c 'ORC_USE_SYSTEM_LIBRARIES=1 cargo build --all-features --release'"
+#]
+#artifacts = [
+#    "webpack-stats.json",
+#]
+#out_dir = "java/target"
 
 [project.urls]
 "Homepage" = "https://gitlab.softwareheritage.org/swh/devel/swh-web"
@@ -33,13 +63,6 @@ testing = { file = ["requirements-test.txt"] }
 "Documentation" = "https://docs.softwareheritage.org/devel/swh-web/"
 "Source" = "https://gitlab.softwareheritage.org/swh/devel/swh-web.git"
 
-[build-system]
-requires = ["setuptools", "setuptools-scm"]
-build-backend = "setuptools.build_meta"
-
-[tool.setuptools_scm]
-fallback_version = "0.0.1"
-
 [tool.black]
 target-version = ['py310', 'py311', 'py312']
 exclude = 'swh/web/tests/resources/contents'
@@ -120,4 +143,4 @@ ignore = [
     "E704", # multiple statements on one line
     "W503" # line break before binary operator <https://github.com/psf/black/issues/52>
 ]
-max-line-length = 88
\ No newline at end of file
+max-line-length = 88
diff --git a/swh/web/settings/common.py b/swh/web/settings/common.py
index ce839d231..2d2f41474 100644
--- a/swh/web/settings/common.py
+++ b/swh/web/settings/common.py
@@ -140,8 +140,13 @@ TEMPLATES = [
     {
         "BACKEND": "django.template.backends.django.DjangoTemplates",
         "DIRS": SWH_APP_TEMPLATES,
-        "APP_DIRS": True,
+        # "APP_DIRS": True,
         "OPTIONS": {
+            # "debug": True,
+            "loaders": [
+                "django.template.loaders.filesystem.Loader",
+                "django.template.loaders.app_directories.Loader",
+            ],
             "context_processors": [
                 "django.template.context_processors.debug",
                 "django.template.context_processors.request",
@@ -201,20 +206,23 @@ USE_TZ = True
 
 STATIC_URL = "/static/"
 # static folder location when swh-web has been installed with pip
-STATIC_DIR = os.path.join(sys.prefix, "share/swh/web/static")
+STATIC_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../static"))
+if not os.path.exists(STATIC_DIR):
+    STATIC_DIR = os.path.join(sys.prefix, "share/swh/web/static")
 if not os.path.exists(STATIC_DIR):
     # static folder location when swh-web has been installed with "pip --user"
     STATIC_DIR = os.path.join(site.getuserbase(), "share/swh/web/static")
 
 if not os.path.exists(STATIC_DIR):
+    warnings.warn("Get to run the dirty look-for-static code here")
     ROOT_DIR = Path(PROJECT_DIR).absolute()
-    while not (ROOT_DIR / "static").is_dir():
+    while not (ROOT_DIR / "swh/web/static").is_dir():
         ROOT_DIR = ROOT_DIR = ROOT_DIR.parent
         if (ROOT_DIR / ".git").is_dir() or (ROOT_DIR / "pyproject.toml").is_file():
             break
         if ROOT_DIR == ROOT_DIR.parent:
             break
-    STATIC_DIR = str(ROOT_DIR / "static")
+    STATIC_DIR = str(ROOT_DIR / "swh/web/static")
 
 if not os.path.exists(STATIC_DIR):
     warnings.warn(
diff --git a/static/img/arrow-up-small.png b/swh/web/static/img/arrow-up-small.png
similarity index 100%
rename from static/img/arrow-up-small.png
rename to swh/web/static/img/arrow-up-small.png
diff --git a/static/img/icons/swh-logo-32x32.png b/swh/web/static/img/icons/swh-logo-32x32.png
similarity index 100%
rename from static/img/icons/swh-logo-32x32.png
rename to swh/web/static/img/icons/swh-logo-32x32.png
diff --git a/static/img/icons/swh-logo-archive-180x180.png b/swh/web/static/img/icons/swh-logo-archive-180x180.png
similarity index 100%
rename from static/img/icons/swh-logo-archive-180x180.png
rename to swh/web/static/img/icons/swh-logo-archive-180x180.png
diff --git a/static/img/icons/swh-logo-archive-192x192.png b/swh/web/static/img/icons/swh-logo-archive-192x192.png
similarity index 100%
rename from static/img/icons/swh-logo-archive-192x192.png
rename to swh/web/static/img/icons/swh-logo-archive-192x192.png
diff --git a/static/img/icons/swh-logo-archive-270x270.png b/swh/web/static/img/icons/swh-logo-archive-270x270.png
similarity index 100%
rename from static/img/icons/swh-logo-archive-270x270.png
rename to swh/web/static/img/icons/swh-logo-archive-270x270.png
diff --git a/static/img/logos/arch.png b/swh/web/static/img/logos/arch.png
similarity index 100%
rename from static/img/logos/arch.png
rename to swh/web/static/img/logos/arch.png
diff --git a/static/img/logos/aur.png b/swh/web/static/img/logos/aur.png
similarity index 100%
rename from static/img/logos/aur.png
rename to swh/web/static/img/logos/aur.png
diff --git a/static/img/logos/bioconductor.png b/swh/web/static/img/logos/bioconductor.png
similarity index 100%
rename from static/img/logos/bioconductor.png
rename to swh/web/static/img/logos/bioconductor.png
diff --git a/static/img/logos/bitbucket-hg.png b/swh/web/static/img/logos/bitbucket-hg.png
similarity index 100%
rename from static/img/logos/bitbucket-hg.png
rename to swh/web/static/img/logos/bitbucket-hg.png
diff --git a/static/img/logos/bitbucket.png b/swh/web/static/img/logos/bitbucket.png
similarity index 100%
rename from static/img/logos/bitbucket.png
rename to swh/web/static/img/logos/bitbucket.png
diff --git a/static/img/logos/bower.png b/swh/web/static/img/logos/bower.png
similarity index 100%
rename from static/img/logos/bower.png
rename to swh/web/static/img/logos/bower.png
diff --git a/static/img/logos/cgit.png b/swh/web/static/img/logos/cgit.png
similarity index 100%
rename from static/img/logos/cgit.png
rename to swh/web/static/img/logos/cgit.png
diff --git a/static/img/logos/conda.png b/swh/web/static/img/logos/conda.png
similarity index 100%
rename from static/img/logos/conda.png
rename to swh/web/static/img/logos/conda.png
diff --git a/static/img/logos/cpan.png b/swh/web/static/img/logos/cpan.png
similarity index 100%
rename from static/img/logos/cpan.png
rename to swh/web/static/img/logos/cpan.png
diff --git a/static/img/logos/cran.png b/swh/web/static/img/logos/cran.png
similarity index 100%
rename from static/img/logos/cran.png
rename to swh/web/static/img/logos/cran.png
diff --git a/static/img/logos/crates.png b/swh/web/static/img/logos/crates.png
similarity index 100%
rename from static/img/logos/crates.png
rename to swh/web/static/img/logos/crates.png
diff --git a/static/img/logos/debian.png b/swh/web/static/img/logos/debian.png
similarity index 100%
rename from static/img/logos/debian.png
rename to swh/web/static/img/logos/debian.png
diff --git a/static/img/logos/dlang.png b/swh/web/static/img/logos/dlang.png
similarity index 100%
rename from static/img/logos/dlang.png
rename to swh/web/static/img/logos/dlang.png
diff --git a/static/img/logos/elife.png b/swh/web/static/img/logos/elife.png
similarity index 100%
rename from static/img/logos/elife.png
rename to swh/web/static/img/logos/elife.png
diff --git a/static/img/logos/gitea.png b/swh/web/static/img/logos/gitea.png
similarity index 100%
rename from static/img/logos/gitea.png
rename to swh/web/static/img/logos/gitea.png
diff --git a/static/img/logos/github.png b/swh/web/static/img/logos/github.png
similarity index 100%
rename from static/img/logos/github.png
rename to swh/web/static/img/logos/github.png
diff --git a/static/img/logos/gitlab.png b/swh/web/static/img/logos/gitlab.png
similarity index 100%
rename from static/img/logos/gitlab.png
rename to swh/web/static/img/logos/gitlab.png
diff --git a/static/img/logos/gitorious.png b/swh/web/static/img/logos/gitorious.png
similarity index 100%
rename from static/img/logos/gitorious.png
rename to swh/web/static/img/logos/gitorious.png
diff --git a/static/img/logos/gitweb.png b/swh/web/static/img/logos/gitweb.png
similarity index 100%
rename from static/img/logos/gitweb.png
rename to swh/web/static/img/logos/gitweb.png
diff --git a/static/img/logos/gnu.png b/swh/web/static/img/logos/gnu.png
similarity index 100%
rename from static/img/logos/gnu.png
rename to swh/web/static/img/logos/gnu.png
diff --git a/static/img/logos/gogs.png b/swh/web/static/img/logos/gogs.png
similarity index 100%
rename from static/img/logos/gogs.png
rename to swh/web/static/img/logos/gogs.png
diff --git a/static/img/logos/golang.png b/swh/web/static/img/logos/golang.png
similarity index 100%
rename from static/img/logos/golang.png
rename to swh/web/static/img/logos/golang.png
diff --git a/static/img/logos/googlecode.png b/swh/web/static/img/logos/googlecode.png
similarity index 100%
rename from static/img/logos/googlecode.png
rename to swh/web/static/img/logos/googlecode.png
diff --git a/static/img/logos/guix.png b/swh/web/static/img/logos/guix.png
similarity index 100%
rename from static/img/logos/guix.png
rename to swh/web/static/img/logos/guix.png
diff --git a/static/img/logos/hackage.png b/swh/web/static/img/logos/hackage.png
similarity index 100%
rename from static/img/logos/hackage.png
rename to swh/web/static/img/logos/hackage.png
diff --git a/static/img/logos/hal.png b/swh/web/static/img/logos/hal.png
similarity index 100%
rename from static/img/logos/hal.png
rename to swh/web/static/img/logos/hal.png
diff --git a/static/img/logos/heptapod.png b/swh/web/static/img/logos/heptapod.png
similarity index 100%
rename from static/img/logos/heptapod.png
rename to swh/web/static/img/logos/heptapod.png
diff --git a/static/img/logos/inria.jpg b/swh/web/static/img/logos/inria.jpg
similarity index 100%
rename from static/img/logos/inria.jpg
rename to swh/web/static/img/logos/inria.jpg
diff --git a/static/img/logos/ipol.png b/swh/web/static/img/logos/ipol.png
similarity index 100%
rename from static/img/logos/ipol.png
rename to swh/web/static/img/logos/ipol.png
diff --git a/static/img/logos/launchpad.png b/swh/web/static/img/logos/launchpad.png
similarity index 100%
rename from static/img/logos/launchpad.png
rename to swh/web/static/img/logos/launchpad.png
diff --git a/static/img/logos/maven.png b/swh/web/static/img/logos/maven.png
similarity index 100%
rename from static/img/logos/maven.png
rename to swh/web/static/img/logos/maven.png
diff --git a/static/img/logos/nixos.png b/swh/web/static/img/logos/nixos.png
similarity index 100%
rename from static/img/logos/nixos.png
rename to swh/web/static/img/logos/nixos.png
diff --git a/static/img/logos/npm.png b/swh/web/static/img/logos/npm.png
similarity index 100%
rename from static/img/logos/npm.png
rename to swh/web/static/img/logos/npm.png
diff --git a/static/img/logos/opam.png b/swh/web/static/img/logos/opam.png
similarity index 100%
rename from static/img/logos/opam.png
rename to swh/web/static/img/logos/opam.png
diff --git a/static/img/logos/packagist.png b/swh/web/static/img/logos/packagist.png
similarity index 100%
rename from static/img/logos/packagist.png
rename to swh/web/static/img/logos/packagist.png
diff --git a/static/img/logos/pagure.png b/swh/web/static/img/logos/pagure.png
similarity index 100%
rename from static/img/logos/pagure.png
rename to swh/web/static/img/logos/pagure.png
diff --git a/static/img/logos/phabricator.png b/swh/web/static/img/logos/phabricator.png
similarity index 100%
rename from static/img/logos/phabricator.png
rename to swh/web/static/img/logos/phabricator.png
diff --git a/static/img/logos/pubdev.png b/swh/web/static/img/logos/pubdev.png
similarity index 100%
rename from static/img/logos/pubdev.png
rename to swh/web/static/img/logos/pubdev.png
diff --git a/static/img/logos/puppet.png b/swh/web/static/img/logos/puppet.png
similarity index 100%
rename from static/img/logos/puppet.png
rename to swh/web/static/img/logos/puppet.png
diff --git a/static/img/logos/pypi.png b/swh/web/static/img/logos/pypi.png
similarity index 100%
rename from static/img/logos/pypi.png
rename to swh/web/static/img/logos/pypi.png
diff --git a/static/img/logos/rpm.png b/swh/web/static/img/logos/rpm.png
similarity index 100%
rename from static/img/logos/rpm.png
rename to swh/web/static/img/logos/rpm.png
diff --git a/static/img/logos/rubygems.png b/swh/web/static/img/logos/rubygems.png
similarity index 100%
rename from static/img/logos/rubygems.png
rename to swh/web/static/img/logos/rubygems.png
diff --git a/static/img/logos/sourceforge.png b/swh/web/static/img/logos/sourceforge.png
similarity index 100%
rename from static/img/logos/sourceforge.png
rename to swh/web/static/img/logos/sourceforge.png
diff --git a/static/img/logos/zenodo.png b/swh/web/static/img/logos/zenodo.png
similarity index 100%
rename from static/img/logos/zenodo.png
rename to swh/web/static/img/logos/zenodo.png
diff --git a/static/img/swh-donor.png b/swh/web/static/img/swh-donor.png
similarity index 100%
rename from static/img/swh-donor.png
rename to swh/web/static/img/swh-donor.png
diff --git a/static/img/swh-logo-white.svg b/swh/web/static/img/swh-logo-white.svg
similarity index 100%
rename from static/img/swh-logo-white.svg
rename to swh/web/static/img/swh-logo-white.svg
diff --git a/static/img/swh-logo.png b/swh/web/static/img/swh-logo.png
similarity index 100%
rename from static/img/swh-logo.png
rename to swh/web/static/img/swh-logo.png
diff --git a/static/img/swh-logo.svg b/swh/web/static/img/swh-logo.svg
similarity index 100%
rename from static/img/swh-logo.svg
rename to swh/web/static/img/swh-logo.svg
diff --git a/static/img/swh-mirror.png b/swh/web/static/img/swh-mirror.png
similarity index 100%
rename from static/img/swh-mirror.png
rename to swh/web/static/img/swh-mirror.png
diff --git a/static/img/swh-spinner-small.gif b/swh/web/static/img/swh-spinner-small.gif
similarity index 100%
rename from static/img/swh-spinner-small.gif
rename to swh/web/static/img/swh-spinner-small.gif
diff --git a/static/img/swh-spinner.gif b/swh/web/static/img/swh-spinner.gif
similarity index 100%
rename from static/img/swh-spinner.gif
rename to swh/web/static/img/swh-spinner.gif
diff --git a/static/img/swh-vault.png b/swh/web/static/img/swh-vault.png
similarity index 100%
rename from static/img/swh-vault.png
rename to swh/web/static/img/swh-vault.png
diff --git a/static/json/highlightjs-languages.json b/swh/web/static/json/highlightjs-languages.json
similarity index 100%
rename from static/json/highlightjs-languages.json
rename to swh/web/static/json/highlightjs-languages.json
diff --git a/static/xml/swh-opensearch.xml b/swh/web/static/xml/swh-opensearch.xml
similarity index 100%
rename from static/xml/swh-opensearch.xml
rename to swh/web/static/xml/swh-opensearch.xml
-- 
GitLab