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

Merge branch 'v3.4.0'

parents 1a8c8408 6e74465a
Branches
Tags 3.4.1
No related merge requests found
...@@ -18,7 +18,19 @@ ...@@ -18,7 +18,19 @@
--> -->
## 3.3.0 (???) ## 3.4.0 (???)
### ✨ Feature
- Limit of 2 exercises by user
### 🔨 Internal / Developers
- **CLI**: Suffix package and binaries with version name
### 🐛 Bugfix
- **CLI CI/CD**: Fix deletion of packages on release
## 3.3.0 (2023-01-18)
### ✨ Feature ### ✨ Feature
- Add a run command on assignment (to run the assignment as an exercise) - Add a run command on assignment (to run the assignment as an exercise)
......
...@@ -12,6 +12,19 @@ ...@@ -12,6 +12,19 @@
BIN_NAME="dojo-test" BIN_NAME="dojo-test"
DOTENV_PROD_KEY=$DOTENV_TEST_KEY DOTENV_PROD_KEY=$DOTENV_TEST_KEY
fi fi
.get_version:
script:
- VERSION=$(jq -r .version $PROJECT_FOLDER/package.json)$([[ $IS_TEST == true ]] && echo $VERSION_TEST_SUFFIX || echo '' )$([[ $IS_DEV == true ]] && echo $VERSION_DEV_SUFFIX || echo '')
# Require that the VERSION env var is set
.get_version_dependent_vars:
script:
- BIN_NAME_BASE="${BIN_NAME}"
- BIN_NAME="${BIN_NAME_BASE}${VERSION}"
- PKG_BIN_NAME_DEBIAN="${BIN_NAME}${PKG_EXTENSION_DEBIAN}" - PKG_BIN_NAME_DEBIAN="${BIN_NAME}${PKG_EXTENSION_DEBIAN}"
- PKG_BIN_NAME_MACOS="${BIN_NAME}${PKG_EXTENSION_MACOS}" - PKG_BIN_NAME_MACOS="${BIN_NAME}${PKG_EXTENSION_MACOS}"
- BIN_NAME_WINDOWS="${BIN_NAME}${BIN_EXTENSION_WINDOWS}" - BIN_NAME_WINDOWS="${BIN_NAME}${BIN_EXTENSION_WINDOWS}"
...@@ -31,11 +44,6 @@ ...@@ -31,11 +44,6 @@
- PACKAGE_REGISTRY_URL="${GITLAB_API_PROJECT_URL}/packages/generic/${BIN_NAME}" - PACKAGE_REGISTRY_URL="${GITLAB_API_PROJECT_URL}/packages/generic/${BIN_NAME}"
.get_version:
script:
- VERSION=$(jq -r .version $PROJECT_FOLDER/package.json)$([[ $IS_TEST == true ]] && echo $VERSION_TEST_SUFFIX || echo '' )$([[ $IS_DEV == true ]] && echo $VERSION_DEV_SUFFIX || echo '')
.get_last_stable_version: .get_last_stable_version:
script: script:
# Get all releases of the project # Get all releases of the project
...@@ -127,10 +135,10 @@ ...@@ -127,10 +135,10 @@
.clean_packages: .clean_packages:
script: script:
# Get all packages of the project # Get all packages of the project
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${GITLAB_API_PROJECT_URL}/packages" > gitlabPackages.json' - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${GITLAB_API_PROJECT_URL}/packages?sort=desc&package_version=${VERSION}" > gitlabPackages.json'
# Filter and select packages to delete (based on version) # Filter and select packages to delete (based on version)
- packagesToDelete=`jq -r '.[] | select(.version=="'${VERSION}'") | ._links.delete_api_path' gitlabPackages.json` - packagesToDelete=`jq -r '.[] | ._links.delete_api_path' gitlabPackages.json`
# Delete packages by calling Gitlab API # Delete packages by calling Gitlab API
- > - >
......
...@@ -12,16 +12,17 @@ ...@@ -12,16 +12,17 @@
# Get vars # Get vars
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- !reference [ .get_last_stable_version, script ] - !reference [ .get_last_stable_version, script ]
- cd $BIN_FOLDER_DEBIAN_PKG_AND_SIGN - cd $BIN_FOLDER_DEBIAN_PKG_AND_SIGN
- PKG_BUILD_FOLDER_NAME="${BIN_NAME}_${VERSION}_${ARCH}" - PKG_BUILD_FOLDER_NAME="${BIN_NAME_BASE}_${VERSION}_${ARCH}"
# Pkg tree creation # Pkg tree creation
- mkdir -p "${PKG_BUILD_FOLDER_NAME}/usr/local/bin/" - mkdir -p "${PKG_BUILD_FOLDER_NAME}/usr/local/bin/"
## Copy binary ## Copy binary
- cp -R ${BIN_NAME} "${PKG_BUILD_FOLDER_NAME}/usr/local/bin/" - cp -R ${BIN_NAME} "${PKG_BUILD_FOLDER_NAME}/usr/local/bin/${BIN_NAME_BASE}"
## Copy debian folder with package definition files ## Copy debian folder with package definition files
- cp -R "${RESOURCES_FOLDER}/Debian/pkg/DEBIAN" "${PKG_BUILD_FOLDER_NAME}" - cp -R "${RESOURCES_FOLDER}/Debian/pkg/DEBIAN" "${PKG_BUILD_FOLDER_NAME}"
...@@ -30,18 +31,18 @@ ...@@ -30,18 +31,18 @@
## control file ## control file
- sed -i -r "s%\{\{VERSION\}\}%${VERSION}%g" control - sed -i -r "s%\{\{VERSION\}\}%${VERSION}%g" control
- sed -i -r "s%\{\{ARCH\}\}%${ARCH}%g" control - sed -i -r "s%\{\{ARCH\}\}%${ARCH}%g" control
- sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME}%g" control - sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME_BASE}%g" control
## changelog file ## changelog file
- STABILITY=$([[ $IS_DEV == true ]] && echo 'unstable' || echo 'stable') - STABILITY=$([[ $IS_DEV == true ]] && echo 'unstable' || echo 'stable')
- PRIORITY=$([[ ${VERSION%.*} == ${LAST_STABLE_VERSION%.*} ]] && echo 'medium' || echo 'high') - PRIORITY=$([[ ${VERSION%.*} == ${LAST_STABLE_VERSION%.*} ]] && echo 'medium' || echo 'high')
- sed -i -r "s%\{\{VERSION\}\}%${VERSION}%g" changelog - sed -i -r "s%\{\{VERSION\}\}%${VERSION}%g" changelog
- sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME}%g" changelog - sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME_BASE}%g" changelog
- sed -i -r "s%\{\{DATE\}\}%$(date -R)%g" changelog - sed -i -r "s%\{\{DATE\}\}%$(date -R)%g" changelog
- sed -i -r "s%\{\{URL\}\}%${CI_PROJECT_URL}%g" changelog - sed -i -r "s%\{\{URL\}\}%${CI_PROJECT_URL}%g" changelog
- sed -i -r "s%\{\{STABILITY\}\}%${STABILITY}%g" changelog - sed -i -r "s%\{\{STABILITY\}\}%${STABILITY}%g" changelog
- sed -i -r "s%\{\{PRIORITY\}\}%${PRIORITY}%g" changelog - sed -i -r "s%\{\{PRIORITY\}\}%${PRIORITY}%g" changelog
## copyright file ## copyright file
- sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME}%g" copyright - sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME_BASE}%g" copyright
## return to bin folder ## return to bin folder
- cd $BIN_FOLDER_DEBIAN_PKG_AND_SIGN - cd $BIN_FOLDER_DEBIAN_PKG_AND_SIGN
...@@ -66,6 +67,8 @@ ...@@ -66,6 +67,8 @@
- build:version - build:version
script: script:
- VERSION=$(cat $VERSION_FILE) - VERSION=$(cat $VERSION_FILE)
- !reference [ .get_version_dependent_vars, script ]
- security unlock-keychain -p $SIGN_KEYCHAIN_PASSWORD $SIGN_LOGIN_KEYCHAIN_PATH - security unlock-keychain -p $SIGN_KEYCHAIN_PASSWORD $SIGN_LOGIN_KEYCHAIN_PATH
- cd $BIN_FOLDER_MACOS_PKG_AND_SIGN - cd $BIN_FOLDER_MACOS_PKG_AND_SIGN
...@@ -75,13 +78,13 @@ ...@@ -75,13 +78,13 @@
# Package and notarize the app # Package and notarize the app
- xcrun notarytool store-credentials --apple-id $SIGN_APPLE_ID --team-id $SIGN_TEAM_ID --password $SIGN_APP_PASSWORD --keychain $SIGN_LOGIN_KEYCHAIN_PATH $SIGN_KEYCHAIN_PROFILE - xcrun notarytool store-credentials --apple-id $SIGN_APPLE_ID --team-id $SIGN_TEAM_ID --password $SIGN_APP_PASSWORD --keychain $SIGN_LOGIN_KEYCHAIN_PATH $SIGN_KEYCHAIN_PROFILE
- ditto ${BIN_NAME} ${BIN_NAME}_pkg/usr/local/bin/ - ditto ${BIN_NAME} ${BIN_NAME_BASE}_pkg/usr/local/bin/${BIN_NAME_BASE}
- productbuild --identifier $SIGN_IDENTIFIER --version $VERSION --sign $SIGN_DEV_ID_INST --keychain $SIGN_LOGIN_KEYCHAIN_PATH --timestamp --root ${BIN_NAME}_pkg / ${PKG_BIN_NAME_MACOS} - productbuild --identifier $SIGN_IDENTIFIER --version $VERSION --sign $SIGN_DEV_ID_INST --keychain $SIGN_LOGIN_KEYCHAIN_PATH --timestamp --root ${BIN_NAME_BASE}_pkg / ${PKG_BIN_NAME_MACOS}
- xcrun notarytool submit ${BIN_NAME}.pkg --keychain $SIGN_LOGIN_KEYCHAIN_PATH --keychain-profile $SIGN_KEYCHAIN_PROFILE --wait - xcrun notarytool submit ${BIN_NAME}.pkg --keychain $SIGN_LOGIN_KEYCHAIN_PATH --keychain-profile $SIGN_KEYCHAIN_PROFILE --wait
- xcrun stapler staple ${BIN_NAME}.pkg - xcrun stapler staple ${BIN_NAME}.pkg
# Clean folder # Clean folder
- rm -Rf ${BIN_NAME}_pkg - rm -Rf ${BIN_NAME_BASE}_pkg
artifacts: artifacts:
paths: paths:
- $ARTIFACTS_FOLDER/* - $ARTIFACTS_FOLDER/*
......
...@@ -7,6 +7,7 @@ test:build: ...@@ -7,6 +7,7 @@ test:build:
- apt update - apt update
- apt install -y jq - apt install -y jq
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
# Build # Build
- !reference [ .build_cli, script ] - !reference [ .build_cli, script ]
......
...@@ -7,6 +7,8 @@ build:version: ...@@ -7,6 +7,8 @@ build:version:
- apt update - apt update
- apt install -y jq - apt install -y jq
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- mkdir -p $ARTIFACTS_FOLDER - mkdir -p $ARTIFACTS_FOLDER
- echo $VERSION > $VERSION_FILE - echo $VERSION > $VERSION_FILE
......
...@@ -5,6 +5,7 @@ clean:release: ...@@ -5,6 +5,7 @@ clean:release:
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script: script:
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- !reference [ .clean_release, script ] - !reference [ .clean_release, script ]
rules: rules:
- if: '$CI_COMMIT_REF_PROTECTED == "true"' - if: '$CI_COMMIT_REF_PROTECTED == "true"'
...@@ -17,6 +18,7 @@ clean:packages: ...@@ -17,6 +18,7 @@ clean:packages:
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script: script:
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- !reference [ .clean_packages, script ] - !reference [ .clean_packages, script ]
rules: rules:
- if: '$CI_COMMIT_REF_PROTECTED == "true"' - if: '$CI_COMMIT_REF_PROTECTED == "true"'
...@@ -30,6 +32,7 @@ clean:dev:release: ...@@ -30,6 +32,7 @@ clean:dev:release:
script: script:
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- VERSION="${VERSION}${VERSION_DEV_SUFFIX}" - VERSION="${VERSION}${VERSION_DEV_SUFFIX}"
- !reference [ .get_version_dependent_vars, script ]
- !reference [ .clean_release, script ] - !reference [ .clean_release, script ]
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
...@@ -43,6 +46,7 @@ clean:dev:packages: ...@@ -43,6 +46,7 @@ clean:dev:packages:
script: script:
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- VERSION="${VERSION}${VERSION_DEV_SUFFIX}" - VERSION="${VERSION}${VERSION_DEV_SUFFIX}"
- !reference [ .get_version_dependent_vars, script ]
- !reference [ .clean_packages, script ] - !reference [ .clean_packages, script ]
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
......
...@@ -8,6 +8,7 @@ upload:packages: ...@@ -8,6 +8,7 @@ upload:packages:
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script: script:
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- !reference [ .get_packages_url, script ] - !reference [ .get_packages_url, script ]
# macOS # macOS
...@@ -40,6 +41,7 @@ upload:packages:wiki: ...@@ -40,6 +41,7 @@ upload:packages:wiki:
- apk add xz - apk add xz
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- !reference [ .get_packages_url, script ] - !reference [ .get_packages_url, script ]
# Create archive # Create archive
......
...@@ -9,6 +9,7 @@ release:wiki: ...@@ -9,6 +9,7 @@ release:wiki:
- apk add jq - apk add jq
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
# Define URL for the wiki in terms of project-agnostic predefined variables # 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" - 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"
...@@ -53,6 +54,7 @@ release:gitlab: ...@@ -53,6 +54,7 @@ release:gitlab:
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script: script:
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- RELEASE_NAME=$VERSION - RELEASE_NAME=$VERSION
- !reference [ .release_gitlab, script ] - !reference [ .release_gitlab, script ]
rules: rules:
...@@ -66,6 +68,7 @@ release:latest:gitlab: ...@@ -66,6 +68,7 @@ release:latest:gitlab:
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script: script:
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- RELEASE_NAME="Latest" - RELEASE_NAME="Latest"
- !reference [ .release_gitlab, script ] - !reference [ .release_gitlab, script ]
rules: rules:
...@@ -79,6 +82,7 @@ release:pre-alpha:gitlab: ...@@ -79,6 +82,7 @@ release:pre-alpha:gitlab:
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
script: script:
- !reference [ .get_version, script ] - !reference [ .get_version, script ]
- !reference [ .get_version_dependent_vars, script ]
- RELEASE_NAME="Pre-alpha" - RELEASE_NAME="Pre-alpha"
- !reference [ .release_gitlab, script ] - !reference [ .release_gitlab, script ]
rules: rules:
......
{ {
"name": "dojo_cli", "name": "dojo_cli",
"version": "3.3.0", "version": "3.4.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "dojo_cli", "name": "dojo_cli",
"version": "3.3.0", "version": "3.4.1",
"license": "AGPLv3", "license": "AGPLv3",
"dependencies": { "dependencies": {
"appdata-path": "^1.0.0", "appdata-path": "^1.0.0",
......
{ {
"name" : "dojo_cli", "name" : "dojo_cli",
"description" : "CLI of the Dojo project", "description" : "CLI of the Dojo project",
"version" : "3.3.0", "version" : "3.4.1",
"license" : "AGPLv3", "license" : "AGPLv3",
"author" : "Michaël Minelli <dojo@minelli.me>", "author" : "Michaël Minelli <dojo@minelli.me>",
"main" : "dist/app.js", "main" : "dist/app.js",
......
...@@ -142,8 +142,12 @@ class DojoBackendManager { ...@@ -142,8 +142,12 @@ class DojoBackendManager {
if ( verbose ) { if ( verbose ) {
if ( error instanceof AxiosError ) { if ( error instanceof AxiosError ) {
if ( error.response ) { if ( error.response ) {
if ( error.response.status === StatusCodes.CONFLICT ) { if ( error.response.status === StatusCodes.INSUFFICIENT_SPACE_ON_RESOURCE ) {
if ( error.response.data && (error.response.data as DojoBackendResponse<Array<GitlabUser>>).code === DojoStatusCode.MAX_EXERCISE_PER_ASSIGNMENT_REACHED ) {
spinner.fail(`The following users have reached the maximum number of exercise of this assignment : ${ ((error.response.data as DojoBackendResponse<Array<GitlabUser>>).data as Array<GitlabUser>).map(user => user.name).join(', ') }.`);
} else {
spinner.fail(`You've already reached the max number of exercise of this assignment.`); spinner.fail(`You've already reached the max number of exercise of this assignment.`);
}
} else { } else {
if ( (error.response.data as DojoBackendResponse<unknown>).code === DojoStatusCode.EXERCISE_CREATION_GITLAB_ERROR ) { if ( (error.response.data as DojoBackendResponse<unknown>).code === DojoStatusCode.EXERCISE_CREATION_GITLAB_ERROR ) {
spinner.fail(`Exercise creation error: An unknown error occurred while creating the exercise on Gitlab. Please try again later or contact an administrator.`); spinner.fail(`Exercise creation error: An unknown error occurred while creating the exercise on Gitlab. Please try again later or contact an administrator.`);
......
Subproject commit 89f3579ca9009f793742170928d808ab4c35d931 Subproject commit 75f67b647da34337f3b220cacf78b2115d6022bc
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment