Branch Cleanup
This commit is contained in:
parent
3941e3f92e
commit
d859e1952c
70
.ci/Jenkinsfile
vendored
Normal file
70
.ci/Jenkinsfile
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
pipeline {
|
||||
|
||||
agent any
|
||||
|
||||
environment {
|
||||
DJANGO_SETTINGS_MODULE = "solawi_platform.settings"
|
||||
SOLAWI_SUITE_SECRET_KEY = credentials('SOLAWI_SUITE_SECRET_KEY')
|
||||
ROBOT_HEADLESS = "yes"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Submodules') {
|
||||
steps {
|
||||
sh 'git submodule update --init --recursive --depth=1 documentation'
|
||||
}
|
||||
}
|
||||
stage('Install') {
|
||||
steps {
|
||||
sh 'poetry install --without prod --sync'
|
||||
}
|
||||
}
|
||||
stage('Prepare 3rd Party Libs') {
|
||||
steps {
|
||||
sh '(cd 3rdparty; yarn install)'
|
||||
}
|
||||
}
|
||||
stage('Prepare Documentation') {
|
||||
steps {
|
||||
sh '(cd documentation; poetry run mkdocs build)'
|
||||
}
|
||||
}
|
||||
stage('Prepare Test') {
|
||||
steps {
|
||||
sh 'poetry run manage.py migrate --no-input'
|
||||
sh 'poetry run manage.py collectstatic --no-input'
|
||||
}
|
||||
}
|
||||
stage('Unit Test') {
|
||||
steps {
|
||||
sh 'poetry run manage.py test'
|
||||
}
|
||||
}
|
||||
/* At this moment, the Build Server cannot execute browsers
|
||||
stage('Prepare Integration Test') {
|
||||
steps {
|
||||
sh 'poetry run rfbrowser init'
|
||||
}
|
||||
}
|
||||
stage('Integration Test') {
|
||||
steps {
|
||||
sh 'poetry run robot -A SystemTest/robot.args.conf -e manual SystemTest/TestCases'
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
post {
|
||||
success {
|
||||
deleteDir()
|
||||
}
|
||||
always {
|
||||
withCredentials([string(credentialsId: 'solawi-suite-notification-email', variable: 'EMAIL')]) {
|
||||
mail to: '$EMAIL',
|
||||
subject: "[${currentBuild.fullDisplayName}] ${currentBuild.currentResult}",
|
||||
body: "Duration: ${currentBuild.durationString} / Jenkins URL: ${env.BUILD_URL}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
155
.gitignore
vendored
Normal file
155
.gitignore
vendored
Normal file
@ -0,0 +1,155 @@
|
||||
uat-test-results/
|
||||
.pabotsuitenames
|
||||
allure-report/
|
||||
|
||||
_compiled_static_files/
|
||||
!_compiled_static_files/.gitkeep
|
||||
|
||||
dumpdata.json
|
||||
|
||||
_email/
|
||||
!_email/.gitkeep
|
||||
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
.idea/**/aws.xml
|
||||
.idea/**/contentModel.xml
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
cmake-build-*/
|
||||
.idea/**/mongoSettings.xml
|
||||
*.iws
|
||||
out/
|
||||
.idea_modules/
|
||||
atlassian-ide-plugin.xml
|
||||
.idea/replstate.xml
|
||||
.idea/sonarlint/
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
.idea/httpRequests
|
||||
.idea/caches/build_file_checksums.ser
|
||||
*~
|
||||
.fuse_hidden*
|
||||
.directory
|
||||
.Trash-*
|
||||
.nfs*
|
||||
*.log
|
||||
*.pot
|
||||
*.pyc
|
||||
__pycache__/
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
media
|
||||
Thumbs.db
|
||||
Thumbs.db:encryptable
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
*.stackdump
|
||||
[Dd]esktop.ini
|
||||
$RECYCLE.BIN/
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
*.lnk
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
Icon
|
||||
._*
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
*.manifest
|
||||
*.spec
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
*.mo
|
||||
instance/
|
||||
.webassets-cache
|
||||
.scrapy
|
||||
docs/_build/
|
||||
.pybuilder/
|
||||
target/
|
||||
.ipynb_checkpoints
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
.pdm.toml
|
||||
__pypackages__/
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
*.sage.py
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
.spyderproject
|
||||
.spyproject
|
||||
.ropeproject
|
||||
/site
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
.pyre/
|
||||
.pytype/
|
||||
cython_debug/
|
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
[submodule "solawi_platform/production_settings"]
|
||||
path = solawi_platform/production_settings
|
||||
url = igit@git.codebau.dev:solawi-suite/solawi-suite-production-settings.git
|
||||
[submodule "documentation"]
|
||||
path = documentation
|
||||
url = igit@git.codebau.dev:solawi-suite/documentation.git
|
8
.idea/.gitignore
vendored
Normal file
8
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
12
.idea/dataSources.xml
Normal file
12
.idea/dataSources.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="db.sqlite3" uuid="a71f7656-d5f2-45c5-a96b-d0ac533486fa">
|
||||
<driver-ref>sqlite.xerial</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/db.sqlite3</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
28
.idea/jsonSchemas.xml
Normal file
28
.idea/jsonSchemas.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JsonSchemaMappingsProjectConfiguration">
|
||||
<state>
|
||||
<map>
|
||||
<entry key="MkDocs Configuration 1.0">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="name" value="MkDocs Configuration 1.0" />
|
||||
<option name="relativePathToSchema" value="https://json.schemastore.org/mkdocs-1.0.json" />
|
||||
<option name="applicationDefined" value="true" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="path" value="documentation/mkdocs.dev.yml" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="path" value="documentation/mkdocs.yml" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</state>
|
||||
</component>
|
||||
</project>
|
7
.idea/misc.xml
Normal file
7
.idea/misc.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Poetry (platform)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Poetry (platform) (2)" project-jdk-type="Python SDK" />
|
||||
</project>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/platform.iml" filepath="$PROJECT_DIR$/.idea/platform.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
23
.idea/platform.iml
Normal file
23
.idea/platform.iml
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="django" name="Django">
|
||||
<configuration>
|
||||
<option name="rootFolder" value="$MODULE_DIR$" />
|
||||
<option name="settingsModule" value="solawi_platform/settings.py" />
|
||||
<option name="manageScript" value="manage.py" />
|
||||
<option name="environment" value="<map/>" />
|
||||
<option name="doNotUseTestRunner" value="false" />
|
||||
<option name="trackFilePattern" value="" />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Poetry (platform) (2)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="TemplatesService">
|
||||
<option name="TEMPLATE_CONFIGURATION" value="Django" />
|
||||
</component>
|
||||
</module>
|
27
.idea/runConfigurations/All_Tests.xml
Normal file
27
.idea/runConfigurations/All_Tests.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="All Tests" type="DjangoTestsConfigurationType">
|
||||
<module name="platform" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="DJANGO_SELENIUM_HEADLESS" value="0" />
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="SE_AVOID_STATS" value="true" />
|
||||
<env name="SOLAWI_SUITE_SECRET_KEY" value="0x3739d20117be06f317d31bf30296b563e37a1a5ef6299a0e920675288f920627" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="$USER_HOME$/Library/Caches/pypoetry/virtualenvs/platform-SLbylcYK-py3.12/bin/python" />
|
||||
<option name="SDK_NAME" value="Poetry (platform)" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="TARGET" value="" />
|
||||
<option name="SETTINGS_FILE" value="" />
|
||||
<option name="CUSTOM_SETTINGS" value="false" />
|
||||
<option name="USE_OPTIONS" value="false" />
|
||||
<option name="OPTIONS" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
5
.idea/runConfigurations/Frontend.xml
Normal file
5
.idea/runConfigurations/Frontend.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Frontend" type="JavascriptDebugType" uri="http://127.0.0.1:8000/" useFirstLineBreakpoints="true">
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
30
.idea/runConfigurations/Solawi_Platform.xml
Normal file
30
.idea/runConfigurations/Solawi_Platform.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Solawi Platform" type="Python.DjangoServer" factoryName="Django server">
|
||||
<module name="platform" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="solawi_platform.settings" />
|
||||
<env name="SE_AVOID_STATS" value="true" />
|
||||
<env name="SOLAWI_SUITE_SECRET_KEY" value="0x3739d20117be06f317d31bf30296b563e37a1a5ef6299a0e920675288f920627" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="SDK_NAME" value="Poetry (platform) (2)" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="launchJavascriptDebuger" value="false" />
|
||||
<option name="port" value="8000" />
|
||||
<option name="host" value="localhost" />
|
||||
<option name="additionalOptions" value="" />
|
||||
<option name="browserUrl" value="" />
|
||||
<option name="runTestServer" value="false" />
|
||||
<option name="runNoReload" value="false" />
|
||||
<option name="useCustomRunCommand" value="false" />
|
||||
<option name="customRunCommand" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
30
.idea/runConfigurations/Solawi_Platform__no_debug_.xml
Normal file
30
.idea/runConfigurations/Solawi_Platform__no_debug_.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Solawi Platform (no debug)" type="Python.DjangoServer" factoryName="Django server">
|
||||
<module name="platform" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="solawi_platform.settings" />
|
||||
<env name="SE_AVOID_STATS" value="true" />
|
||||
<env name="SOLAWI_SUITE_SECRET_KEY" value="0x3739d20117be06f317d31bf30296b563e37a1a5ef6299a0e920675288f920627" />
|
||||
<env name="SOLAWI_SUITE_DEBUG" value="0" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="launchJavascriptDebuger" value="false" />
|
||||
<option name="port" value="8000" />
|
||||
<option name="host" value="localhost" />
|
||||
<option name="additionalOptions" value="" />
|
||||
<option name="browserUrl" value="" />
|
||||
<option name="runTestServer" value="false" />
|
||||
<option name="runNoReload" value="false" />
|
||||
<option name="useCustomRunCommand" value="false" />
|
||||
<option name="customRunCommand" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
@ -0,0 +1,27 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="true" type="DjangoTestsConfigurationType">
|
||||
<module name="platform" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="SE_AVOID_STATS" value="true" />
|
||||
<env name="DJANGO_SELENIUM_HEADLESS" value="0" />
|
||||
<env name="SOLAWI_SUITE_SECRET_KEY" value="0x3739d20117be06f317d31bf30296b563e37a1a5ef6299a0e920675288f920627" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="$USER_HOME$/AppData/Local/pypoetry/Cache/virtualenvs/platform-eQqOmOVw-py3.12/Scripts/python.exe" />
|
||||
<option name="SDK_NAME" value="Poetry (platform)" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="TARGET" value="" />
|
||||
<option name="SETTINGS_FILE" value="" />
|
||||
<option name="CUSTOM_SETTINGS" value="false" />
|
||||
<option name="USE_OPTIONS" value="false" />
|
||||
<option name="OPTIONS" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
@ -0,0 +1,25 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="true" type="RobotRunConfiguration" factoryName="RobotRunConfiguration">
|
||||
<module name="platform" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$Projectpath$" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="" />
|
||||
<option name="PARAMETERS" value="-A SystemTest/robot.args.conf" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="true" />
|
||||
<option name="MODULE_MODE" value="false" />
|
||||
<option name="REDIRECT_INPUT" value="false" />
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
8
.idea/vcs.xml
Normal file
8
.idea/vcs.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/documentation" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/solawi_platform/production_settings" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
4
3rdparty/.gitattributes
vendored
Normal file
4
3rdparty/.gitattributes
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
/.yarn/** linguist-vendored
|
||||
/.yarn/releases/* binary
|
||||
/.yarn/plugins/**/* binary
|
||||
/.pnp.* binary linguist-generated
|
15
3rdparty/.gitignore
vendored
Normal file
15
3rdparty/.gitignore
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
|
||||
node_modules/
|
||||
|
||||
# Swap the comments on the following lines if you wish to use zero-installs
|
||||
# In that case, don't forget to run `yarn config set enableGlobalCache false`!
|
||||
# Documentation here: https://yarnpkg.com/features/caching#zero-installs
|
||||
|
||||
#!.yarn/cache
|
||||
.pnp.*
|
893
3rdparty/.yarn/releases/yarn-4.1.0.cjs
vendored
Executable file
893
3rdparty/.yarn/releases/yarn-4.1.0.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
5
3rdparty/.yarnrc.yml
vendored
Normal file
5
3rdparty/.yarnrc.yml
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
enableTelemetry: false
|
||||
|
||||
nodeLinker: node-modules
|
||||
|
||||
yarnPath: .yarn/releases/yarn-4.1.0.cjs
|
3
3rdparty/README.md
vendored
Normal file
3
3rdparty/README.md
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# 3rdparty
|
||||
|
||||
3rd Party Libs für das solawi-suite-System
|
11
3rdparty/package.json
vendored
Normal file
11
3rdparty/package.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "3rdparty",
|
||||
"packageManager": "yarn@4.1.0",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.5.1",
|
||||
"@simplewebauthn/browser": "^9.0.1",
|
||||
"bootstrap": "5.3.3",
|
||||
"moment": "^2.30.1",
|
||||
"reveal.js": "^5.0.5"
|
||||
}
|
||||
}
|
64
3rdparty/yarn.lock
vendored
Normal file
64
3rdparty/yarn.lock
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
# This file is generated by running "yarn install" inside your project.
|
||||
# Manual changes might be lost - proceed with caution!
|
||||
|
||||
__metadata:
|
||||
version: 8
|
||||
cacheKey: 10c0
|
||||
|
||||
"3rdparty@workspace:.":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "3rdparty@workspace:."
|
||||
dependencies:
|
||||
"@fortawesome/fontawesome-free": "npm:^6.5.1"
|
||||
"@simplewebauthn/browser": "npm:^9.0.1"
|
||||
bootstrap: "npm:5.3.3"
|
||||
moment: "npm:^2.30.1"
|
||||
reveal.js: "npm:^5.0.5"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@fortawesome/fontawesome-free@npm:^6.5.1":
|
||||
version: 6.5.1
|
||||
resolution: "@fortawesome/fontawesome-free@npm:6.5.1"
|
||||
checksum: 10c0/dc359ede1ddfc6d91915345143008420001c56b164a6fe95d81bcca631eecca41009bfacf794d55bdb9d927c112119ce90a11cb4f576a815ed69ec681e5eb824
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@simplewebauthn/browser@npm:^9.0.1":
|
||||
version: 9.0.1
|
||||
resolution: "@simplewebauthn/browser@npm:9.0.1"
|
||||
dependencies:
|
||||
"@simplewebauthn/types": "npm:^9.0.1"
|
||||
checksum: 10c0/141f3f55d99ad2b4dcf697026d2470fa10b65a36286b616ead71b56ddd5636c30eb001599d27c2509a87c93def6636a2c7081ae362910268b78733a676af3ebf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@simplewebauthn/types@npm:^9.0.1":
|
||||
version: 9.0.1
|
||||
resolution: "@simplewebauthn/types@npm:9.0.1"
|
||||
checksum: 10c0/397f079ac029ada1413d6001850e3b49f99297a9933822758bdca9c47c36d6558e1dc81682725e0b03c501551c94fea040cead76883dcd2bb3a34b32984900f5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"bootstrap@npm:5.3.3":
|
||||
version: 5.3.3
|
||||
resolution: "bootstrap@npm:5.3.3"
|
||||
peerDependencies:
|
||||
"@popperjs/core": ^2.11.8
|
||||
checksum: 10c0/bb68ca7b763977b9cce40cb5b8c676ae19a716d2f5d15009fa7bdbcec9dea426968e3cb748fbed7592fbf10edd7c749aea841c2920996a7c1aa5e0a6e2d4c2ad
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"moment@npm:^2.30.1":
|
||||
version: 2.30.1
|
||||
resolution: "moment@npm:2.30.1"
|
||||
checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"reveal.js@npm:^5.0.5":
|
||||
version: 5.0.5
|
||||
resolution: "reveal.js@npm:5.0.5"
|
||||
checksum: 10c0/9ebe682eed3ca928f393e16490e1894af146ef23fa0b2be1a1bcfbf4f1c685b882ee3dbfab821b867f7290e2546627877cfa0871f7ecf69dff5719ffe8a53082
|
||||
languageName: node
|
||||
linkType: hard
|
20
CHANGES.md
Normal file
20
CHANGES.md
Normal file
@ -0,0 +1,20 @@
|
||||
# 0.5.0-dev: Continuous Integration, Continuous Delivery / 13.04.2024
|
||||
|
||||
Dieses Release enthält keinerlei neue Funktionalitäten, es bereitet jedoch das Projekt dahingehend vor, dass es nun
|
||||
vollautomatisiert kontinuierlich gebaut, getestet und deployed werden kann.
|
||||
|
||||
Dazu wird der "main"-Branch nun automatisiert deployed, während auf dem "develop"-Branch Änderungen fortlaufend getestet
|
||||
werden. Ein Merge von "develop" nach "main" stößt das Deployment an - entsprechende Deployment-Skripte gehören nun mit
|
||||
zum Code.
|
||||
|
||||
Insgesamt ist das ein Breaking Change, da sich die Deployment-Strategie vollkommen ändert.
|
||||
|
||||
## Feature: Pipeline-Skripte
|
||||
|
||||
Gebaut wird die [solawi-suite] fortan mit Jenkins, entsprechend ist ein Jenkins-File hinterlegt.
|
||||
|
||||
## Enhancement: Bearbeiten-Links in der Dokumentation
|
||||
|
||||
In Vorbereitung der Veröffentlichung des Quellcodes der [solawi-suite] wurden in der Dokumentation Links integriert, die
|
||||
den direkten Zugriff auf die Bearbeitung von Seiten des Handbuchs ermöglichen, natürlich nur für die, die über einen
|
||||
entsprechenden Account verfügen.
|
112
Demo-Daten Anteilsimport mit BOM.csv
Normal file
112
Demo-Daten Anteilsimport mit BOM.csv
Normal file
@ -0,0 +1,112 @@
|
||||
0001a;2;hguerreau1@aboutads.info;Harriott
|
||||
0001b;2;iizon2@comcast.net;Isaac
|
||||
0002a;4;ngodspeede3@yandex.ru;Nikolia
|
||||
0002b;4;smorlon4@craigslist.org;Staci
|
||||
0002c;4;fdurtnal5@zdnet.com;Florry
|
||||
0002d;4;cbargery6@stumbleupon.com;Curtis
|
||||
0003;1;mrother7@ow.ly;Marthena
|
||||
0004;1;lcapinetti8@auda.org.au;Liz
|
||||
0005a;2;tkenset9@creativecommons.org;Thorndike
|
||||
0005b;2;kwillsheara@youtu.be;Kassia
|
||||
0006a;2;cconachieb@behance.net;Crichton
|
||||
0006b;2;yorhrtc@istockphoto.com;Yankee
|
||||
0007a;2;smacconachyd@wufoo.com;Sonnnie
|
||||
0007b;2;coharae@merriam-webster.com;Chrystal
|
||||
0008;1;jcarmelf@howstuffworks.com;Jacquelynn
|
||||
0009;1;bdaberg@cpanel.net;Brucie
|
||||
0010;1;ethirlawayh@slate.com;Ellene
|
||||
0011a;2;scarusi@accuweather.com;Sharlene
|
||||
0011b;2;apietrasikj@rakuten.co.jp;Aguste
|
||||
0012a;2;svegask@t-online.de;Silvan
|
||||
0012b;2;mboxilll@hexun.com;Michail
|
||||
0013a;2;mosgodbym@cocolog-nifty.com;Mahala
|
||||
0013b;2;cpauln@vistaprint.com;Conni
|
||||
0014a;2;cmatzeitiso@cpanel.net;Carmelita
|
||||
0014b;2;jdarlingtonp@hc360.com;Jeff
|
||||
0015a;2;dsmithq@tuttocitta.it;Darcie
|
||||
0015b;2;tclapsonr@uol.com.br;Tanhya
|
||||
0016a;2;cfinkers@photobucket.com;Caitrin
|
||||
0016b;2;bgommet@bravesites.com;Burch
|
||||
0017a;2;hbenetu@dyndns.org;Heddie
|
||||
0017b;2;rhighmanv@marketwatch.com;Rebbecca
|
||||
0018a;2;mgentnerw@pbs.org;Masha
|
||||
0018b;2;omacanultyx@tamu.edu;Ottilie
|
||||
0019a;2;ryankeevy@auda.org.au;Raymund
|
||||
0019b;2;mgrishankovz@npr.org;Marlon
|
||||
0020a;4;rsnoddin10@fotki.com;Rosalie
|
||||
0020b;4;tstucksbury11@tuttocitta.it;Toiboid
|
||||
0020c;4;eriseborough12@paypal.com;Eberhard
|
||||
0020d;4;jboas13@redcross.org;Joelly
|
||||
0021a;3;btaber14@home.pl;Ban
|
||||
0021b;3;emapples15@wikipedia.org;Emanuel
|
||||
0021c;3;jbleakman16@seesaa.net;Joane
|
||||
0022a;5;apossel17@cpanel.net;Ansell
|
||||
0022b;5;cbenettelli18@elpais.com;Christiano
|
||||
0022c;5;jeaseman19@odnoklassniki.ru;Jacqui
|
||||
0022d;5;ecrilley1a@harvard.edu;Elyssa
|
||||
0022e;5;akilalea1b@wix.com;Agosto
|
||||
0023a;2;sbardsley1c@cisco.com;Sibylle
|
||||
0023b;2;istanley1d@psu.edu;Irving
|
||||
0024a;2;ekhadir1e@taobao.com;Eliza
|
||||
0024b;2;challows1f@senate.gov;Charline
|
||||
0025a;2;sdran1g@spotify.com;Sutherlan
|
||||
0025b;2;zgarfirth1h@yahoo.com;Zondra
|
||||
0026a;2;jarkcoll1i@slideshare.net;Josy
|
||||
0026b;2;cbirch1j@geocities.jp;Cherry
|
||||
0027a;2;bsickling1k@privacy.gov.au;Berte
|
||||
0027b;2;edougliss1l@patch.com;Eda
|
||||
0028a;2;crosario1m@diigo.com;Conroy
|
||||
0028b;2;borto1n@irs.gov;Beatrisa
|
||||
0029a;2;amurcutt1o@list-manage.com;Archer
|
||||
0029b;2;umacclenan1p@guardian.co.uk;Ulberto
|
||||
0030a;2;csherrum1q@nsw.gov.au;Cathy
|
||||
0030b;2;srawsthorne1r@icio.us;Shanon
|
||||
0031a;3;wlipson1s@topsy.com;Winna
|
||||
0031b;3;jgarnar1t@jimdo.com;Jaclyn
|
||||
0031c;3;omerriday1u@vkontakte.ru;Odelia
|
||||
0032a;2;eloosemore1v@statcounter.com;Earvin
|
||||
0032b;2;bpickover1w@furl.net;Bethena
|
||||
0033;1;kchislett1x@angelfire.com;Kenton
|
||||
0034a;2;weuesden1y@xrea.com;Welch
|
||||
0034b;2;psimonds1z@de.vu;Piggy
|
||||
0035a;2;ebachmann20@ucla.edu;Elianore
|
||||
0035b;2;bsutherden21@princeton.edu;Billy
|
||||
0036a;2;asangster22@harvard.edu;Abran
|
||||
0036b;2;rbreckwell23@examiner.com;Rickey
|
||||
0037a;2;pmachon24@desdev.cn;Page
|
||||
0037b;2;jbraundt25@imgur.com;Jackelyn
|
||||
0038a;2;mrivers26@pagesperso-orange.fr;Mervin
|
||||
0038b;2;sgiacovelli27@hugedomains.com;Sibylle
|
||||
0039a;2;mbesant28@uol.com.br;Muhammad
|
||||
0039b;2;rcardoe29@technorati.com;Rourke
|
||||
0040a;8;vgandey2a@lulu.com;Vale
|
||||
0040b;8;eviall2b@bbc.co.uk;Emmy
|
||||
0040c;8;sswin2c@yellowpages.com;Sonny
|
||||
0040d;8;aportman2d@canalblog.com;Ardeen
|
||||
0040e;8;jchaudhry2e@imageshack.us;Joye
|
||||
0040f;8;rleidecker2f@fda.gov;Ryann
|
||||
0040g;8;mproske2g@answers.com;Mathias
|
||||
0040h;8;dpatry2h@gmpg.org;Dalenna
|
||||
0041a;2;ksharply2i@sbwire.com;Kaitlin
|
||||
0041b;2;cdulanty2j@harvard.edu;Clem
|
||||
0042a;2;phawes2k@jiathis.com;Parrnell
|
||||
0042b;2;hwackley2l@cornell.edu;Harold
|
||||
0043a;2;mmuccino2m@forbes.com;Meridel
|
||||
0043b;2;cbarkas2n@cnet.com;Cicily
|
||||
0044;1;nbowcher2o@mit.edu;Nickola
|
||||
0045;1;rpideon2p@google.ca;Raynor
|
||||
0046a;2;ccolling2q@sina.com.cn;Clyve
|
||||
0046b;2;rcornbill2r@oakley.com;Robby
|
||||
0047a;2;nbilston1@senate.gov;Noble
|
||||
0047b;2;dgooke2@dyndns.org;Dixie
|
||||
0048a;2;gmcpeake3@bbc.co.uk;Ganny
|
||||
0048b;2;mstairmand4@bizjournals.com;Martguerita
|
||||
0049;1;hsedgeworth5@vimeo.com;Hale
|
||||
0050a;8;abrignall6@cocolog-nifty.com;Astrid
|
||||
0050b;8;jcondon7@mayoclinic.com;Joya
|
||||
0050c;8;cledward8@ebay.co.uk;Cristabel
|
||||
0050d;8;aspino9@123-reg.co.uk;Anita
|
||||
0050e;8;krosenblada@opera.com;Kaitlynn
|
||||
0050f;8;blowndesb@illinois.edu;Bambi
|
||||
0050g;8;gbroadhurstc@oakley.com;Giacopo
|
||||
0050h;8;pcarnied@vkontakte.ru;Pattie
|
|
112
Demo-Daten Anteilsimport.csv
Normal file
112
Demo-Daten Anteilsimport.csv
Normal file
@ -0,0 +1,112 @@
|
||||
0001a;2;hguerreau1@aboutads.info;Harriott
|
||||
0001b;2;iizon2@comcast.net;Isaac
|
||||
0002a;4;ngodspeede3@yandex.ru;Nikolia
|
||||
0002b;4;smorlon4@craigslist.org;Staci
|
||||
0002c;4;fdurtnal5@zdnet.com;Florry
|
||||
0002d;4;cbargery6@stumbleupon.com;Curtis
|
||||
0003;1;mrother7@ow.ly;Marthena
|
||||
0004;1;lcapinetti8@auda.org.au;Liz
|
||||
0005a;2;tkenset9@creativecommons.org;Thorndike
|
||||
0005b;2;kwillsheara@youtu.be;Kassia
|
||||
0006a;2;cconachieb@behance.net;Crichton
|
||||
0006b;2;yorhrtc@istockphoto.com;Yankee
|
||||
0007a;2;smacconachyd@wufoo.com;Sonnnie
|
||||
0007b;2;coharae@merriam-webster.com;Chrystal
|
||||
0008;1;jcarmelf@howstuffworks.com;Jacquelynn
|
||||
0009;1;bdaberg@cpanel.net;Brucie
|
||||
0010;1;ethirlawayh@slate.com;Ellene
|
||||
0011a;2;scarusi@accuweather.com;Sharlene
|
||||
0011b;2;apietrasikj@rakuten.co.jp;Aguste
|
||||
0012a;2;svegask@t-online.de;Silvan
|
||||
0012b;2;mboxilll@hexun.com;Michail
|
||||
0013a;2;mosgodbym@cocolog-nifty.com;Mahala
|
||||
0013b;2;cpauln@vistaprint.com;Conni
|
||||
0014a;2;cmatzeitiso@cpanel.net;Carmelita
|
||||
0014b;2;jdarlingtonp@hc360.com;Jeff
|
||||
0015a;2;dsmithq@tuttocitta.it;Darcie
|
||||
0015b;2;tclapsonr@uol.com.br;Tanhya
|
||||
0016a;2;cfinkers@photobucket.com;Caitrin
|
||||
0016b;2;bgommet@bravesites.com;Burch
|
||||
0017a;2;hbenetu@dyndns.org;Heddie
|
||||
0017b;2;rhighmanv@marketwatch.com;Rebbecca
|
||||
0018a;2;mgentnerw@pbs.org;Masha
|
||||
0018b;2;omacanultyx@tamu.edu;Ottilie
|
||||
0019a;2;ryankeevy@auda.org.au;Raymund
|
||||
0019b;2;mgrishankovz@npr.org;Marlon
|
||||
0020a;4;rsnoddin10@fotki.com;Rosalie
|
||||
0020b;4;tstucksbury11@tuttocitta.it;Toiboid
|
||||
0020c;4;eriseborough12@paypal.com;Eberhard
|
||||
0020d;4;jboas13@redcross.org;Joelly
|
||||
0021a;3;btaber14@home.pl;Ban
|
||||
0021b;3;emapples15@wikipedia.org;Emanuel
|
||||
0021c;3;jbleakman16@seesaa.net;Joane
|
||||
0022a;5;apossel17@cpanel.net;Ansell
|
||||
0022b;5;cbenettelli18@elpais.com;Christiano
|
||||
0022c;5;jeaseman19@odnoklassniki.ru;Jacqui
|
||||
0022d;5;ecrilley1a@harvard.edu;Elyssa
|
||||
0022e;5;akilalea1b@wix.com;Agosto
|
||||
0023a;2;sbardsley1c@cisco.com;Sibylle
|
||||
0023b;2;istanley1d@psu.edu;Irving
|
||||
0024a;2;ekhadir1e@taobao.com;Eliza
|
||||
0024b;2;challows1f@senate.gov;Charline
|
||||
0025a;2;sdran1g@spotify.com;Sutherlan
|
||||
0025b;2;zgarfirth1h@yahoo.com;Zondra
|
||||
0026a;2;jarkcoll1i@slideshare.net;Josy
|
||||
0026b;2;cbirch1j@geocities.jp;Cherry
|
||||
0027a;2;bsickling1k@privacy.gov.au;Berte
|
||||
0027b;2;edougliss1l@patch.com;Eda
|
||||
0028a;2;crosario1m@diigo.com;Conroy
|
||||
0028b;2;borto1n@irs.gov;Beatrisa
|
||||
0029a;2;amurcutt1o@list-manage.com;Archer
|
||||
0029b;2;umacclenan1p@guardian.co.uk;Ulberto
|
||||
0030a;2;csherrum1q@nsw.gov.au;Cathy
|
||||
0030b;2;srawsthorne1r@icio.us;Shanon
|
||||
0031a;3;wlipson1s@topsy.com;Winna
|
||||
0031b;3;jgarnar1t@jimdo.com;Jaclyn
|
||||
0031c;3;omerriday1u@vkontakte.ru;Odelia
|
||||
0032a;2;eloosemore1v@statcounter.com;Earvin
|
||||
0032b;2;bpickover1w@furl.net;Bethena
|
||||
0033;1;kchislett1x@angelfire.com;Kenton
|
||||
0034a;2;weuesden1y@xrea.com;Welch
|
||||
0034b;2;psimonds1z@de.vu;Piggy
|
||||
0035a;2;ebachmann20@ucla.edu;Elianore
|
||||
0035b;2;bsutherden21@princeton.edu;Billy
|
||||
0036a;2;asangster22@harvard.edu;Abran
|
||||
0036b;2;rbreckwell23@examiner.com;Rickey
|
||||
0037a;2;pmachon24@desdev.cn;Page
|
||||
0037b;2;jbraundt25@imgur.com;Jackelyn
|
||||
0038a;2;mrivers26@pagesperso-orange.fr;Mervin
|
||||
0038b;2;sgiacovelli27@hugedomains.com;Sibylle
|
||||
0039a;2;mbesant28@uol.com.br;Muhammad
|
||||
0039b;2;rcardoe29@technorati.com;Rourke
|
||||
0040a;8;vgandey2a@lulu.com;Vale
|
||||
0040b;8;eviall2b@bbc.co.uk;Emmy
|
||||
0040c;8;sswin2c@yellowpages.com;Sonny
|
||||
0040d;8;aportman2d@canalblog.com;Ardeen
|
||||
0040e;8;jchaudhry2e@imageshack.us;Joye
|
||||
0040f;8;rleidecker2f@fda.gov;Ryann
|
||||
0040g;8;mproske2g@answers.com;Mathias
|
||||
0040h;8;dpatry2h@gmpg.org;Dalenna
|
||||
0041a;2;ksharply2i@sbwire.com;Kaitlin
|
||||
0041b;2;cdulanty2j@harvard.edu;Clem
|
||||
0042a;2;phawes2k@jiathis.com;Parrnell
|
||||
0042b;2;hwackley2l@cornell.edu;Harold
|
||||
0043a;2;mmuccino2m@forbes.com;Meridel
|
||||
0043b;2;cbarkas2n@cnet.com;Cicily
|
||||
0044;1;nbowcher2o@mit.edu;Nickola
|
||||
0045;1;rpideon2p@google.ca;Raynor
|
||||
0046a;2;ccolling2q@sina.com.cn;Clyve
|
||||
0046b;2;rcornbill2r@oakley.com;Robby
|
||||
0047a;2;nbilston1@senate.gov;Noble
|
||||
0047b;2;dgooke2@dyndns.org;Dixie
|
||||
0048a;2;gmcpeake3@bbc.co.uk;Ganny
|
||||
0048b;2;mstairmand4@bizjournals.com;Martguerita
|
||||
0049;1;hsedgeworth5@vimeo.com;Hale
|
||||
0050a;8;abrignall6@cocolog-nifty.com;Astrid
|
||||
0050b;8;jcondon7@mayoclinic.com;Joya
|
||||
0050c;8;cledward8@ebay.co.uk;Cristabel
|
||||
0050d;8;aspino9@123-reg.co.uk;Anita
|
||||
0050e;8;krosenblada@opera.com;Kaitlynn
|
||||
0050f;8;blowndesb@illinois.edu;Bambi
|
||||
0050g;8;gbroadhurstc@oakley.com;Giacopo
|
||||
0050h;8;pcarnied@vkontakte.ru;Pattie
|
|
92
README.md
92
README.md
@ -1,5 +1,93 @@
|
||||
# Solawi Suite Platform
|
||||
|
||||
Plattform-Basis für die Solawi-Apps.
|
||||
## Development Key
|
||||
|
||||
Work in progress.
|
||||
**DO NOT USE IN PRODUCTION!**
|
||||
|
||||
```text
|
||||
0x3739d20117be06f317d31bf30296b563e37a1a5ef6299a0e920675288f920627
|
||||
```
|
||||
|
||||
Use as environment variable during development:
|
||||
|
||||
```
|
||||
SOLAWI_SUITE_SECRET_KEY=0x3739d20117be06f317d31bf30296b563e37a1a5ef6299a0e920675288f920627
|
||||
```
|
||||
|
||||
## Deployment steps
|
||||
|
||||
```bash
|
||||
git submodule update
|
||||
git submodule foreach --recursive git clean -id
|
||||
poetry install --without dev
|
||||
poetry run manage.py migrate
|
||||
(cd 3rdparty; yarn install)
|
||||
(cd documentation; poetry run mkdocs build)
|
||||
poetry run manage.py collectstatic
|
||||
supervisorctl restart solawi_suite
|
||||
```
|
||||
|
||||
## Important Cron Jobs
|
||||
|
||||
```cronexp
|
||||
MAILTO="administrator@solawi-system"
|
||||
DJANGO_SETTINGS_MODULE="solawi_platform.production_settings"
|
||||
SOLAWI_SUITE_SECRET_KEY=file:///path/to/secret_key.hex
|
||||
PATH=/usr/local/bin
|
||||
|
||||
SOLAWI_SUITE_HOME=/path/to/solawi-suite/platform
|
||||
|
||||
# .---------------- minute (0 - 59)
|
||||
# | .------------- hour (0 - 23)
|
||||
# | | .---------- day of month (1 - 31)
|
||||
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
|
||||
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|
||||
# | | | | |
|
||||
# * * * * * command to be executed
|
||||
# * * * * * command --arg1 --arg2 file1 file2 2>&1
|
||||
11 4 * * * (cd $SOLAWI_SUITE_HOME; poetry run manage.py cleanup_burned_otp)
|
||||
*/7 * * * * (cd $SOLAWI_SUITE_HOME; poetry run manage.py cleanup_forgot_password)
|
||||
*/9 * * * * (cd $SOLAWI_SUITE_HOME; poetry run manage.py cleanup_pending_registrations)
|
||||
*/13 * * * * (cd $SOLAWI_SUITE_HOME; poetry run manage.py cleanup_rate_limiter)
|
||||
33 3 * * * (cd $SOLAWI_SUITE_HOME; poetry run manage.py clearsessions)
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Installation
|
||||
|
||||
```bash
|
||||
poetry install --without prod
|
||||
poetry run rfbrowser init
|
||||
(cd 3rdparty; yarn install)
|
||||
(cd documentation; poetry run mkdocs build)
|
||||
poetry run manage.py collectstatic
|
||||
```
|
||||
|
||||
### Unit Tests
|
||||
|
||||
```bash
|
||||
poetry run manage.py test
|
||||
```
|
||||
|
||||
### System Test
|
||||
|
||||
```bash
|
||||
poetry run robot -A SystemTest/robot.args.conf SystemTest/TestCases
|
||||
yarn dlx allure-commandline generate uat-test-results/allure
|
||||
# or
|
||||
yarn dlx allure-commandline serve uat-test-results/allure
|
||||
```
|
||||
|
||||
### System Test (parallel)
|
||||
|
||||
```bash
|
||||
poetry run pabot --processes 4 --command robot -A SystemTest/robot.args.conf --end-command --output-dir uat-test-results --xunit xunit.xml SystemTest/TestCases
|
||||
yarn dlx allure-commandline generate uat-test-results/allure
|
||||
# or
|
||||
yarn dlx allure-commandline serve uat-test-results/allure
|
||||
```
|
||||
|
||||
### Load Test
|
||||
|
||||
TODO: locust
|
||||
|
57
SystemTest/Keywords/django.resource
Normal file
57
SystemTest/Keywords/django.resource
Normal file
@ -0,0 +1,57 @@
|
||||
*** Settings ***
|
||||
Documentation Keyword Library for the [solawi-suite] application
|
||||
... Handles starting and shutdown of the application
|
||||
Library solawi_uat.environment.instance.SolawiSuiteInstanceLibrary
|
||||
Library Browser jsextension=${CURDIR}/webauthn.js
|
||||
|
||||
*** Keywords ***
|
||||
Solawi-Suite Inner Setup
|
||||
${vars} = Get Variables
|
||||
IF "\${HOST}" in $vars
|
||||
IF $HOST != ${None}
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
Set Suite Variable ${solawi_suite_inner_setup} ${True}
|
||||
Start Solawi-Suite
|
||||
|
||||
Solawi-Suite Inner Teardown
|
||||
${vars} = Get Variables
|
||||
IF "\${solawi_suite_inner_setup}" in $vars
|
||||
IF ${solawi_suite_inner_setup} == ${True}
|
||||
Stop Solawi-Suite
|
||||
Set Global Variable ${HOST} ${None}
|
||||
END
|
||||
END
|
||||
|
||||
Start Solawi-Suite
|
||||
Create Test Database
|
||||
Start Daphne Server
|
||||
${daphne_host} = Get Test Host
|
||||
Set Global Variable $HOST ${daphne_host}
|
||||
Wait For Application Startup
|
||||
|
||||
Stop Solawi-Suite
|
||||
Shutdown Daphne Server
|
||||
Clean Temporary Folder
|
||||
|
||||
Get Browser
|
||||
${browser} = New Browser chromium headless=%{ROBOT_HEADLESS=no}
|
||||
RETURN ${browser}
|
||||
|
||||
Get Context
|
||||
${context} = New Context
|
||||
RETURN ${context}
|
||||
|
||||
Open Page
|
||||
[Arguments] ${url}
|
||||
${browser} = Get Browser
|
||||
${context} = Get Context
|
||||
${page} = New Page ${HOST}${url}
|
||||
Set Viewport Size 1600 800
|
||||
upgradeBrowserForWebAuthnVirtualAuthenticator
|
||||
RETURN ${page}
|
||||
|
||||
Logout
|
||||
Go To ${HOST}/users/auth/logout
|
||||
Click css=form[method="post"]:not([action]) button[type="submit"].btn.btn-warning
|
56
SystemTest/Keywords/registration_and_login.resource
Normal file
56
SystemTest/Keywords/registration_and_login.resource
Normal file
@ -0,0 +1,56 @@
|
||||
*** Settings ***
|
||||
Resource django.resource
|
||||
Library solawi_uat.helper.DataLib
|
||||
Library solawi_uat.helper.RandomTestDataLib
|
||||
Library String
|
||||
|
||||
|
||||
*** Keywords ***
|
||||
Get Registration Link From Mail
|
||||
[Arguments] ${registration_mail}
|
||||
@{links} = Extract All Links ${registration_mail}
|
||||
FOR ${link} IN @{links}
|
||||
${res} = Fetch From Left ${link} /register/
|
||||
IF "${res}" != "${link}"
|
||||
RETURN ${link}
|
||||
END
|
||||
END
|
||||
Fail No registration link found
|
||||
|
||||
Transform Registration Link From "${mail_link}"
|
||||
${res} = Replace String ${mail_link} http://127.0.0.1:8000 ${EMPTY}
|
||||
RETURN ${res}
|
||||
|
||||
Do Registration And Login As User "${username}"
|
||||
[Arguments] ${registration_mail} ${check_mail}=${True} ${password}=${None}
|
||||
IF ${check_mail}
|
||||
Should Contain ${registration_mail} To: ${username}
|
||||
Should Contain ${registration_mail} From: solawi-suite@solawi.me
|
||||
END
|
||||
${reg_url} = Get Registration Link From Mail ${registration_mail}
|
||||
${reg_url} = Transform Registration Link From "${reg_url}"
|
||||
${page} = Open Page ${reg_url}
|
||||
${first_name} = Get Random First Name
|
||||
${last_name} = Get Random Last Name
|
||||
IF $password == ${None}
|
||||
${password} = Get Random Password
|
||||
END
|
||||
${otp} = Get TOTP For User ${username}
|
||||
Fill Text css=input[name="first_name"] ${first_name}
|
||||
Fill Text css=input[name="last_name"] ${last_name}
|
||||
Fill Text css=input[name="otp"] ${otp}
|
||||
Fill Text css=input[name="password1"] ${password}
|
||||
Fill Text css=input[name="password2"] ${password}
|
||||
Click css=button[type="submit"]
|
||||
Get Element css=div[role="alert"].alert.alert-success
|
||||
Click css=a[href^="/users/auth/login"].btn.btn-primary
|
||||
Fill Text css=input[name="username"] ${username}
|
||||
Fill Text css=input[name="password"] ${password}
|
||||
Click css=button[type="submit"]
|
||||
Get Element css=div[role="alert"].alert.alert-success
|
||||
${otp} = Get TOTP For User ${username} ${otp}
|
||||
Fill Text css=input[name="otp"] ${otp}
|
||||
Click css=button[type="submit"]
|
||||
Get Element css=div[role="alert"].alert.alert-success
|
||||
Get Url $= /ui/welcome
|
||||
RETURN ${page}
|
16
SystemTest/Keywords/webauthn.js
Normal file
16
SystemTest/Keywords/webauthn.js
Normal file
@ -0,0 +1,16 @@
|
||||
async function upgradeBrowserForWebAuthnVirtualAuthenticator(page, logger) {
|
||||
const client = await page.context().newCDPSession(page);
|
||||
await client.send("WebAuthn.enable");
|
||||
const options = {
|
||||
transport: "internal",
|
||||
protocol: "ctap2",
|
||||
isUserVerified: true,
|
||||
hasUserVerification: true,
|
||||
hasPersistentKey: false,
|
||||
};
|
||||
return await client.send("WebAuthn.addVirtualAuthenticator", { options: options });
|
||||
}
|
||||
|
||||
upgradeBrowserForWebAuthnVirtualAuthenticator.rfdoc = "Upgrade Browser to use Virtual Authenticator"
|
||||
exports.__esModule = true;
|
||||
exports.upgradeBrowserForWebAuthnVirtualAuthenticator = upgradeBrowserForWebAuthnVirtualAuthenticator;
|
71
SystemTest/TestCases/BasicPages.robot
Normal file
71
SystemTest/TestCases/BasicPages.robot
Normal file
@ -0,0 +1,71 @@
|
||||
*** Settings ***
|
||||
Documentation Basic Tests for some special pages
|
||||
Resource ../Keywords/django.resource
|
||||
Suite Setup Solawi-Suite Inner Setup
|
||||
Suite Teardown Solawi-Suite Inner Teardown
|
||||
|
||||
*** Keywords ***
|
||||
Find Link To Special Page
|
||||
[Arguments] ${special_page_url}
|
||||
Get Element Count css=a[href="${special_page_url}"] > 0
|
||||
|
||||
Check Pages For Special Page "${page_url}"
|
||||
[Arguments] @{pages}
|
||||
FOR ${page} IN @{pages}
|
||||
Open Page ${page}
|
||||
Find Link To Special Page ${page_url}
|
||||
END
|
||||
|
||||
Can Successfully Open "${url}"
|
||||
Open Page /
|
||||
&{res} = HTTP ${url}
|
||||
Should Be Equal As Integers ${res.status} 200
|
||||
|
||||
*** Test Cases ***
|
||||
Redirect To Welcome Page - User Site
|
||||
[Documentation] Tests the redirect from the base URL to the welcome page
|
||||
Open Page /
|
||||
Get Url $= /ui/welcome
|
||||
|
||||
Check Imprint Page
|
||||
[Documentation] Is there an Imprint Page containing "Impressum" and "Datenschutz"
|
||||
Open Page /ui/impressum
|
||||
Get Element By Role heading name=Impressum
|
||||
Get Element By Role heading name=Datenschutz
|
||||
|
||||
Check Contact Page
|
||||
[Documentation] Is there a Contact Page containing contact information
|
||||
Open Page /ui/contact
|
||||
Get Element By Role heading name=Kontakt exact=True
|
||||
Get Element By Role heading name=Kontaktmöglichkeiten exact=True
|
||||
Get Element Count css=a[href="mailto:solawi-suite@solawi.me"] > 0
|
||||
|
||||
Has Contact Page Link
|
||||
[Documentation] Tests the reachability of the contact page from a bunch of pages
|
||||
Check Pages For Special Page "/ui/contact" /ui/welcome /ui/contact /ui/impressum /handbook/ /users/auth/login
|
||||
|
||||
Has Imprint Page Link
|
||||
[Documentation] Tests the reachability of the imprint/data protection page from a bunch of pages
|
||||
Check Pages For Special Page "/ui/impressum" /ui/welcome /ui/contact /ui/impressum /handbook/ /users/auth/login
|
||||
|
||||
Has About Page Link
|
||||
[Documentation] Tests the reachability of the about page from a bunch of pages
|
||||
Check Pages For Special Page "/ui/about" /ui/welcome /ui/contact /ui/impressum /users/auth/login
|
||||
|
||||
Has favicon.ico
|
||||
Can Successfully Open "/favicon.ico"
|
||||
|
||||
Has favicon.png
|
||||
Can Successfully Open "/favicon.png"
|
||||
|
||||
Has robots.txt
|
||||
Can Successfully Open "/robots.txt"
|
||||
|
||||
Has ads.txt
|
||||
Can Successfully Open "/ads.txt"
|
||||
|
||||
Has .well-known/security.txt
|
||||
Can Successfully Open "/.well-known/security.txt"
|
||||
|
||||
Has ui/matomo.js
|
||||
Can Successfully Open "/ui/matomo.js"
|
60
SystemTest/TestCases/Beamer.robot
Normal file
60
SystemTest/TestCases/Beamer.robot
Normal file
@ -0,0 +1,60 @@
|
||||
*** Settings ***
|
||||
Documentation Check Beamer Page
|
||||
|
||||
Resource ../Keywords/django.resource
|
||||
Resource ../Keywords/registration_and_login.resource
|
||||
Library solawi_uat.helper.RandomTestDataLib
|
||||
Library solawi_uat.helper.TimingLib
|
||||
Library String
|
||||
|
||||
Suite Setup Solawi-Suite Inner Setup
|
||||
Suite Teardown Solawi-Suite Inner Teardown
|
||||
|
||||
|
||||
*** Keywords ***
|
||||
Get Screen Code
|
||||
Open Page /beamer/
|
||||
Get Element css=header
|
||||
Hover css=header
|
||||
${code} = Get Text css=header b
|
||||
Length Should Be ${code} 16
|
||||
Should Match Regexp ${code} ^\\d{16}$
|
||||
RETURN ${code}
|
||||
|
||||
*** Test Cases ***
|
||||
Beamer Page Has Screen Code
|
||||
${code1} = Get Screen Code
|
||||
Delete All Cookies
|
||||
${code2} = Get Screen Code
|
||||
Delete All Cookies
|
||||
${code3} = Get Screen Code
|
||||
Should Not Be Equal As Strings ${code1} ${code2}
|
||||
Should Not Be Equal As Strings ${code2} ${code3}
|
||||
Should Not Be Equal As Strings ${code3} ${code1}
|
||||
${code4} = Get Screen Code
|
||||
Should Be Equal As Strings ${code3} ${code4}
|
||||
${code5} = Get Screen Code
|
||||
Should Be Equal As Strings ${code3} ${code5}
|
||||
|
||||
Communication To Beamer Works
|
||||
Get Browser
|
||||
${now} = Now
|
||||
Get Context
|
||||
${username} = Get Random E-Mail Address
|
||||
Run Manage.Py Command invite_user ${username} --module beamer
|
||||
${mail_content} = Get Latest Mail ${now}
|
||||
${user_page} = Do Registration And Login As User "${username}" ${mail_content}
|
||||
Get Context
|
||||
${beamer_page} = New Page ${HOST}/beamer/
|
||||
${code} = Get Screen Code
|
||||
Switch Page ${user_page} ALL
|
||||
Click css=header ul.nav li.nav-item a[href="/beamer/connections"]
|
||||
Fill Text css=input[name="screen_code"] ${code}
|
||||
Press Keys css=input[name="screen_code"] Enter
|
||||
Click css=a[href="/beamer/connection/${code}"].btn.btn-sm
|
||||
${test_text} = Get Random Last Name
|
||||
Fill Text css=input[name="message"] ${test_text}
|
||||
Press Keys css=input[name="message"] Enter
|
||||
Switch Page ${beamer_page} ALL
|
||||
Get Text css=section.present *= Test
|
||||
Get Text css=section.present *= ${test_text}
|
38
SystemTest/TestCases/EmergencyCodes.robot
Normal file
38
SystemTest/TestCases/EmergencyCodes.robot
Normal file
@ -0,0 +1,38 @@
|
||||
*** Settings ***
|
||||
Documentation Tests for using Emergency Codes for Login
|
||||
Resource ../Keywords/django.resource
|
||||
Resource ../Keywords/registration_and_login.resource
|
||||
Library solawi_uat.helper.RandomTestDataLib
|
||||
Library solawi_uat.helper.TimingLib
|
||||
Library String
|
||||
|
||||
Suite Setup Solawi-Suite Inner Setup
|
||||
Suite Teardown Solawi-Suite Inner Teardown
|
||||
|
||||
|
||||
*** Test Cases ***
|
||||
Check For Notification, Create New Codes, Login With Code
|
||||
${now} = Now
|
||||
${username} = Get Random E-Mail Address
|
||||
Run Manage.Py Command invite_user ${username}
|
||||
${mail_content} = Get Latest Mail ${now}
|
||||
${password} = Get Random Password
|
||||
Do Registration And Login As User "${username}" ${mail_content} ${True} ${password}
|
||||
Get Element css=header div[role="alert"].alert-danger.alert-dismissible a[href^="/users/self-service/emergency-codes"].btn.btn-sm
|
||||
Click css=header div[role="alert"].alert-danger.alert-dismissible a[href^="/users/self-service/emergency-codes"].btn.btn-sm
|
||||
Get Url *= /users/self-service/emergency-codes
|
||||
Click css=form[method="post"]:not([action]) button[type="submit"].btn.btn-danger
|
||||
${codes} = Get Text css=main div.card div.card-body pre.text-center
|
||||
Logout
|
||||
Go To ${HOST}/users/auth/login
|
||||
Fill Text css=input[name="username"] ${username}
|
||||
Fill Text css=input[name="password"] ${password}
|
||||
Click css=button[type="submit"]
|
||||
Get Element css=div[role="alert"].alert.alert-success
|
||||
Click css=form[method="post"]:not([action]) a[href^="/users/auth/emergency-code"]
|
||||
${code} = Get Line ${codes} 0
|
||||
Fill Text css=form[method="post"]:not([action]) input[name="emergency_code"] ${code}
|
||||
Click css=form[method="post"]:not([action]) button[type="submit"]
|
||||
Get Url $= /ui/welcome
|
||||
Get Element css=div[role="alert"].alert.alert-success
|
||||
Get Element css=footer a[href^="/users/auth/logout"].btn.btn-warning
|
32
SystemTest/TestCases/Passkeys.robot
Normal file
32
SystemTest/TestCases/Passkeys.robot
Normal file
@ -0,0 +1,32 @@
|
||||
*** Settings ***
|
||||
Documentation Test Using Passkeys
|
||||
Resource ../Keywords/django.resource
|
||||
Resource ../Keywords/registration_and_login.resource
|
||||
Library solawi_uat.helper.TimingLib
|
||||
Library Dialogs
|
||||
|
||||
Suite Setup Solawi-Suite Inner Setup
|
||||
Suite Teardown Solawi-Suite Inner Teardown
|
||||
|
||||
|
||||
*** Test Cases ***
|
||||
Create Passkey And Use For Login
|
||||
[Tags] manual
|
||||
${now} = Now
|
||||
${username} = Get Random E-Mail Address
|
||||
Run Manage.Py Command invite_user ${username}
|
||||
${mail_content} = Get Latest Mail ${now}
|
||||
${password} = Get Random Password
|
||||
Do Registration And Login As User "${username}" ${mail_content} ${True} ${password}
|
||||
Get Element css=header div[role="alert"].alert-warning.alert-dismissible a[href^="/passkey/"].btn.btn-sm
|
||||
Click css=header div[role="alert"].alert-warning.alert-dismissible a[href^="/passkey/"].btn.btn-sm
|
||||
Get Url *= /passkey/
|
||||
Click css=a[href="/passkey/add"].btn.btn-success
|
||||
Execute Manual Step Please create a passkey now
|
||||
Logout
|
||||
Click css=a[href^="/users/auth/login"].btn
|
||||
Click css=div.card div.card-body a[href^="/passkey/auth"].btn.btn-lg
|
||||
Execute Manual Step Please authenticate with Passkey now
|
||||
Get Url $= /ui/welcome
|
||||
Get Element css=div[role="alert"].alert.alert-success
|
||||
Get Element css=footer a[href^="/users/auth/logout"].btn.btn-warning
|
33
SystemTest/TestCases/RegistrationAndLogin.robot
Normal file
33
SystemTest/TestCases/RegistrationAndLogin.robot
Normal file
@ -0,0 +1,33 @@
|
||||
*** Settings ***
|
||||
Documentation Check the registration and login procedures
|
||||
Resource ../Keywords/django.resource
|
||||
Resource ../Keywords/registration_and_login.resource
|
||||
Library solawi_uat.helper.RandomTestDataLib
|
||||
Library solawi_uat.helper.TimingLib
|
||||
Library String
|
||||
|
||||
Suite Setup Solawi-Suite Inner Setup
|
||||
Suite Teardown Solawi-Suite Inner Teardown
|
||||
|
||||
|
||||
*** Test Cases ***
|
||||
Registration As Normal User And Login With Username/Password/TOTP
|
||||
${now} = Now
|
||||
${email} = Get Random E-Mail Address
|
||||
Run Manage.Py Command invite_user ${email}
|
||||
${mail_content} = Get Latest Mail ${now}
|
||||
Do Registration And Login As User "${email}" ${mail_content}
|
||||
Click css=footer button[data-bs-toggle="dropdown"]
|
||||
Get Element css=footer ul.dropdown-menu li a[href="/users/self-service"].dropdown-item
|
||||
|
||||
Registration As Super User And Login With Username/Password/TOTP
|
||||
${now} = Now
|
||||
${email} = Get Random E-Mail Address
|
||||
${data} = Run Manage.Py Command createsuperuser ${email}
|
||||
${link_code} = Decode Bytes To String ${data.stdout} "utf-8"
|
||||
@{link_code} = Split String ${link_code} : 1
|
||||
${link_code} = Strip String ${link_code[1]}
|
||||
Do Registration And Login As User "${email}" ${link_code} ${False}
|
||||
Get Element css=footer ul.dropdown-menu li a[href="/admin/"].dropdown-item
|
||||
Click css=footer button[data-bs-toggle="dropdown"]
|
||||
Get Element css=footer ul.dropdown-menu li a[href="/users/self-service"].dropdown-item
|
4
SystemTest/TestCases/__init__.robot
Normal file
4
SystemTest/TestCases/__init__.robot
Normal file
@ -0,0 +1,4 @@
|
||||
*** Settings ***
|
||||
Resource ../Keywords/django.resource
|
||||
Suite Setup Start Solawi-Suite
|
||||
Suite Teardown Stop Solawi-Suite
|
6
SystemTest/robot.args.conf
Normal file
6
SystemTest/robot.args.conf
Normal file
@ -0,0 +1,6 @@
|
||||
--listener allure_robotframework:uat-test-results/allure
|
||||
--prerunmodifier allure_robotframework.testplan
|
||||
--logtitle [solawi-suite] Sytem Test Log
|
||||
--reporttitle [solawi-suite] System Test Report
|
||||
--outputdir uat-test-results
|
||||
--xunit xunit.xml
|
0
_email/.gitkeep
Normal file
0
_email/.gitkeep
Normal file
1
documentation
Submodule
1
documentation
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit a520d21ddc0c4bd96b3d57bd012f2134150fffa8
|
1
keys/env-development.public.hex
Normal file
1
keys/env-development.public.hex
Normal file
@ -0,0 +1 @@
|
||||
0xf16a75d1926178c8c7a5e7895859d59c511c96b5c0f5d3d25053168861e5d1eafa451bdbe2061c140bc5e917b7238052ce02a505cff4c4210a6a01df96ef06e1
|
1
keys/env-solawis.public.hex
Normal file
1
keys/env-solawis.public.hex
Normal file
@ -0,0 +1 @@
|
||||
0x5cda238115d1e93aea954d12e1edabb635f1728e5c3bfad7fa7403be8ab454083be8db052b472f97a24a2914f67286256eecbf6ee8e006447795b628f1587e0a
|