Skip to content
Snippets Groups Projects
Commit 4f5bf74e authored by michael.minelli's avatar michael.minelli
Browse files

Merge branch 'initial_release' into v2.2.0

parents 738e62ea 630e5dcb
No related branches found
No related tags found
No related merge requests found
Pipeline #26581 failed
Showing
with 420 additions and 9 deletions
.env
aws.xml aws.xml
workspace.xml workspace.xml
.gitlab-ci-local
Wiki/.idea
AssignmentChecker/src/config/Version.ts
############################ MacOS ############################ MacOS
# General # General
...@@ -184,11 +186,10 @@ web_modules/ ...@@ -184,11 +186,10 @@ web_modules/
.yarn-integrity .yarn-integrity
# dotenv environment variable files # dotenv environment variable files
.env .env*
.env.development.local .flaskenv*
.env.test.local !.env.project
.env.production.local !.env.vault
.env.local
# parcel-bundler cache (https://parceljs.org/) # parcel-bundler cache (https://parceljs.org/)
.cache .cache
...@@ -243,7 +244,7 @@ dist ...@@ -243,7 +244,7 @@ dist
########################### Gitlab Runner ########################### Gitlab Runner
builds/ builds/
localartifacts/ cache/
########################### JetBrains ########################### JetBrains
......
include: "AssignmentChecker/.gitlab-ci/**.yml"
lint_pass:
only:
variables:
- $FOO == "bar"
script:
- echo
\ No newline at end of file
[submodule "AssignmentChecker/.idea/jetbrainsConfiguration"]
path = AssignmentChecker/.idea/jetbrainsConfiguration
url = ../../shared/jetbrains_configuration.git
[submodule "AssignmentChecker/src/shared"]
path = AssignmentChecker/src/shared
url = ../../shared/nodesharedcode.git
[submodule "AssignmentChecker/src/sharedByClients"]
path = AssignmentChecker/src/sharedByClients
url = ../../shared/nodeclientsharedcode.git
#/-------------------.env.vault---------------------/
#/ cloud-agnostic vaulting standard /
#/ [how it works](https://dotenv.org/env-vault) /
#/--------------------------------------------------/
# development
DOTENV_VAULT_DEVELOPMENT="/LrM2dHMdkZ4WcPfZG1Fl75M7RmB0QBs4qQSGHS7l0H4FHODTSBqnny8vu4RxYn3lJwGackRGHVmChXk7D5PwDGL8S4tCGaEtKB7oIYjJ16b5xw41+z64KWrqZcgcCIM6qw5XQawfOefSV2ua08ZzOMb3Dt/qllZAkAk96VtTm3Z0TtzzU5C8KGqQOarxTTnQi1d4C0rLnrhkWBHa/KfPrlEipJvR/UR6UkS47eMzbuiKIclQpn6rifuV4dDN4krVBAIXRqoz8UHJemICVeTZutzJvWrrkldkGNdPxzmW34X5fC4ylcXwEoMOtGhtTZ8VMD4RSoAjetSIN782Uqv5AZVYA3WvvNCkEcxegEOhu+4HsCp9TVNRA7b5tC9CdFyNbWAQy1jKlEpnd3eQgK5K7l9OGUmq5+b/SU7Y3mcQIv+p3iDqQMa7jnl/O5iNQUDT0s/FeGTuuFaQjbCmb3L5J4VEJKVovSz/SXro5GjAnk2JUHg7njukYpX68xo6usYXqk6La77/cc7amsKw5703SnPtEU1bd+bKM/sklS5wvKDJXkE6l+lgygJmZ+TxZy3pHMxsrgvnaTxL2CTYL9nP55iUW17skx32R4Cv7WZNrXdll8Uvswrl/eUKmucrigeSV+tVXvCCsrTEhm79yEYzE4PU8ktIurBB2Wvxy4GKEVVOgcOK3AuUle9yApJVVtOzOaNAFQaSlVRZCqWA1U1A5N0SC+aLRbkkxEYM7LzfIXVlsVFDvTSSDogny380mFQDAfMnXqFRJasAUgfDHvFCHYKbCoUzRcdGvn8xIVLejhxUeYoO4fEHy1jxp6BrZWsvC8ByqPI8llIJyfqzpIrnZ7hKzKtNtwYN93NUwFsaf6Ke1ghLOziJejZfBoBMa0ny6GKhFyhfYtCMlW4hRvRpwUCbUtGGd8/EXanu9A+/C2mF9U7BtFtiXD9pDLoFT7RxHddhDyC6WyVKf2qJkBPLg=="
# production
DOTENV_VAULT_PRODUCTION="WylDNF/SdylCEvaQ1NAo9WOWmv8PvLA8L7wKhASX9ERiuKYPpuySEcQ1O14d2vOhs3Fb/ByftJRVEID8qQwuPjgXY81sLiMp7SknUYGmmM9ONHny6rpM412mP75MnaDKXTULSPmOy6j5mrq+vux1J04EAK8qsAe/AabamFU2wGgiZAREtZhCaV901/hh1qa7fgyjTCfz0hOpOs9SWFlHvJ4JjPatfi6h72+gfsVvtXDW+IPXTa4wYiXSty0j/PBf7x0ecvJoD3Xk3IQD+YtwNDTOK+Y2TgOo/GKRitj365cgHMW5enuZyWzXJkaBfyzofbNY9LWIk3YRiFtm2ixnadeHNMTotMo0XtQuNQ7yn7F34UGIM9cKcdLwzRfT8nbFQIsxwD8YQAttr6csNs7RDuQkgoF55eZNp+5mp87kJhVDHGdU2BnigeLwa2Em/kx3Mjacy00jggtrIokp2Di3023dUA6aAhpuyEAdQzBZBxELAisXdX5kyMe265Q9AGyc2OfFImLkdKfFgM/jDJMWRKg5NANoEAhv3UnPlhI6gzNiZuXCEl4+TEUkPxemxp9ylfL4wr9RARcVv+IarH6I996yZ8v2kWwYAd3jPw48OJYUgE+LVFualU5JTAse5jpiWtffn95od8VGtNj0O8BgotMTcH1F"
.env*
.flaskenv*
!.env.project
!.env.vault
\ No newline at end of file
variables:
GIT_SUBMODULE_STRATEGY: recursive
GIT_SUBMODULE_FORCE_HTTPS: "true"
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR:
DOCKER_DRIVER: overlay2
PROJECT_NAME: DojoAssignmentChecker
VERSION_DEV_SUFFIX: '-dev'
GITLAB_API_PROJECT_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}
DOCKERFILE: Dockerfile_AssignmentChecker
DOCKER_PLATFORMS: linux/amd64,linux/arm64/v8
PROJECT_FOLDER: AssignmentChecker
PACKAGE_REGISTRY_URL: "${GITLAB_API_PROJECT_URL}/packages/generic/${PROJECT_NAME}"
WIKI_FOLDER: Wiki
\ No newline at end of file
.get_version:
script:
- IS_DEV=$([[ $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH ]] && echo false || echo true)
- VERSION=$(jq -r .version $PROJECT_FOLDER/package.json)$([[ $IS_DEV == true ]] && echo $VERSION_DEV_SUFFIX || echo '')
.get_packages_url:
script:
# Wiki
- WIKI_ARCHIVE_NAME="${PROJECT_NAME}_Wiki_${VERSION}.tar.xz"
- PACKAGE_URL_WIKI="${PACKAGE_REGISTRY_URL}_Wiki/${VERSION}/${WIKI_ARCHIVE_NAME}"
.init_dind_script:
script:
# Install dependencies
- apk update
- apk add git
- apk add jq
- apk add curl
# Init docker buildx
- |
if [ $CI_COMMIT_REF_PROTECTED == "true" ]; then
docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWORD $DOCKER_REGISTRY
fi
- docker buildx create --use
# Get version from package.json
- !reference [ .get_version, script ]
- CONTAINER_IMAGE=$DOCKER_REGISTRY_IMAGE:$VERSION
.build_script:
script:
- !reference [ .init_dind_script, script ]
- mkdir -p $ARTIFACTS_FOLDER
# Decrypt env vars for production
- apk add npm sed
- cd $PROJECT_FOLDER
- sed -i -r "s/\{\{VERSION\}\}/${VERSION}/g" src/app.ts
- |
if [ $CI_COMMIT_REF_PROTECTED == "true" ]; then
echo "Decrypt production env vars"
sed -i -r "s/(DOTENV_KEY[ ]*:[ ]*[\'\"\`])[^'\"\`]*([\'\"\`])([ ]*\,)?//g" src/app.ts
sed -i -r "s/,[\ \n]*\}/\}/g" src/app.ts
npx dotenv-vault local decrypt "${DOTENV_PROD_KEY}" > .env
fi
- cd ..
# Need to build for each platform separately because of multi-stage builds (docker buildx don't use cache same way as docker build)
- >
platform_array=$(echo $DOCKER_PLATFORMS | tr "," "\n");
for platform in $platform_array; do
echo "Buildind for : $platform"
docker buildx build --pull --platform $platform --file $DOCKERFILE --tag $CONTAINER_IMAGE .
done
.clean_release:
script:
# Delete release if it already exists
- 'curl --request DELETE --header "JOB-TOKEN: $CI_JOB_TOKEN" "${GITLAB_API_PROJECT_URL}/releases/${VERSION}"'
# Delete tag if it already exists (use private-token because job-token don't have permission to delete tags)
- 'curl --request DELETE --header "PRIVATE-TOKEN: $GITLAB_PROJECT_ACCESS_TOKEN" "${GITLAB_API_PROJECT_URL}/repository/tags/${VERSION}"'
.clean_packages:
script:
# Get all packages of the project
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${GITLAB_API_PROJECT_URL}/packages" > gitlabPackages.json'
# Filter and select packages to delete (based on version)
- packagesToDelete=`jq -r '.[] | select(.version=="'${VERSION}'") | ._links.delete_api_path' gitlabPackages.json`
# Delete packages by calling Gitlab API
- >
for deletePath in $packagesToDelete; do
echo "Deleting package at path : ${deletePath}"
curl --request DELETE --header "JOB-TOKEN: $CI_JOB_TOKEN" "${deletePath}"
done
\ No newline at end of file
stages:
- test
- build
- clean
- upload
- release
\ No newline at end of file
test:build:
stage: test
tags:
- build
- dind
image: docker:latest
services:
- docker:dind
script:
- !reference [ .build_script, script ]
rules:
- if: '$CI_COMMIT_TAG =~ "/^$/" && $CI_COMMIT_REF_PROTECTED != "true"'
\ No newline at end of file
build:version:
stage: build
tags:
- build
- dind
image: docker:latest
services:
- docker:dind
script:
- !reference [ .build_script, script ]
# Here docker buildx can use cached images created in previous step
- docker buildx build --platform $DOCKER_PLATFORMS --file $DOCKERFILE --push --tag $CONTAINER_IMAGE .
rules:
- if: '$CI_COMMIT_REF_PROTECTED == "true"'
\ No newline at end of file
clean:release:
stage: clean
tags:
- gitlab_clean
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script:
- !reference [ .get_version, script ]
- !reference [ .clean_release, script ]
rules:
- if: '$CI_COMMIT_REF_PROTECTED == "true"'
clean:packages:
stage: clean
tags:
- gitlab_clean
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script:
- !reference [ .get_version, script ]
- !reference [ .clean_packages, script ]
rules:
- if: '$CI_COMMIT_REF_PROTECTED == "true"'
clean:dev:release:
stage: clean
tags:
- gitlab_clean
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script:
- !reference [ .get_version, script ]
- VERSION="${VERSION}${VERSION_DEV_SUFFIX}"
- !reference [ .clean_release, script ]
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
clean:dev:packages:
stage: clean
tags:
- gitlab_clean
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script:
- !reference [ .get_version, script ]
- VERSION="${VERSION}${VERSION_DEV_SUFFIX}"
- !reference [ .clean_packages, script ]
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
clean:dev:dockerhub:
stage: clean
tags:
- clean
- dind
image: docker:latest
services:
- docker:dind
script:
- !reference [ .init_dind_script, script ]
- VERSION="${VERSION}${VERSION_DEV_SUFFIX}"
# Remove dev tag
## Login to dockerhub (get JWT token)
- GET_TOKEN_DATA=$(jq --null-input --arg username "$DOCKER_REGISTRY_USER" --arg password "$DOCKER_REGISTRY_PASSWORD" '{"username":$username,"password":$password}')
- >
TOKEN=`curl --data "${GET_TOKEN_DATA}" \
--header "Content-Type: application/json" \
--header "JOB-TOKEN: $CI_JOB_TOKEN" \
"https://hub.docker.com/v2/users/login/" | jq -r .token`
## Delete tag
- 'curl --header "Authorization: JWT ${TOKEN}" --request DELETE "https://hub.docker.com/v2/repositories/${DOCKER_REGISTRY_IMAGE}/tags/${VERSION}/"'
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
\ No newline at end of file
upload:packages:wiki:
stage: upload
tags:
- gitlab_package
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script:
# Install dependencies
- apk update
- apk add xz
- !reference [ .get_version, script ]
- !reference [ .get_packages_url, script ]
# Create archive
- mkdir -p $ARTIFACTS_FOLDER
- WIKI_ARCHIVE_PATH="${ARTIFACTS_FOLDER}/${WIKI_ARCHIVE_NAME}"
- tar -v -c -C "${CI_PROJECT_DIR}/${WIKI_FOLDER}" -J -f "${WIKI_ARCHIVE_PATH}" . # Ubuntu: tar --verbose --create --cd wiki-test-2 --xz --file file.tar.bz2
# Send package
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${WIKI_ARCHIVE_PATH} "${PACKAGE_URL_WIKI}";'
rules:
- if: '$CI_COMMIT_REF_PROTECTED == "true"'
\ No newline at end of file
release:dockerhub:latest:
stage: release
tags:
- release
- dind
image: docker:latest
services:
- docker:dind
script:
- !reference [ .init_dind_script, script ]
# Push latest tag
- docker buildx imagetools create $CONTAINER_IMAGE --tag $DOCKER_REGISTRY_IMAGE:latest
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
release:wiki:
stage: release
tags:
- release
image: alpine:latest
script:
- apk update
- apk add git
- apk add jq
- !reference [ .get_version, script ]
# Define URL for the wiki in terms of project-agnostic predefined variables
- WIKI_URL="${CI_SERVER_PROTOCOL}://project_${CI_PROJECT_ID}_bot:${GITLAB_PROJECT_ACCESS_TOKEN}@${CI_SERVER_HOST}:${CI_SERVER_PORT}/${CI_PROJECT_PATH}.wiki.git"
# Clone this project's wiki under /tmp
- rm -rf "/tmp/${CI_PROJECT_NAME}.wiki"
- cd /tmp
- git clone "${WIKI_URL}"
# Enter the cloned repo
- cd "${CI_PROJECT_NAME}.wiki"
# Update the file
- mv .git/ ../
- rm -rf ./*
- mv ../.git/ ./
- cp "${CI_PROJECT_DIR}/.gitignore" .
- cp -R "${CI_PROJECT_DIR}/${WIKI_FOLDER}/." .
# Set committer info
- git config user.name "$GITLAB_USER_NAME"
- git config user.email "$GITLAB_USER_EMAIL"
# Commit the gitignore file
- git add ".gitignore"
- git commit -m "Add gitignore file" || true
# Commit the file
- git add .
- git commit -m "${VERSION}" || true
# Push the change back to the master branch of the wiki
- git push origin "HEAD:main"
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
release:gitlab:
stage: release
tags:
- release
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script:
- !reference [ .get_version, script ]
- echo 'Running release_job'
- !reference [ .get_packages_url, script ]
# Extract description from CHANGELOG.md
- CHANGELOG_LINE_START=`awk '/##\ [0-9]+\.[0-9]+\.[0-9]+/{print NR; exit;}' CHANGELOG.md`
- CHANGELOG_LINE_END=`awk '/##\ [0-9]+\.[0-9]+\.[0-9]+/{ count++; if(count>1) {print NR; exit;}}' CHANGELOG.md`
- DESCRIPTION=`awk 'NR > '$CHANGELOG_LINE_START' && NR < '$CHANGELOG_LINE_END'' CHANGELOG.md`
# Create Release (can't be done by release_step of gitlab image because it don't have access to env var defined in script_step)
- >
RELEASE_DATA=$(jq --null-input --arg version "$VERSION" --arg description "# Changelog (version $VERSION) $DESCRIPTION" --arg tag_name "$VERSION" --arg ref "$CI_COMMIT_SHORT_SHA" '{
"name": $version,
"description": $description,
"tag_name": $tag_name,
"ref": $ref,
"assets": {
"links": [
{
"name": "Wiki",
"url": "'${PACKAGE_URL_WIKI}'",
}
]
}
}')
- >
curl --data "${RELEASE_DATA}" \
--header "Content-Type: application/json" \
--header "JOB-TOKEN: $CI_JOB_TOKEN" \
--request POST "${GITLAB_API_PROJECT_URL}/releases"
rules:
- if: '$CI_COMMIT_REF_PROTECTED == "true"'
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<content url="file://$MODULE_DIR$/../../../UI/DojoCLI/.gitlab-ci-local">
<excludeFolder url="file://$MODULE_DIR$/../../../UI/DojoCLI/.gitlab-ci-local" />
</content>
<content url="file://$MODULE_DIR$/../../../UI/DojoCLI/NodeApp/.gitlab-ci-local">
<excludeFolder url="file://$MODULE_DIR$/../../../UI/DojoCLI/NodeApp/.gitlab-ci-local" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
jetbrainsConfiguration/codeStyles/
\ No newline at end of file
jetbrainsConfiguration/inspectionProfiles/
\ No newline at end of file
Subproject commit 4d703a2dd39ec0c2b71bbbbda8900588c4e360bd
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/AssignmentChecker.iml" filepath="$PROJECT_DIR$/.idea/AssignmentChecker.iml" />
</modules>
</component>
</project>
\ No newline at end of file
jetbrainsConfiguration/rootFiles/sqldialects.xml
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment