Compare commits
21 Commits
108a14e51d
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 19208e00fe | |||
| 527285a487 | |||
| 2aef815c81 | |||
| ed25b0e8ba | |||
| 9c71629910 | |||
| ab20b9a621 | |||
| ab3f5cfbbf | |||
| 81724cb20d | |||
| 4098ade419 | |||
| 232682671f | |||
| 867624df97 | |||
| 200da771cd | |||
| db2a168f4b | |||
| 62737151ee | |||
| 5565db4d8c | |||
| 190ecbe521 | |||
| 94c14f3e1d | |||
| 8184ffecf4 | |||
| edfca1f007 | |||
| d752df1c15 | |||
| 9bca27bf72 |
76
.gitea/actions/init-db/action.yaml
Normal file
76
.gitea/actions/init-db/action.yaml
Normal file
@@ -0,0 +1,76 @@
|
||||
name: initialize database
|
||||
description: initialize database by using database of test environment
|
||||
author: BinKrassDuFass
|
||||
|
||||
inputs:
|
||||
MONGODB_SERVICE_NAME:
|
||||
description: 'Name of the MongoDB service'
|
||||
required: true
|
||||
default: 'mongo'
|
||||
|
||||
TIBI_USERNAME:
|
||||
description: 'Username of the Tibi account'
|
||||
required: true
|
||||
default: 'admin'
|
||||
|
||||
TIBI_PASSWORD:
|
||||
description: 'Password of the Tibi account'
|
||||
required: true
|
||||
default: 'admin'
|
||||
|
||||
TIBI_API_URL:
|
||||
description: 'URL of the Tibi API'
|
||||
required: true
|
||||
default: 'http://tibi-server:8080/api/v1'
|
||||
|
||||
TIBI_API_CONFIG_PATH:
|
||||
description: 'Path of the Tibi API config'
|
||||
required: true
|
||||
default: "${{github.workspace}}/api/config.yml}}"
|
||||
|
||||
TIBI_API_NAMESPACE:
|
||||
description: 'Namespace of the Tibi API'
|
||||
required: true
|
||||
|
||||
PROJECT_NAME:
|
||||
description: 'Name of the project'
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Setup mongo tools
|
||||
shell: bash
|
||||
run: |
|
||||
echo "::group::setup Mongo keys"
|
||||
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
|
||||
sudo apt-get install -y gnupg
|
||||
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
|
||||
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "::group::mongodb tools"
|
||||
sudo apt-get update
|
||||
echo "aptitude install mongodb-database-tools"
|
||||
sudo apt-get install -y mongodb-database-tools
|
||||
echo "::endgroup::"
|
||||
|
||||
echo "mongodump --version"
|
||||
mongodump --version
|
||||
|
||||
- name: Restore MongoDB Data
|
||||
run: |
|
||||
echo "::group::initialize mongo data"
|
||||
mongorestore --uri "mongodb://${{inputs.MONGODB_SERVICE_NAME}}:27017" ./.github/actions/init-db/mongo-dump
|
||||
echo "::endgroup::"
|
||||
shell: bash
|
||||
|
||||
- name: set config in tibi
|
||||
shell: bash
|
||||
run: ./.github/actions/init-db/setConfigInTibiProject.sh ${{inputs.TIBI_USERNAME}} ${{inputs.TIBI_PASSWORD}} ${{inputs.TIBI_API_URL}} ${{inputs.TIBI_API_CONFIG_PATH}} ${{inputs.TIBI_API_NAMESPACE}} ${{inputs.PROJECT_NAME}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
name: initialize database
|
||||
description: initialize database by using database of test environment
|
||||
author: BinKrassDuFass
|
||||
|
||||
inputs:
|
||||
MONGODB_SERVICE_NAME:
|
||||
description: 'Name of the MongoDB service'
|
||||
required: true
|
||||
default: 'mongo'
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Install MongoDB tools
|
||||
run: sudo apt-get install -y mongodb-database-tools
|
||||
|
||||
- name: Restore MongoDB Data
|
||||
run: mongorestore --uri "mongodb://${{inputs.MONGODB_SERVICE_NAME}}:27017" /.gitea/
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
const axios = require("axios")
|
||||
const { MongoClient } = require("mongodb")
|
||||
const fs = require("fs")
|
||||
const util = require("util")
|
||||
|
||||
// Function to log objects in a detailed manner
|
||||
function logObj(o) {
|
||||
console.log(util.inspect(o, false, null, true))
|
||||
}
|
||||
|
||||
// Function to preload the database with collections
|
||||
async function preloadDatabase(db, collections) {
|
||||
for (const { name, file } of collections) {
|
||||
const content = fs.readFileSync(file, "utf8")
|
||||
const data = JSON.parse(content)
|
||||
|
||||
const collection = db.collection(name)
|
||||
await collection.insertMany(data)
|
||||
|
||||
const insertedData = await collection.find({}).toArray()
|
||||
if (insertedData.length !== data.length) {
|
||||
console.error(
|
||||
`Mismatch in collection ${name}: expected ${data.length} documents, found ${insertedData.length}`
|
||||
)
|
||||
} else {
|
||||
console.log(`Successfully verified ${insertedData.length} documents in ${name}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function initializeDatabase(config) {
|
||||
try {
|
||||
const dbClient = new MongoClient(config.mongodbUri)
|
||||
await dbClient.connect()
|
||||
let db = dbClient.db(config.tibiDbPrefix)
|
||||
await db.collection("project").deleteMany({ namespace: config.projectApiNamespace })
|
||||
|
||||
const dbName = config.tibiDbPrefix + "_" + config.projectApiNamespace
|
||||
db = dbClient.db(dbName)
|
||||
await db.dropDatabase()
|
||||
|
||||
// Login to Tibi API
|
||||
const loginResponse = await axios.post(config.tibiApiUrl + "/login", {
|
||||
username: config.tibiUsername,
|
||||
password: config.tibiPassword,
|
||||
})
|
||||
const tibiToken = loginResponse.data.token
|
||||
|
||||
// Create project
|
||||
let project
|
||||
try {
|
||||
const projectResponse = await axios.post(
|
||||
config.tibiApiUrl + "/project",
|
||||
{
|
||||
configFile: config.projectApiConfig,
|
||||
name: config.projectApiNamespace,
|
||||
namespace: config.projectApiNamespace,
|
||||
description: config.projectApiNamespace,
|
||||
},
|
||||
{
|
||||
headers: {
|
||||
"X-Auth-Token": tibiToken,
|
||||
},
|
||||
}
|
||||
)
|
||||
project = projectResponse.data
|
||||
} catch (e) {
|
||||
logObj(e)
|
||||
throw e
|
||||
}
|
||||
|
||||
// Check if project is online
|
||||
const projectStatus = await axios.get(config.tibiApiUrl + "/project/" + project.id, {
|
||||
headers: {
|
||||
"X-Auth-Token": tibiToken,
|
||||
},
|
||||
})
|
||||
if (!projectStatus.data.api.isOnline) {
|
||||
throw new Error(`Project ${config.projectApiNamespace} is not online.`)
|
||||
}
|
||||
|
||||
|
||||
// Define collections to preload into the database
|
||||
const collections = [
|
||||
// Define your collections here as per your Cypress plugin logic
|
||||
// { name: "collectionName", file: "path/to/file.json" },
|
||||
// ... other collections
|
||||
]
|
||||
await preloadDatabase(db, collections)
|
||||
|
||||
await dbClient.close()
|
||||
} catch (error) {
|
||||
console.error("Error initializing the database:", error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
// Run the script if it's executed directly
|
||||
if (require.main === module) {
|
||||
const config = {
|
||||
projectApiNamespace: process.env.PROJECT_API_NAMESPACE,
|
||||
mongodbUri: process.env.MONGODB_URI,
|
||||
tibiDbPrefix: process.env.TIBI_DB_PREFIX,
|
||||
tibiApiUrl: process.env.TIBI_API_URL,
|
||||
// Add other required environment variables here
|
||||
}
|
||||
|
||||
initializeDatabase(config)
|
||||
.then(() => console.log("Database initialized successfully"))
|
||||
.catch((err) => {
|
||||
console.error("Failed to initialize database:", err)
|
||||
process.exit(1)
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = initializeDatabase
|
||||
BIN
.gitea/actions/init-db/mongo-dump/admin/system.version.bson
Normal file
BIN
.gitea/actions/init-db/mongo-dump/admin/system.version.bson
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"admin.system.version"}],"uuid":"c25383adb2a64a8ca31b3bc5cbcb6690"}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"admin.system.version"}],"uuid":"c25383adb2a64a8ca31b3bc5cbcb6690"}
|
||||
BIN
.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/project.bson
Normal file
BIN
.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/project.bson
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"unique":true,"key":{"name":{"$numberInt":"1"}},"name":"name_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"_fts":"text","_ftsx":{"$numberInt":"1"}},"name":"textindex","ns":"tibi.project","weights":{"name":{"$numberInt":"1"}},"default_language":"german","language_override":"language","textIndexVersion":{"$numberInt":"3"}}],"uuid":"a0a6733bdb52400f9f3b17985bc28bcc"}
|
||||
BIN
.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/user.bson
Normal file
BIN
.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/user.bson
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"unique":true,"key":{"username":{"$numberInt":"1"}},"name":"username_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"_fts":"text","_ftsx":{"$numberInt":"1"}},"name":"textindex","ns":"tibi.user","weights":{"$**":{"$numberInt":"1"}},"default_language":"german","language_override":"language","textIndexVersion":{"$numberInt":"3"}}],"uuid":"ba627bbd4ac24b3ca92aebdc33b7d4b0"}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.lighthouse"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.lighthouse"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.lighthouse"}],"uuid":"fca0bbd4089a43689609593178154de9"}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.lighthouseSubpath"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.lighthouseSubpath"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.lighthouseSubpath"}],"uuid":"b72120ec4cd34054a83833dce78c869f"}
|
||||
Binary file not shown.
BIN
.gitea/actions/init-db/mongo-dump/tibi/project.bson
Normal file
BIN
.gitea/actions/init-db/mongo-dump/tibi/project.bson
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"unique":true,"key":{"name":{"$numberInt":"1"}},"name":"name_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"_fts":"text","_ftsx":{"$numberInt":"1"}},"name":"textindex","ns":"tibi.project","weights":{"name":{"$numberInt":"1"}},"default_language":"german","language_override":"language","textIndexVersion":{"$numberInt":"3"}}],"uuid":"a0a6733bdb52400f9f3b17985bc28bcc"}
|
||||
BIN
.gitea/actions/init-db/mongo-dump/tibi/user.bson
Normal file
BIN
.gitea/actions/init-db/mongo-dump/tibi/user.bson
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"unique":true,"key":{"username":{"$numberInt":"1"}},"name":"username_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"_fts":"text","_ftsx":{"$numberInt":"1"}},"name":"textindex","ns":"tibi.user","weights":{"$**":{"$numberInt":"1"}},"default_language":"german","language_override":"language","textIndexVersion":{"$numberInt":"3"}}],"uuid":"ba627bbd4ac24b3ca92aebdc33b7d4b0"}
|
||||
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.backups"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.backups"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.backups"}],"uuid":"4993cf280e844b5b80fe208350713002"}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.banner"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.banner"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.banner"}],"uuid":"7346de51448b4a27b289a0e32336d0b6"}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"meta.datum":{"$numberInt":"1"}},"name":"meta.datum_1","ns":"tibi_allkids_erfurt.content"}],"uuid":"df9951d7cf964e5e8a22360c09aa27c7"}
|
||||
BIN
.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/forms.bson
Normal file
BIN
.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/forms.bson
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.forms"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.forms"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.forms"}],"uuid":"7815c4dfc9d9460c8aac8cf94cc67ea6"}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.navigation"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.navigation"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.navigation"}],"uuid":"d989bd0ea7ba4ea4ae728b8a6baa62ba"}
|
||||
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"unique":true,"key":{"path":{"$numberInt":"1"}},"name":"path_1","ns":"tibi_allkids_erfurt.ssr"}],"uuid":"75869e19f8164beabe53366265b10208"}
|
||||
@@ -0,0 +1 @@
|
||||
{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.temperature"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.temperature"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.temperature"}],"uuid":"eb60c1bc334c4fa2a473fdb6c99b3e6a"}
|
||||
108
.gitea/actions/init-db/setConfigInTibiProject.sh
Normal file
108
.gitea/actions/init-db/setConfigInTibiProject.sh
Normal file
@@ -0,0 +1,108 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Start a GitHub Actions group for input validation
|
||||
echo "::group::Validating Inputs"
|
||||
|
||||
# Check if the correct number of arguments is passed
|
||||
if [ "$#" -ne 6 ]; then
|
||||
echo "Incorrect number of arguments provided."
|
||||
echo "Usage: $0 <TIBI_USERNAME> <TIBI_PASSWORD> <TIBI_API_URL> <PROJECT_API_CONFIG> <PROJECT_NAMESPACE> <PROJECT_NAME>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Assigning passed arguments to variables for better readability
|
||||
TIBI_USERNAME=$1
|
||||
TIBI_PASSWORD=$2
|
||||
TIBI_API_URL=$3
|
||||
PROJECT_API_CONFIG=$4
|
||||
PROJECT_NAMESPACE=$5
|
||||
PROJECT_NAME=$6
|
||||
|
||||
echo "Provided TIBI_USERNAME: $TIBI_USERNAME"
|
||||
echo "TIBI_API_URL: $TIBI_API_URL"
|
||||
# Be cautious with logging sensitive data like passwords and tokens
|
||||
# Echoing the password or sensitive information is generally not recommended
|
||||
|
||||
# End the input validation group
|
||||
echo "::endgroup::"
|
||||
|
||||
# Start a group for authentication
|
||||
echo "::group::Authenticating User"
|
||||
|
||||
# Prepare authentication request payload
|
||||
auth_payload=$(jq -n --arg username "$TIBI_USERNAME" --arg password "$TIBI_PASSWORD" '{username: $username, password: $password}')
|
||||
echo "Authentication payload: $auth_payload"
|
||||
# Fetch the authentication token
|
||||
echo "Requesting authentication token..."
|
||||
auth_response=$(curl -s -X POST -H "Content-Type: application/json" -d "$auth_payload" "$TIBI_API_URL/login")
|
||||
# Logging the response for debugging (remove sensitive data as necessary)
|
||||
echo "Authentication response: $auth_response"
|
||||
|
||||
# Extract token from the response
|
||||
TIBI_AUTH_TOKEN=$(echo $auth_response | jq -r '.token')
|
||||
|
||||
# Check if the token was successfully retrieved
|
||||
if [ -z "$TIBI_AUTH_TOKEN" ]; then
|
||||
echo "Failed to get authentication token. Exiting script."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Authentication token received successfully."
|
||||
echo "::endgroup::"
|
||||
|
||||
# Start a group for fetching project data
|
||||
echo "::group::Fetching Project Data"
|
||||
|
||||
# Get the list of projects from the API
|
||||
echo "Retrieving projects..."
|
||||
response=$(curl -s -H "X-Auth-Token: $TIBI_AUTH_TOKEN" "$TIBI_API_URL/project")
|
||||
echo $response
|
||||
projects=$(echo $response) # Parse the JSON response to get project data
|
||||
|
||||
echo "::endgroup::"
|
||||
|
||||
# Start a group for processing project data
|
||||
echo "::group::Processing Project Data"
|
||||
|
||||
# Initialize variables to track project existence
|
||||
projectFound=false
|
||||
projectId=""
|
||||
|
||||
# Loop through each project to find if the required project exists
|
||||
for row in $(echo "${projects}" | jq -r '.[] | @base64'); do
|
||||
_jq() {
|
||||
echo ${row} | base64 --decode | jq -r ${1}
|
||||
}
|
||||
|
||||
api_name=$(_jq '.name')
|
||||
# Check if the current project's namespace matches the target
|
||||
if [ "$api_name" == "$PROJECT_NAME" ]; then
|
||||
projectId=$(_jq '.id')
|
||||
projectData=$(echo ${row} | base64 --decode)
|
||||
projectFound=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
echo "::endgroup::"
|
||||
|
||||
# Start a group for creating or updating the project
|
||||
echo "::group::Creating or Updating Project"
|
||||
|
||||
# Conditionally create a new project or update the existing one
|
||||
if [ "$projectFound" = true ]; then
|
||||
echo "Project found with ID: $projectId, updating..."
|
||||
# Prepare updated project data
|
||||
updatedProjectData=$(echo $projectData | jq --arg configFile "$PROJECT_API_CONFIG" '.configFile = $configFile | del(.id)')
|
||||
# Send a PUT request to update the project
|
||||
updateResponse=$(curl -s -X PUT -H "Content-Type: application/json" -H "X-Auth-Token: $TIBI_AUTH_TOKEN" -d "$updatedProjectData" "$TIBI_API_URL/project/$projectId")
|
||||
# Logging the response for debugging (remove sensitive data as necessary)
|
||||
echo "Update response: $updateResponse"
|
||||
|
||||
else
|
||||
echo "Project not found. Creating new project..."
|
||||
# Send a POST request to create a new project
|
||||
createResponse=$(curl -s -X POST -H "Content-Type: application/json" -H "X-Auth-Token: $TIBI_AUTH_TOKEN" -d "{\"configFile\":\"$PROJECT_API_CONFIG\", \"name\":\"$PROJECT_NAMESPACE\", \"namespace\":\"$PROJECT_NAMESPACE\", \"description\":\"$PROJECT_NAMESPACE\"}" "$TIBI_API_URL/project")
|
||||
fi
|
||||
|
||||
echo "::endgroup::"
|
||||
@@ -3,80 +3,24 @@ name: deploy to production
|
||||
on: "push"
|
||||
jobs:
|
||||
lighthouse-evaluation:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ubuntu-latest
|
||||
services:
|
||||
mongo:
|
||||
image: mongo:4.2
|
||||
ports:
|
||||
- 27017:27017
|
||||
|
||||
maildev:
|
||||
image: gitbase.de/robin/maildev:latest
|
||||
ports:
|
||||
- 80:80
|
||||
- 25:25
|
||||
|
||||
tibi-server:
|
||||
image: gitbase.de/cms/tibi-server
|
||||
ports:
|
||||
- 8080:8080
|
||||
env:
|
||||
DB_DIAL: mongodb://mongo
|
||||
API_PORT: 8080
|
||||
MAIL_HOST: maildev:25
|
||||
SECURITY_ALLOWABSOLUTEPATHS: "true"
|
||||
SECURITY_ALLOWUPPERPATHS: "true"
|
||||
SECURITY_ALLOWRELATIVEPATHS: "true"
|
||||
|
||||
live-server:
|
||||
image: gitbase.de/robin/live-server:latest
|
||||
ports:
|
||||
- 8081:8081
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: "20"
|
||||
|
||||
- name: Load .env file
|
||||
run: |
|
||||
set -a
|
||||
source .env
|
||||
set +a
|
||||
|
||||
- name: Initialize database
|
||||
run: node /.gitea/actions/init-db
|
||||
env:
|
||||
PROJECT_API_NAMESPACE: $TIBI_NAMESPACE
|
||||
MONGODB_URI: mongodb://mongo #service name!
|
||||
TIBI_DB_PREFIX: $TIBI_PREFIX
|
||||
TIBI_API_URL: http://tibi-server:8080/api/v1
|
||||
|
||||
|
||||
deploy:
|
||||
name: deploy
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: gitbase.de/actions/ubuntu:latest
|
||||
volumes:
|
||||
- /data:/data
|
||||
|
||||
services:
|
||||
mongo:
|
||||
image: mongo:4.2
|
||||
ports:
|
||||
- 27017:27017
|
||||
options: --name mongo
|
||||
|
||||
maildev:
|
||||
image: gitbase.de/robin/maildev:latest
|
||||
ports:
|
||||
- 80:80
|
||||
- 25:25
|
||||
options: --name maildev
|
||||
|
||||
tibi-server:
|
||||
image: gitbase.de/cms/tibi-server
|
||||
@@ -89,11 +33,17 @@ jobs:
|
||||
SECURITY_ALLOWABSOLUTEPATHS: "true"
|
||||
SECURITY_ALLOWUPPERPATHS: "true"
|
||||
SECURITY_ALLOWRELATIVEPATHS: "true"
|
||||
options: --name tibi-server
|
||||
volumes:
|
||||
- ${{ github.workspace }}:/repo
|
||||
|
||||
live-server:
|
||||
image: gitbase.de/robin/live-server:latest
|
||||
image: gitbase.de/robin/apache-image:latest
|
||||
ports:
|
||||
- 8081:8081
|
||||
- 8081:80
|
||||
volumes:
|
||||
- ${{ github.workspace }}/frontend:/usr/local/apache2/htdocs/
|
||||
options: --name live-server
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
@@ -103,29 +53,31 @@ jobs:
|
||||
- name: setup node 18
|
||||
uses: actions/setup-node@v3
|
||||
|
||||
- name: container within a step
|
||||
uses: docker://node:20-alpine3.19
|
||||
- name: Initialize database
|
||||
uses: ./.github/actions/init-db
|
||||
with:
|
||||
entrypoint: echo
|
||||
args: "dastest"
|
||||
- name: check docker networking infos
|
||||
run: |
|
||||
echo "${{ toJson(job) }}"
|
||||
echo "${{ github }}"
|
||||
docker network ls
|
||||
docker network inspect bridge
|
||||
docker network inspect host
|
||||
docker network inspect none
|
||||
docker network inspect container:${{ job.services.tibi-server.id }}
|
||||
docker network inspect container:${{ job.services.live-server.id }}
|
||||
docker network inspect container:${{ job.services.mongo.id }}
|
||||
docker network inspect container:${{ job.services.maildev.id }}
|
||||
TIBI_API_NAMESPACE: allkids_erfurt
|
||||
TIBI_API_CONFIG_PATH: /repo/api/config.yml
|
||||
PROJECT_NAME: AllKids
|
||||
|
||||
- name: install dependencies
|
||||
env:
|
||||
FORCE_COLOR: "true"
|
||||
- name: SERVICE RESTART
|
||||
uses: docker://docker
|
||||
with:
|
||||
args: docker restart live-server tibi-server mongo maildev
|
||||
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
.yarn/cache
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: setup yarn
|
||||
run: |
|
||||
npm install -g yarn
|
||||
corepack enable
|
||||
corepack prepare yarn@3.2.4 --activate
|
||||
yarn install
|
||||
|
||||
- name: modify config
|
||||
@@ -165,38 +117,61 @@ jobs:
|
||||
run: |
|
||||
yarn build:server
|
||||
|
||||
- name: build legacy
|
||||
env:
|
||||
FORCE_COLOR: "true"
|
||||
run: |
|
||||
yarn build:legacy
|
||||
#- name: Load .env file
|
||||
# run: |
|
||||
# set -a
|
||||
# source .env
|
||||
# set + a
|
||||
|
||||
- name: Wait for Live Server
|
||||
- name: SERVICE RESTART
|
||||
uses: docker://docker
|
||||
with:
|
||||
args: docker restart live-server tibi-server
|
||||
|
||||
- name: wait for boot
|
||||
run: |
|
||||
attempts=0
|
||||
max_attempts=2
|
||||
while ! curl --output /dev/null --silent --head --fail http://live-server:8081; do
|
||||
if [ $attempts -eq $max_attempts ]; then
|
||||
echo "Live server not ready after $max_attempts attempts"
|
||||
echo "${{ toJson(job) }}"
|
||||
curl -v http://live-server:8081
|
||||
exit 1
|
||||
fi
|
||||
attempts=$((attempts+1))
|
||||
echo "Waiting for live-server to be ready... attempt $attempts"
|
||||
sleep 5
|
||||
done
|
||||
sleep 15
|
||||
|
||||
- name: Inspect Service Containers
|
||||
run: |
|
||||
for container_id in $(docker ps --format '{{.ID}}'); do
|
||||
echo "::group:: Container logs:"
|
||||
docker logs $container_id || true
|
||||
echo "::endgroup::"
|
||||
done
|
||||
|
||||
#- name: Wait for Live Server
|
||||
# run: |
|
||||
# attempts=0
|
||||
# max_attempts=5
|
||||
# same port since its inside the same network, so not 8081....
|
||||
# while ! curl --fail "http://live-server:80"; do
|
||||
# if [ $attempts -eq $max_attempts ]; then
|
||||
# echo "Live server not ready after $max_attempts attempts"
|
||||
# echo "${{ toJson(job) }}"
|
||||
# curl -v "http://live-server:80" || true
|
||||
# echo "::group::liveserver logs"
|
||||
# docker logs live-server
|
||||
# echo "::endgroup::"
|
||||
# echo "::group:: tibi-server logs"
|
||||
# docker logs tibi-server
|
||||
# echo "::endgroup::"
|
||||
# echo "::group:: tibi-server curl"
|
||||
# docker exec live-server cat /var/log/apache2/access.log || true
|
||||
# docker exec live-server bash -c "apt-get update && apt-get install -y curl"
|
||||
# docker exec live-server echo $PATH
|
||||
# docker exec live-server bash -c 'curl -v "http://tibi-server:8080/api/v1/_/allkids_erfurt/ssr?token=owshwerNwoa&url=/noindex"'
|
||||
# echo "::endgroup::"
|
||||
# exit 1
|
||||
# fi
|
||||
# attempts=$((attempts+1))
|
||||
# echo "Waiting for live-server to be ready... attempt $attempts"
|
||||
# sleep 5
|
||||
# done
|
||||
|
||||
- name: Test HTTP Request
|
||||
run: |
|
||||
echo "Live server not ready after $max_attempts attempts"
|
||||
echo "${{ toJson(job) }}"
|
||||
echo "${{ job.services.live-server.id }}"
|
||||
echo "${{ job.services.tibi-server.id }}"
|
||||
echo "${{ job.services.mongo.id }}"
|
||||
docker logs "${{ job.services.tibi-server.id }}"
|
||||
docker logs "${{ job.services.live-server.id }}"
|
||||
curl -v http://live-server:8081
|
||||
curl -v http://live-server:80
|
||||
|
||||
- name: Install Chrome
|
||||
run: |
|
||||
@@ -210,18 +185,94 @@ jobs:
|
||||
- name: Lighthouse Analysis
|
||||
run: |
|
||||
yarn add lighthouse
|
||||
npx lighthouse http://127.0.0.1:8081 --output json --output-path /tmp/lighthouse-report.json --chrome-flags="--headless --no-sandbox --disable-dev-shm-usage"
|
||||
npx lighthouse http://live-server:80 --output json --output-path /tmp/lighthouse-report.json --chrome-flags="--headless --no-sandbox --disable-dev-shm-usage"
|
||||
|
||||
# Notify-Lighthouse Step
|
||||
- name: Notify Lighthouse
|
||||
- name: upload-to-nextcloud
|
||||
run: |
|
||||
docker run --rm \
|
||||
-e PLUGIN_FROM=noreply@gitbase.de \
|
||||
-e PLUGIN_HOST=smtp.basehosts.de \
|
||||
-e PLUGIN_RECIPIENT=recipient@example.com \
|
||||
-e PLUGIN_SUBJECT="Lighthouse Report" \
|
||||
-v ${{ github.workspace }}/tmp:/lighthouse-reports \
|
||||
drillster/drone-email /tmp/lighthouse-report.json
|
||||
sudo apt-get update && sudo apt-get install -y curl bash findutils
|
||||
export datetime=`date +%Y-%m-%d_%H-%M-%S`
|
||||
mkdir -p /tmp/cloudsend/${GITHUB_REF_NAME}/$${datetime}
|
||||
mv /tmp/lighthouse-report.json /tmp/cloudsend/${GITHUB_REF_NAME}/$${datetime}/
|
||||
./scripts/cloudsend.sh /tmp/cloudsend/ https://www.basiswolke.de/index.php/s/xHGsypbqiifnGH5
|
||||
|
||||
deploy:
|
||||
name: deploy
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: gitbase.de/actions/ubuntu:latest
|
||||
volumes:
|
||||
- /data:/data
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
submodules: true
|
||||
|
||||
- run: |
|
||||
git fetch --force --tags
|
||||
|
||||
# setup node 20
|
||||
- name: setup node 20
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: install dependencies
|
||||
run: |
|
||||
npm install -g yarn
|
||||
yarn install
|
||||
|
||||
- name: modify config
|
||||
run: |
|
||||
sed -i 's#\(sentryEnvironment.*\)".*"#\1"${GITHUB_REF_NAME}"#g' frontend/src/config.ts
|
||||
sed -i 's#//\( sentry\\.init.*\)#\1#g' frontend/src/config.ts
|
||||
set -o allexport
|
||||
. ./.env
|
||||
echo "PROJECT_RELEASE=${SENTRY_PROJECT}.r`git rev-list HEAD --count`-`git describe --all --long | sed 's+/+-+'`" >> .env
|
||||
. ./.env
|
||||
set +o allexport
|
||||
echo ______ .env ______
|
||||
cat .env
|
||||
echo
|
||||
sed -i 's#\(const release = \).*#\1"'${PROJECT_RELEASE}'"#g' api/hooks/config-client.js
|
||||
sed -i 's#\(const originURL = \).*#\1"'${LIVE_URL}'"#g' api/hooks/config-client.js
|
||||
|
||||
# bash scripts/preload-meta.sh frontend/spa.html
|
||||
# bash scripts/preload-meta.sh frontend/spa.html > frontend/_spa.html
|
||||
# cp frontend/_spa.html frontend/spa.html
|
||||
|
||||
export stamp=`date +%s`
|
||||
sed -i s/__TIMESTAMP__/$stamp/g frontend/spa.html
|
||||
# sed -i s/__TIMESTAMP__/$stamp/g frontend/serviceworker.js
|
||||
# cat frontend/serviceworker.js
|
||||
rm api/templates/spa.html
|
||||
cp frontend/spa.html api/templates/spa.html
|
||||
echo ______ frontend/spa.html ______
|
||||
cat frontend/spa.html
|
||||
|
||||
# sed -i 's#\(PREVIEW_URL=\).*#\1'${LIVE_URL}/preview'#g' api/config.yml.env
|
||||
echo ______ api/config.yml.env ______
|
||||
cat api/config.yml.env
|
||||
|
||||
- name: build
|
||||
env:
|
||||
FORCE_COLOR: "true"
|
||||
run: |
|
||||
yarn build
|
||||
|
||||
- name: build ssr
|
||||
env:
|
||||
FORCE_COLOR: "true"
|
||||
run: |
|
||||
yarn build:server
|
||||
|
||||
- name: build legacy
|
||||
env:
|
||||
FORCE_COLOR: "true"
|
||||
run: |
|
||||
yarn build:legacy
|
||||
|
||||
- name: deploy
|
||||
if: github.ref == 'refs/heads/master'
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/b4a-npm-1.6.4-080bcba845-81b086f9af.zip
vendored
BIN
.yarn/cache/b4a-npm-1.6.4-080bcba845-81b086f9af.zip
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user