From edfca1f0078550faf51ceb237d6e574de03dc63c Mon Sep 17 00:00:00 2001 From: robin <binkrassdufass@gmail.com> Date: Sun, 24 Dec 2023 10:11:59 +0000 Subject: [PATCH] tst! and also made a mongodump on current local database for tests to have data --- .gitea/actions/init-db/action.yaml | 76 ++++++++++++ .gitea/actions/init-db/action.yml | 19 --- .gitea/actions/init-db/index.js | 116 ------------------ .../mongo-dump/tibi_allkids_erfurt/ssr.bson | Bin 67677 -> 33557 bytes .../actions/init-db/setConfigInTibiProject.sh | 108 ++++++++++++++++ 5 files changed, 184 insertions(+), 135 deletions(-) create mode 100644 .gitea/actions/init-db/action.yaml delete mode 100644 .gitea/actions/init-db/action.yml delete mode 100644 .gitea/actions/init-db/index.js create mode 100644 .gitea/actions/init-db/setConfigInTibiProject.sh diff --git a/.gitea/actions/init-db/action.yaml b/.gitea/actions/init-db/action.yaml new file mode 100644 index 0000000..95526f8 --- /dev/null +++ b/.gitea/actions/init-db/action.yaml @@ -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}} + + + + + + diff --git a/.gitea/actions/init-db/action.yml b/.gitea/actions/init-db/action.yml deleted file mode 100644 index 6755d6b..0000000 --- a/.gitea/actions/init-db/action.yml +++ /dev/null @@ -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/ - diff --git a/.gitea/actions/init-db/index.js b/.gitea/actions/init-db/index.js deleted file mode 100644 index e18dcbb..0000000 --- a/.gitea/actions/init-db/index.js +++ /dev/null @@ -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 diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.bson b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.bson index f1cadf763547db739dbfa86a2052151fbde61b80..a026cfd17bc821a3d26e8be31d8e91ed0f5c3d64 100644 GIT binary patch delta 9 QcmcaRfn{nN(+1II02NCE*8l(j delta 4003 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 diff --git a/.gitea/actions/init-db/setConfigInTibiProject.sh b/.gitea/actions/init-db/setConfigInTibiProject.sh new file mode 100644 index 0000000..7c570af --- /dev/null +++ b/.gitea/actions/init-db/setConfigInTibiProject.sh @@ -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::"