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
  • v6.0.0
  • update-dependencies
  • main
  • v5.0.0
  • jw_sonar_backup
  • 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
No results found
Select Git revision
  • jw_sonar
  • v6.0.0
  • update-dependencies
  • main
  • v5.0.0
  • jw_sonar_backup
  • 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

14 files
+ 378
161
Compare changes
  • Side-by-side
  • Inline

Files

Original line number Diff line number Diff line
@@ -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"
Original line number Diff line number Diff line
@@ -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

+15 −0
Original line number Diff line number Diff line
########################### 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
Original line number Diff line number Diff line
@@ -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"   : {
Original line number Diff line number Diff line
@@ -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}})`));
Original line number Diff line number Diff line
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', '')
            }
        };
    }
Original line number Diff line number Diff line
@@ -8,3 +8,5 @@ dotenvExpand.expand(dotenv.config({
                                      path      : path.join(__dirname, '../.env'),
                                      DOTENV_KEY: 'dotenv://:key_f1778b6998874f6fd78c716ccef982c5595fa300f174b129eafc88ba7044d69b@dotenv.local/vault/.env.vault?environment=development'
                                  }));

dotenvExpand.expand(dotenv.config({ path: path.join(__dirname, '../config.env') }));
 No newline at end of file
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
        "node_modules"
    ],
    "include"        : [
        "src/**/*.ts"
        "src/**/*.ts",
        "eslint.config.mjs"
    ]
}
 No newline at end of file

deploy_on_dockerhub.sh

0 → 100755
+135 −0
Original line number Diff line number Diff line
#!/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