Compare commits
1 Commits
edfca1f007
...
897a668637
Author | SHA1 | Date | |
---|---|---|---|
897a668637 |
@ -1,76 +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'
|
|
||||||
|
|
||||||
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}}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
19
.gitea/actions/init-db/action.yml
Normal file
19
.gitea/actions/init-db/action.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
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/
|
||||||
|
|
116
.gitea/actions/init-db/index.js
Normal file
116
.gitea/actions/init-db/index.js
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
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
|
Binary file not shown.
@ -1,108 +0,0 @@
|
|||||||
#!/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::"
|
|
Loading…
Reference in New Issue
Block a user