Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • jw_sonar
  • jw_sonar_backup
  • main
  • update-dependencies
  • v5.0.0
  • v6.0.0
  • 2.2.0
  • 3.0.0
  • 3.1.0
  • 3.2.0
  • 3.3.0
  • 3.4.0
  • 3.5.0
  • 4.0.0
  • 4.1.0
  • 4.1.1
  • 4.2.0
  • 5.0.0
  • 6.0.0-dev
19 results

Target

Select target project
  • dojo_project/projects/pipelines/dojoassignmentchecker
1 result
Select Git revision
  • jw_sonar
  • jw_sonar_backup
  • main
  • update-dependencies
  • v5.0.0
  • v6.0.0
  • 2.2.0
  • 3.0.0
  • 3.1.0
  • 3.2.0
  • 3.3.0
  • 3.4.0
  • 3.5.0
  • 4.0.0
  • 4.1.0
  • 4.1.1
  • 4.2.0
  • 5.0.0
  • 6.0.0-dev
19 results
Show changes
Commits on Source (6)
Showing with 378 additions and 161 deletions
......@@ -4,11 +4,11 @@
#/--------------------------------------------------/
# development
DOTENV_VAULT_DEVELOPMENT="wXBOtcsze+pmmGLl2aIrzqcQYvVWwO2wXyQW8rLrhdxDwU/10OfF49+nWmHxl8OVA3YrkHZ5UmdGbVyecwa+y6eH6pZv42MoP8MhkqXUVocnTAy86AqpLMeqj7/pTBae3UW+v4kZJnMCtsvPDnJKs/vuvAOBnXQbRB+SLCFpXtz+ZlQWqzKvxxakm60rrjazRQE9KiUVwFHPAKW+YdzdxXloaFP6Rzc3eCxRv6Je0C0QIiIs7MkuPqDNNF9J/5Yc+FKmzFaavVdlKBdxzzQ93FUbBFJzQ4bG6cEIutGkuKJtLRNOC7FR2M9tHMHb2q1csz5LmrqQ+HZd/qb8kTyuKGoKzjeEVEn4FK3tCQm6Qzbbw0Ktnzk7EsMT8E5hFa2bBx0XdDMUQzC7UYXS2BkIOP9JLrxStkMcwaCRAau+0nhbMdEynKHGubNtnQH0umY5TXtVC97huQjE09HtT0Ggx8VPiq3qE0gGYsa1y1c9LLV8ljQiUJDsUqri26QKu+iVJ/eIW4XSoEN+NgmDzEq8fd2rx6X0a9HcXDtpb3VX80FzZzwlvx+FUXOyrNY4WsQQTkwaPMpau8ppwSeQH1mjqNDAPNfR2cPv4mI8xE7Nz4XJAkC3/5H4rH511GrQ66ZyMpsTItOEOfX6gHabzdkqY4Vrv5ZYHVPzdh4+S+OAzuGR1wscxaZagHYrvi0/Hca/KX/d0mRWhFWCqD7tFV1w9cQasz0n2RDHIUMXYjO9ieBBPX/bQRbf4PW8MbxlVjtRrOJgrsi13Dn+UJI9m0V8DmQ4L/4+tmdI010e0/XA//IMiMKMLAM5EcXljy2et5ZscS1bejDaCsseKoN8BiYc3gtw93X8CGLHyr4m5F4Y+FcS02cts9QeQCVrBDgGBmZxYZSIxeg4sVNKgaXdbXKuhTctpwpKv4pIWyhGnm3yeXX4El3LZ3QtqpDwvnIk0JoNYCEnX2alQEfrl2LqIxMKgcyCir6pSkChuKov84oN1af1wfiJGt4NFfhRjR8oMjliY6dQB95HX+RS4A=="
DOTENV_VAULT_DEVELOPMENT="Ar4+WxQJ+Cx4+ypVs8w+/OlT6sJ2UwqvvWuT9YcAufPxHgo1/YDyQpwS6CGNdsA5FEnhM9dyuodCw8Mjdi3N1m3VFjPPelfq5v4O3qZPAiuAkpwRkf/pD9kfZ5/b/EhrCIJzJopQQCE8c3TuF6y+IfSv+/stw+bx3LzCmG7JIsRPXPJBjIYmj4vvXHRwRsLlsY/F0Vc7P2FCvyk8s4+bUzHZwAt2oMDFP8Q348eJdZ4QyJZzMVQf5XE6SMqMtR3nMxvE5H/UhH7nv6yN87CElDKtzSh4jCQS55rdaX209y4D+ogn5PFniUsGb8SAM04Igiu7OMqcbDXMH6axAHm3jBf2onbUwRnbLLdkF0lBngSJsYouQkcDhHXmqio3xGrH/jBwSkJK2UXs76ZnVMlqSi7ny5Hc5rXNjpBQKJXLk88uaHfN9Osh5lkDIUF6we6zYzXXQJpy3+9DJVmyBxTyQUnb1ku8/ttPDlWAV0CNUmju4M1MJAIcQqwEbvJ5xRd6ia2LywGqlAmVOSSqSEf72W+RktqjsNop1OFHEY+oYPjUVq35H2qxJWPDf3Mja3iULhaRegcoT1N45Uu9GWl4EY2VWt2kTfYcbEMSdXj3mHJuvQEHdRGCD/HK52Gfa9WCaVoltR5NQ5G06/x1IRELCOjVoAjs9jhDwNnHTuxGLX6vUZX5RsOFnyvIhtX/LRMyAturYPODuw8ToPlHeZaQuVk8kMjfzSzCW2ixRkG79JWTHSBHhdJ/jQ3sFsby7c8u475rNc/ECeqOWRgjthjLf3JUnbjSQ5Y="
# production
DOTENV_VAULT_PRODUCTION="Rcz6CubfWYYhOvVAbYeVx+T7GLZH0eJ0s2Q27YSw826Cdy1T667ZxiW/mAByMuGO7hILoZDrpOzcRAXs0vV6h1yH7cF7ZPt1bip+Xbpowuz+ietTKEG2xQefwQCHi3n4hnU9mE5LYU/HKmux9NVwlTOJ990t9YKnzwvq3RlWSdLWqHqPTsRfCfcfss0SpSUiJ0IcvSb11JOmZaA+x2vcE9o3emPIirGa3Vctkrtj9LZ8ZCT60VeKGh2PAi5ZK4aekV/B3lTzenXXzht6ukGJrhvp7EZCCAfubrq4EKXZtFlzBqXjtK1Yspcnq3igY4Tyr7xry+wnPBHw0nlO8gBmG9nYWv0eNqDpf4r7p7K2zTk1RqDQB+avvjFhPvcpKIkpFQNimL+1bDNwI9v60gYH2hhn5vEZ2ILCaMeVlEfL9oQIiKtusJJon+6LcyykshpXSLqtmSm00A8h5eab4DpvCTk+ancvJzzuIxnX4b11xVtSChBxN9QGAsjN0O8SS6C+ZEybphUOiMHRS2deqKu65tF7+8sLnRf0WXWuaEZppuRv2wLft6Qaf09+JSCgtk4BXF/8vKBDNIO8Dnp3iQyShP+h29+BuNFzs4dpIvv51DBZ3uUEzBXdgm89eyRzr/xWueg1VqsEZ+ztDXCMRzN/aSg7DSv9V6TwKaKPyhSUeyfhbFfzr2OW145IUzFGEgtaM/8Yw4HWE+hqMbVL+tsp+Pz5fR1jb52+oQE5pibmTjNcQ2eivUid5A5kVD622tnC3h5+rV55wVIbKVJ/ZzunajA064LH6Alqx6sBJVhe4j3UwT/yuxAWqWiu/6bBloIx6bXxnOskpDddAfkXuQUk7DchABYMvAlko+O3OPE6fgx3bGNhC48fm5etbDlF92w6HUqCrpGHZ2xZkdGwwho4p9oUkE0QgPXBIgYUmYq4987PXrE="
DOTENV_VAULT_PRODUCTION="Jc0E0rOwIHh1GduNwYWFwU8AYEmkNVK1IKErjPSlPrS5mKr7RpWZyC5297/q0Hvla0VkEvID5qzs04F9SufOWqXgLlFUPL/gizc1p9poHyV1EVQqD8BsV6prlma6z6Wu3DP3i5GfcHIcaZTMq8CBuWcSNoQs7OhJNpUhy0Mw3kJgk6EeLRQ11qNJBSFyLUB2LZ5Y065tQXxxCTPuC9FteyUSi4J8jxBTE8xW4Fy9Fi7+0e6yRFp92aS13qbJKunNeFF27DRIVdr8qpiXgTCovE2B7fJ7aiPe4CC37WB7mPXtxB2AxkHDi6uU6U/4TtNTCtkP9erQ7LKPReCsxg+U9EMmE5zesvxfYeBBkG2Ex9IaNfC7d8GBz60mlK5BtJd2cIF1MDkH5hS1t/ogRpi7t0WV6cWhFGakoz+vULqDVcrYYX7I9Wnw+sfMFOgjO5c1/SvZe8waNav3m7Ji/IFztWWu1d7UI0PdaK3sJBHN/G01+La9S0WInGl2yPFoPQrPEEn0DusEFC6ISeezTwdNdzCmf28/PEag8ghfXj1c11Egrwfwjo2x6d/Qy6/0tqXlPSwdUqAZ5o/xwIjpa5JtUxKlxwEEEbc8oOIBnsKglWSlbOpkb8J+ITXjk7Q/y6uf6ey7LprYtIO8rOovQLtwfppMS441WoIVpKB6FAmfmPYqabz5vQzdWz3RGZKG87un"
# test
DOTENV_VAULT_TEST="1OLBaEdDI49XBdJOU8NyqevOHbM9PhUYmtRXRTdxeJL9WtSU/kp1gk8bmDlUoUe5tGnzZDuu3O9GEMyp+c5VQquaWsj5vH9+m1GRPwf5UbKETHvHfrGEknytjMahZF5kAydDnp1DZHWRYpG/KBgC2UvN3/jUP4xkDdmpt+iDUIjV7Uto5Lw6B6iWEu5i5eaye9SiPjtouMzyHoAUNP3ViCI0pB/H/8yOUYiWVNtZs/88MUN+QAtekBWfeRQ+nDSYsJMQ0JwD6eDlxSuJ9HkXRGwzIISsHUd/7qFh3dAjQRJZDAjEezcrw2QoCliaxWcnhu6POmZUfJTQYj+g6hSK3Hpv780o+BYIXLyvXJoKdvLiUQyElyibgOYOzPTwuDWTA3MbM3660Sjpbf+ZvukFS3nnKJmv7eH61/UFTbZMAR78Fy1WUD5qwZYxp61W8NGWaoGqwWOe30ZyLWDZH3M9aNarp7U4rjizcvfFiUfUo+9CyPlgk05hT+cklaoqdckNjAPzlwoOdng34bSfBvpjAtCCyS8vH5RPtw4KerEESO7/8bqUEf/YIyFHYcUitUPVSgXJnuyysqrTmPq5TPiBezwRquBMvTW46KMQTrnk4+6bKxd+Mqev16rW1UsMJqlEM35cSMjKaxPa7LT0KuGvkcVqpHHdypdvQtZ0PlTlmTutuqNwqmBfEPRZqnSOKVirlL159A1fZIOof6mWy4lzQe1f/AQb9vIL5K8QjHHZ0MJt2lZG/vlZRpXcVWegZyYUQOXKjLgijuozjg09xOakhLPncjM1Krgr70d7f0zN/OFTjcaBPIKOSAf3vDrpSetQyZTNDWl9+vB+J0/b+nbwx0Wv5D8Il2rMfnvLpg=="
DOTENV_VAULT_TEST="Uby3FPI51CVAoTBVItqiAewUKWWVgK5t5OF5JpkzWFqREtJMrIp8UKQdh1mBOkf5Le4Xt55Sy0wtCY/VjZg+qDWfJE61Sw35Ba+zZa11gbJJEFeEZC59/sVikIK+wKRCuw/k39c1Kb8EDBXwzxLkMFGeBTlAfYjNvua+svAmwKo9JhQrOPMLCO7KmZgLd5GJLJsLiHhTZLOOJKEHbjJ1XSct2IxQ4H9PulWqF9BlGj+xthko6Tl+Y1+xmxP+AKC0pCTGaKU9tdQQDW007jeBJEk2BN8lhgAmfyOHKHA9WAoDndG8nFMckVjN+x52OD8dRat20Z0i/rJbfhuN9Mc2Sqvz/4ztJM94vKjI+TPX5msc2VVavRPCEaAAHoFhKyDK7E9OiSD4hdYJPaehZg0cfV+Lmg9e+FE3UX9LVjJxqTNw40FtNyGHl4UsrbbTiPhK2EB02rD6j99y1JizMaoC5h0Qj5f0gDUlxNQi3lLT5r4jR2pjxPr8SOjOiE0j99xuIlr/UbW/hS6fLMfEERD3deJhieOpF20ESe3e3dFnDkVWpPjVeWVMMhgad+jHS2RGoy87n3KaJML1VJpiDBNQeM1ndmYhcqK6ULmPwcPgeg+X"
......@@ -75,7 +75,7 @@
- >
platform_array=$(echo $DOCKER_PLATFORMS | tr "," "\n");
for platform in $platform_array; do
echo "Buildind for : $platform"
echo "Building for: $platform"
docker buildx build --pull --platform $platform --file $DOCKERFILE --tag $CONTAINER_IMAGE .
done
......
jetbrainsConfiguration/dataSources/
\ No newline at end of file
########################### Node env vars
NODE_ENV=production
########################### App env vars
APP_NAME='DOJO ASSIGNMENT CHECKER'
ASSIGNMENT_FILENAME=dojo_assignment.json
ASSIGNMENT_NEEDED_FILES='["${ASSIGNMENT_FILENAME}", "docker-compose.yml"]'
LOGS_FOLDER=logs
EXERCISE_RESULTS_VOLUME=$CI_PROJECT_DIR/Results_of_exercise_$DOJO_EXERCISE_ID/
EXERCISE_RESULTS_FILENAME=results.json
DOCKER_COMPOSE_PROJECT_NAME=dojo
\ No newline at end of file
This diff is collapsed.
......@@ -4,7 +4,6 @@
"version" : "5.0.0",
"license" : "AGPLv3",
"author" : "Michaël Minelli <dojo@minelli.me>",
"type" : "module",
"main" : "dist/app.js",
"bin" : {
"dirmanager": "./dist/app.js"
......@@ -26,7 +25,7 @@
"lint" : "npx eslint .",
"genversion" : "npx genversion -s -e src/config/Version.ts",
"build" : "npm run genversion; npx tsc",
"start:dev" : "npm run genversion; npm run lint; tsc --noEmit && npx tsx dist/app.js",
"start:dev" : "npm run genversion; npm run lint; tsc --noEmit && npx tsx --no-warnings src/app.ts",
"test" : "echo \"Error: no test specified\" && exit 1"
},
"dependencies" : {
......
......@@ -6,9 +6,14 @@ import Styles from './types/Style.js';
import HttpManager from './managers/HttpManager.js';
import Config from './config/Config.js';
import Icon from './shared/types/Icon.js';
import SharedAssignmentHelper from './shared/helpers/Dojo/SharedAssignmentHelper';
(async () => {
await Config.init();
SharedAssignmentHelper.init(Config.gitlabManager);
HttpManager.registerAxiosInterceptor();
console.log(Styles.APP_NAME(`${ Config.appName } (version {{VERSION}})`));
......
import fs from 'fs-extra';
import path from 'path';
import fs from 'fs-extra';
import path from 'path';
import GitlabManager from '../managers/GitlabManager';
import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
class Config {
public readonly appName: string;
public gitlabManager!: GitlabManager;
public readonly folders: {
public appName!: string;
public folders!: {
project: string; resultsVolume: string; resultsDojo: string; resultsExercise: string;
};
public readonly dockerhub: {
public dockerhub!: {
repositories: {
assignmentChecker: string
}
};
constructor() {
this.appName = process.env.APP_NAME || '';
constructor() { }
async init() {
const apiUrl = process.env.API_URL ?? '';
await ClientsSharedConfig.init(apiUrl);
const getEnvVar = ClientsSharedConfig.envVarGetter();
this.gitlabManager = new GitlabManager(ClientsSharedConfig.gitlab.URL, ClientsSharedConfig.login.gitlab.client.id, ClientsSharedConfig.login.gitlab.url.redirect, ClientsSharedConfig.login.gitlab.url.token);
this.appName = getEnvVar('APP_NAME', '');
this.folders = {
project : process.env.PROJECT_FOLDER?.convertWithEnvVars() ?? './',
resultsVolume : process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '',
resultsDojo : path.join(process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '', 'Dojo/'),
resultsExercise: path.join(process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '', 'Exercise/')
project : getEnvVar('PROJECT_FOLDER', './').convertWithEnvVars(),
resultsVolume : getEnvVar('EXERCISE_RESULTS_VOLUME', '').convertWithEnvVars(),
resultsDojo : path.join(getEnvVar('EXERCISE_RESULTS_VOLUME', '').convertWithEnvVars(), 'Dojo/'),
resultsExercise: path.join(getEnvVar('EXERCISE_RESULTS_VOLUME', '').convertWithEnvVars(), 'Exercise/')
};
this.resetResultsVolume();
this.dockerhub = {
repositories: {
assignmentChecker: process.env.DOCKERHUB_ASSIGNMENT_CHECKER_REPOSITORY || ''
assignmentChecker: getEnvVar('DOCKERHUB_ASSIGNMENT_CHECKER_REPOSITORY', '')
}
};
}
......
......@@ -7,4 +7,6 @@ import './shared/helpers/TypeScriptExtensions.js';
dotenvExpand.expand(dotenv.config({
path : path.join(__dirname, '../.env'),
DOTENV_KEY: 'dotenv://:key_f1778b6998874f6fd78c716ccef982c5595fa300f174b129eafc88ba7044d69b@dotenv.local/vault/.env.vault?environment=development'
}));
\ No newline at end of file
}));
dotenvExpand.expand(dotenv.config({ path: path.join(__dirname, '../config.env') }));
\ No newline at end of file
......@@ -4,10 +4,10 @@ import SharedGitlabManager from '../shared/managers/SharedGitlabManager.js';
// File present only for prevent errors from shared submodules
class GitlabManager extends SharedGitlabManager {
constructor() {
super('');
constructor(public gitlabUrl: string, clientId?: string, urlRedirect?: string, urlToken?: string) {
super(gitlabUrl, '', clientId, urlRedirect, urlToken);
}
}
export default new GitlabManager();
\ No newline at end of file
export default GitlabManager;
\ No newline at end of file
Subproject commit bf75a99ba472386daa111c2fefbe69a4272ef48c
Subproject commit d9ecaee5f58b1b94413903ebf737b4d235bc2858
Subproject commit 4e33e70f6035898f119369ae5db784d51d8298a0
Subproject commit 64dc406659114f3afcbc89258afe84c8553c6b8f
{
"compilerOptions": {
"rootDir" : "src",
"outDir" : "dist",
"strict" : true,
"target" : "ES2022",
"module" : "commonjs",
"sourceMap" : true,
"noImplicitAny" : true,
"esModuleInterop" : true,
"lib" : [
"rootDir" : "src",
"outDir" : "dist",
"strict" : true,
"target" : "ES2022",
"module" : "commonjs",
"sourceMap" : true,
"noImplicitAny" : true,
"esModuleInterop": true,
"lib" : [
"ES2022",
"DOM"
],
"types" : [
"types" : [
"node"
]
},
......@@ -20,6 +20,7 @@
"node_modules"
],
"include" : [
"src/**/*.ts"
"src/**/*.ts",
"eslint.config.mjs"
]
}
\ No newline at end of file
#!/bin/bash
# Define color codes
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
DOCKERFILE=Dockerfile_AssignmentChecker
PROJECT_FOLDER=AssignmentChecker
test_if_command_unsuccessful() {
local status=$1
local title=$2
local text_if_failed=$3
if [ "$status" -ne 0 ]; then
echo -e "${title}: ${RED}${text_if_failed}: $status${NC}\n"
exit 1
fi
}
##########################################################
# Function to prompt for input if not provided
prompt_if_empty() {
local var_name=$1
local prompt_message=$2
local var_value=${!var_name}
if [ -z "$var_value" ]; then
read -p "$prompt_message: " var_value
export "$var_name"="$var_value"
fi
}
# Parse parameters
while [ "$1" != "" ]; do
case $1 in
--dockerhub-user ) shift
DOCKER_REGISTRY_USER=$1
;;
--dockerhub-password ) shift
DOCKER_REGISTRY_PASSWORD=$1
;;
--dockerhub-repo ) shift
DOCKER_REGISTRY_IMAGE=$1
;;
--backend-url ) shift
API_URL=$1
;;
* ) echo -e "${RED}Invalid parameter: $1${NC}"
exit 1
esac
shift
done
# Prompt for values if not provided
prompt_if_empty "DOCKER_REGISTRY_USER" "Docker Hub user"
prompt_if_empty "DOCKER_REGISTRY_PASSWORD" "Docker Hub password"
prompt_if_empty "DOCKER_REGISTRY_IMAGE" "Docker Hub repository"
prompt_if_empty "API_URL" "Backend url"
##########################################################
# Function to check if a command exists
check_dependency() {
local cmd=$1
if ! command -v $cmd &> /dev/null; then
echo -e "${RED}Error: $cmd is not installed.${NC}"
exit 1
fi
}
# Check for dependencies
echo -e "Dependencies: ${YELLOW}Checking...${NC}"
check_dependency jq
check_dependency docker
check_dependency sed
echo -e "Dependencies: ${GREEN}OK${NC}\n"
VERSION=$(jq -r .version $PROJECT_FOLDER/package.json)
CONTAINER_IMAGE=$DOCKER_REGISTRY_IMAGE:$VERSION
##########################################################
# Login to Docker Hub
echo -e "Docker Hub: ${YELLOW}Login in...${NC}"
echo "$DOCKER_REGISTRY_PASSWORD" | docker login -u "$DOCKER_REGISTRY_USER" --password-stdin "$DOCKER_REGISTRY" > /dev/null
test_if_command_unsuccessful $? "Docker Hub" "FAILED to login in"
echo -e "Docker Hub: ${GREEN}Logged in${NC}\n"
##########################################################
echo -e "Project files: ${YELLOW}Configuring...${NC}"
(
cd $PROJECT_FOLDER || exit 1
sed -i -r "s/\{\{VERSION\}\}/${VERSION}/g" src/app.ts 2> /dev/null
if [ $? -ne 0 ]; then # If on macOS
sed -i -r "s/{{VERSION}}/${VERSION}/g" src/app.ts 2> /dev/null
fi
sed -i -r "s/(DOTENV_KEY[ ]*:[ ]*[\'\"\`])[^'\"\`]*([\'\"\`])([ ]*\,)?//g" src/init.ts
sed -i -r "s/,[\ \n]*\}/\}/g" src/init.ts
# Write the content to the file
cat <<EOL > ".env"
##################### App env vars
API_URL=${API_URL}
DOCKERHUB_ASSIGNMENT_CHECKER_REPOSITORY=${DOCKER_REGISTRY_IMAGE}
EOL
)
echo -e "Project files: ${GREEN}Configured${NC}\n"
##########################################################
echo -e "Docker: ${YELLOW}Building/Uploading to Docker Hub...${NC}"
docker buildx create --use --platform=linux/amd64 > /dev/null 2> /dev/null
test_if_command_unsuccessful $? "Docker" "FAILED to initialize builder"
docker buildx build --platform=linux/amd64 --file $DOCKERFILE --push --tag "$CONTAINER_IMAGE" . > /dev/null 2> /dev/null
test_if_command_unsuccessful $? "Docker" "FAILED to build"
docker buildx imagetools create "$CONTAINER_IMAGE" --tag "$DOCKER_REGISTRY_IMAGE":latest > /dev/null 2> /dev/null
test_if_command_unsuccessful $? "Docker" "FAILED to set latest tag"
echo -e "Docker: ${GREEN}Uploaded to Docker Hub${NC}\n"
\ No newline at end of file