diff --git a/.gitignore b/.gitignore index 43a8d1508996bab2a79fd3dd26f21cbc919a37d3..fa250cd0cdb82094de1413d8f77db6b27b6de113 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ aws.xml workspace.xml +.gitlab-ci-local ############################ MacOS # General diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e55904fd2c9dc1ddf364a98b5c911f584960fd45..46b9417d91ca72665753b9af283498ad3ac10557 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,429 +1,8 @@ -variables: - GIT_SUBMODULE_STRATEGY: recursive - GIT_SUBMODULE_FORCE_HTTPS: "true" - SECURE_FILES_DOWNLOAD_PATH: './' +include: "NodeApp/.gitlab-ci/**.yml" - PROJECT_NAME: DojoCLI - - BIN_NAME: dojo - - MACOS_PKG_EXTENSION: '.pkg' - MACOS_PKG_BIN_NAME: "${BIN_NAME}${MACOS_PKG_EXTENSION}" - - WINDOWS_BIN_EXTENSION: '.exe' - WINDOWS_BIN_NAME: "${BIN_NAME}${WINDOWS_BIN_EXTENSION}" - - ARTIFACTS_FOLDER: /artifacts - - GITLAB_API_PROJECT_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID} - - BIN_FOLDER_MACOS: $ARTIFACTS_FOLDER/macOS - BIN_FOLDER_LINUX: $ARTIFACTS_FOLDER/Linux - BIN_FOLDER_WINDOWS: $ARTIFACTS_FOLDER/Windows - - BIN_FOLDER_MACOS_ARM64: $BIN_FOLDER_MACOS/arm64 - BIN_FOLDER_MACOS_X64: $BIN_FOLDER_MACOS/x64 - - BIN_FILE_MACOS_ARM64: $BIN_FOLDER_MACOS_ARM64/$BIN_NAME - BIN_FILE_MACOS_X64: $BIN_FOLDER_MACOS_X64/$BIN_NAME - BIN_PKG_FILE_MACOS_ARM64: $BIN_FOLDER_MACOS_ARM64/$MACOS_PKG_BIN_NAME - BIN_PKG_FILE_MACOS_X64: $BIN_FOLDER_MACOS_X64/$MACOS_PKG_BIN_NAME - BIN_FILE_LINUX_ARM64: $BIN_FOLDER_LINUX/arm64/$BIN_NAME - BIN_FILE_LINUX_X64: $BIN_FOLDER_LINUX/x64/$BIN_NAME - BIN_FILE_WINDOWS_ARM64: $BIN_FOLDER_WINDOWS/arm64/$WINDOWS_BIN_NAME - BIN_FILE_WINDOWS_X64: $BIN_FOLDER_WINDOWS/x64/$WINDOWS_BIN_NAME - - VERSION_FILE: $ARTIFACTS_FOLDER/VERSION - VERSION_DEV_SUFFIX: '-dev' - - PROJECT_FOLDER: NodeApp - - PACKAGE_REGISTRY_URL: "${GITLAB_API_PROJECT_URL}/packages/generic/${BIN_NAME}" - - WIKI_FOLDER: Wiki - - -.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: - # Binaries - - PACKAGE_URL_MACOS_ARM64_BIN="${PACKAGE_REGISTRY_URL}_macOS-arm64/${VERSION}/${BIN_NAME}" - - PACKAGE_URL_MACOS_X64_BIN="${PACKAGE_REGISTRY_URL}_macOS-x64/${VERSION}/${BIN_NAME}" - - PACKAGE_URL_LINUX_ARM64_BIN="${PACKAGE_REGISTRY_URL}_Linux-arm64/${VERSION}/${BIN_NAME}" - - PACKAGE_URL_LINUX_X64_BIN="${PACKAGE_REGISTRY_URL}_Linux-x64/${VERSION}/${BIN_NAME}" - - PACKAGE_URL_WINDOWS_ARM64_BIN="${PACKAGE_REGISTRY_URL}_Windows-arm64/${VERSION}/${WINDOWS_BIN_NAME}" - - PACKAGE_URL_WINDOWS_X64_BIN="${PACKAGE_REGISTRY_URL}_Windows-x64/${VERSION}/${WINDOWS_BIN_NAME}" - - # Packages - - PACKAGE_URL_MACOS_ARM64_PKG="${PACKAGE_REGISTRY_URL}_macOS-pkg-arm64/${VERSION}/${MACOS_PKG_BIN_NAME}" - - PACKAGE_URL_MACOS_X64_PKG="${PACKAGE_REGISTRY_URL}_macOS-pkg-x64/${VERSION}/${MACOS_PKG_BIN_NAME}" - - # Wiki - - WIKI_ARCHIVE_NAME="${PROJECT_NAME}_Wiki_${VERSION}.tar.xz" - - PACKAGE_URL_WIKI="${PACKAGE_REGISTRY_URL}_Wiki/${VERSION}/${WIKI_ARCHIVE_NAME}" - - -.build_cli: - script: - - cd "${PROJECT_FOLDER}" - - # Install dependencies - - npm install - - # Set version number shown in CLI - - sed -i -r "s/\{\{VERSION\}\}/${VERSION}/g" src/commander/CommanderApp.ts - - # Decrypt env vars for production - - | - 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 - - # Build - - npm run build - - # Build binaries - ## macOS - - npx pkg . -t node18-macos-arm64 --output $BIN_FILE_MACOS_ARM64 --no-bytecode --compress Brotli --public-packages "*" --public - - npx pkg . -t node18-macos-x64 --output $BIN_FILE_MACOS_X64 --no-bytecode --compress Brotli --public-packages "*" --public - - ## Linux - - npx pkg . -t node18-linuxstatic-arm64 --output $BIN_FILE_LINUX_ARM64 --no-bytecode --compress Brotli --public-packages "*" --public - - npx pkg . -t node18-linuxstatic-x64 --output $BIN_FILE_LINUX_X64 --no-bytecode --compress Brotli --public-packages "*" --public - - ## Windows - - npx pkg . -t node18-win-arm64 --output $BIN_FILE_WINDOWS_ARM64 --no-bytecode --compress Brotli --public-packages "*" --public - - npx pkg . -t node18-win-x64 --output $BIN_FILE_WINDOWS_X64 --no-bytecode --compress Brotli --public-packages "*" --public - - -.sign_macos: +lint_pass: + only: + variables: + - $FOO == "bar" script: - # Sign excecutable - - codesign --force --options=runtime --entitlements ../../../Resources/macApp/Signing/entitlements.plist --sign $SIGN_DEV_ID_APP --keychain $SIGN_LOGIN_KEYCHAIN_PATH --timestamp ${BIN_NAME} - - # 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 - - ditto ${BIN_NAME} ${BIN_NAME}_pkg/usr/local/bin/ - - productbuild --identifier $SIGN_IDENTIFIER --version $VERSION --sign $SIGN_DEV_ID_INST --keychain $SIGN_LOGIN_KEYCHAIN_PATH --timestamp --root ${BIN_NAME}_pkg / ${MACOS_PKG_BIN_NAME} - - xcrun notarytool submit ${BIN_NAME}.pkg --keychain $SIGN_LOGIN_KEYCHAIN_PATH --keychain-profile $SIGN_KEYCHAIN_PROFILE --wait - - xcrun stapler staple ${BIN_NAME}.pkg - - # Clean folder - - rm -Rf ${BIN_NAME}_pkg - - -.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 - - -stages: - - test - - build - - sign - - clean - - upload - - release - - -test:build: - stage: test - tags: - - build - image: node:latest - script: - - apt update - - apt install -y jq - - !reference [.get_version, script] - - # Build - - !reference [.build_cli, script] - rules: - - if: '$CI_COMMIT_REF_PROTECTED != "true"' - - -build:version: - stage: build - tags: - - build - image: node:latest - script: - - apt update - - apt install -y jq - - !reference [.get_version, script] - - mkdir -p $ARTIFACTS_FOLDER - - echo $VERSION > $VERSION_FILE - - # Build - - !reference [.build_cli, script] - artifacts: - untracked: true - paths: - - $ARTIFACTS_FOLDER/* - expire_in: 1 hour - rules: - - if: '$CI_COMMIT_REF_PROTECTED == "true"' - - -sign:macos: - stage: sign - tags: - - macos_signing - dependencies: - - build:version - script: - - VERSION=$(cat $VERSION_FILE) - - security unlock-keychain -p $SIGN_KEYCHAIN_PASSWORD $SIGN_LOGIN_KEYCHAIN_PATH - - # Sign Apple Silicon binary - - cd $BIN_FOLDER_MACOS_ARM64 - - !reference [.sign_macos, script] - - # Sign Intel binary - - cd $BIN_FOLDER_MACOS_X64 - - !reference [.sign_macos, script] - artifacts: - paths: - - $ARTIFACTS_FOLDER/* - expire_in: 1 hour - rules: - - if: '$CI_COMMIT_REF_PROTECTED == "true"' - - -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' - - -upload:packages: - stage: upload - tags: - - gitlab_package - dependencies: - - sign:macos - image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest - script: - - !reference [.get_version, script] - - !reference [.get_packages_url, script] - - # macOS - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_MACOS_ARM64} "${PACKAGE_URL_MACOS_ARM64_BIN}";' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_MACOS_X64} "${PACKAGE_URL_MACOS_X64_BIN}";' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_PKG_FILE_MACOS_ARM64} "${PACKAGE_URL_MACOS_ARM64_PKG}";' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_PKG_FILE_MACOS_X64} "${PACKAGE_URL_MACOS_X64_PKG}";' - - # Linux - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_LINUX_ARM64} "${PACKAGE_URL_LINUX_ARM64_BIN}";' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_LINUX_X64} "${PACKAGE_URL_LINUX_X64_BIN}";' - - # Windows - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_WINDOWS_ARM64} "${PACKAGE_URL_WINDOWS_ARM64_BIN}";' - - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_WINDOWS_X64} "${PACKAGE_URL_WINDOWS_X64_BIN}";' - rules: - - if: '$CI_COMMIT_REF_PROTECTED == "true"' - - -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 - - 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"' - - -release:wiki: - stage: release - tags: - - release - image: alpine:latest - script: - - !reference [.get_version, script] - - - apk update - - apk add git - - # 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] - - !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": "Windows (ARM64) binary", - "url": "'${PACKAGE_URL_WINDOWS_ARM64_BIN}'", - },{ - "name": "Windows (x64) binary", - "url": "'${PACKAGE_URL_WINDOWS_X64_BIN}'", - },{ - "name": "Linux (ARM64) binary", - "url": "'${PACKAGE_URL_LINUX_ARM64_BIN}'", - },{ - "name": "Linux (x64) binary", - "url": "'${PACKAGE_URL_LINUX_X64_BIN}'", - },{ - "name": "macOS (Intel) binary", - "url": "'${PACKAGE_URL_MACOS_X64_BIN}'", - },{ - "name": "macOS (Apple Silicon) binary", - "url": "'${PACKAGE_URL_MACOS_ARM64_BIN}'", - },{ - "name": "macOS (Intel) package", - "url": "'${PACKAGE_URL_MACOS_X64_PKG}'", - },{ - "name": "macOS (Apple Silicon) package", - "url": "'${PACKAGE_URL_MACOS_ARM64_PKG}'", - },{ - "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 + - echo diff --git a/NodeApp/.gitlab-ci/00_vars.yml b/NodeApp/.gitlab-ci/00_vars.yml new file mode 100644 index 0000000000000000000000000000000000000000..b2f058ad22a29824086741b5e0199b107a698ee7 --- /dev/null +++ b/NodeApp/.gitlab-ci/00_vars.yml @@ -0,0 +1,54 @@ +variables: + GIT_SUBMODULE_STRATEGY: recursive + GIT_SUBMODULE_FORCE_HTTPS: "true" + SECURE_FILES_DOWNLOAD_PATH: './' + + PROJECT_NAME: DojoCLI + PROJECT_FOLDER: NodeApp + + RESOURCES_FOLDER: "${CI_PROJECT_DIR}/Resources" + + BIN_NAME: dojo + + PKG_EXTENSION_DEBIAN: '.deb' + PKG_EXTENSION_MACOS: '.pkg' + + PKG_BIN_NAME_DEBIAN: "${BIN_NAME}${PKG_EXTENSION_DEBIAN}" + PKG_BIN_NAME_MACOS: "${BIN_NAME}${PKG_EXTENSION_MACOS}" + + BIN_EXTENSION_WINDOWS: '.exe' + BIN_NAME_WINDOWS: "${BIN_NAME}${BIN_EXTENSION_WINDOWS}" + + ARTIFACTS_FOLDER: /artifacts + + GITLAB_API_PROJECT_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID} + + BIN_FOLDER_MACOS: $ARTIFACTS_FOLDER/macOS + BIN_FOLDER_LINUX: $ARTIFACTS_FOLDER/Linux + BIN_FOLDER_WINDOWS: $ARTIFACTS_FOLDER/Windows + + BIN_FOLDER_LINUX_ARM64: $BIN_FOLDER_LINUX/arm64 + BIN_FOLDER_LINUX_X64: $BIN_FOLDER_LINUX/x64 + BIN_FOLDER_MACOS_ARM64: $BIN_FOLDER_MACOS/arm64 + BIN_FOLDER_MACOS_X64: $BIN_FOLDER_MACOS/x64 + BIN_FOLDER_WINDOWS_ARM64: $BIN_FOLDER_WINDOWS/arm64 + BIN_FOLDER_WINDOWS_X64: $BIN_FOLDER_WINDOWS/x64 + + BIN_FILE_MACOS_ARM64: $BIN_FOLDER_MACOS_ARM64/$BIN_NAME + BIN_FILE_MACOS_X64: $BIN_FOLDER_MACOS_X64/$BIN_NAME + BIN_FILE_LINUX_ARM64: $BIN_FOLDER_LINUX_ARM64/$BIN_NAME + BIN_FILE_LINUX_X64: $BIN_FOLDER_LINUX_X64/$BIN_NAME + BIN_FILE_WINDOWS_ARM64: $BIN_FOLDER_WINDOWS_ARM64/$BIN_NAME_WINDOWS + BIN_FILE_WINDOWS_X64: $BIN_FOLDER_WINDOWS_X64/$BIN_NAME_WINDOWS + + BIN_PKG_FILE_DEBIAN_ARM64: $BIN_FOLDER_LINUX_ARM64/$PKG_BIN_NAME_DEBIAN + BIN_PKG_FILE_DEBIAN_X64: $BIN_FOLDER_LINUX_X64/$PKG_BIN_NAME_DEBIAN + BIN_PKG_FILE_MACOS_ARM64: $BIN_FOLDER_MACOS_ARM64/$PKG_BIN_NAME_MACOS + BIN_PKG_FILE_MACOS_X64: $BIN_FOLDER_MACOS_X64/$PKG_BIN_NAME_MACOS + + VERSION_FILE: $ARTIFACTS_FOLDER/VERSION + VERSION_DEV_SUFFIX: '-dev' + + PACKAGE_REGISTRY_URL: "${GITLAB_API_PROJECT_URL}/packages/generic/${BIN_NAME}" + + WIKI_FOLDER: Wiki \ No newline at end of file diff --git a/NodeApp/.gitlab-ci/01_functions.yml b/NodeApp/.gitlab-ci/01_functions.yml new file mode 100644 index 0000000000000000000000000000000000000000..57b72e642b5194d76bb1a6176bd6a48ec9872b7f --- /dev/null +++ b/NodeApp/.gitlab-ci/01_functions.yml @@ -0,0 +1,108 @@ +.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_last_stable_version: + script: + # Get all releases of the project + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${GITLAB_API_PROJECT_URL}/releases" > releases.json' + + # Filter and select last package that don't contains "-dev" in its name + - LAST_STABLE_VERSION=`jq -r '[.[] | .name | select (contains("$VERSION_DEV_SUFFIX") | not)][0]' releases.json` + + +.get_packages_url: + script: + # Binaries + - PACKAGE_URL_MACOS_ARM64_BIN="${PACKAGE_REGISTRY_URL}_macOS-arm64/${VERSION}/${BIN_NAME}" + - PACKAGE_URL_MACOS_X64_BIN="${PACKAGE_REGISTRY_URL}_macOS-x64/${VERSION}/${BIN_NAME}" + - PACKAGE_URL_LINUX_ARM64_BIN="${PACKAGE_REGISTRY_URL}_Linux-arm64/${VERSION}/${BIN_NAME}" + - PACKAGE_URL_LINUX_X64_BIN="${PACKAGE_REGISTRY_URL}_Linux-x64/${VERSION}/${BIN_NAME}" + - PACKAGE_URL_WINDOWS_ARM64_BIN="${PACKAGE_REGISTRY_URL}_Windows-arm64/${VERSION}/${BIN_NAME_WINDOWS}" + - PACKAGE_URL_WINDOWS_X64_BIN="${PACKAGE_REGISTRY_URL}_Windows-x64/${VERSION}/${BIN_NAME_WINDOWS}" + + # Packages + - PACKAGE_URL_MACOS_ARM64_PKG="${PACKAGE_REGISTRY_URL}_macOS-pkg-arm64/${VERSION}/${PKG_BIN_NAME_MACOS}" + - PACKAGE_URL_MACOS_X64_PKG="${PACKAGE_REGISTRY_URL}_macOS-pkg-x64/${VERSION}/${PKG_BIN_NAME_MACOS}" + - PACKAGE_URL_DEBIAN_ARM64_PKG="${PACKAGE_REGISTRY_URL}_debian-pkg-arm64/${VERSION}/${PKG_BIN_NAME_DEBIAN}" + - PACKAGE_URL_DEBIAN_X64_PKG="${PACKAGE_REGISTRY_URL}_debian-pkg-x64/${VERSION}/${PKG_BIN_NAME_DEBIAN}" + + # Wiki + - WIKI_ARCHIVE_NAME="${PROJECT_NAME}_Wiki_${VERSION}.tar.xz" + - PACKAGE_URL_WIKI="${PACKAGE_REGISTRY_URL}_Wiki/${VERSION}/${WIKI_ARCHIVE_NAME}" + + +.build_cli: + script: + - cd "${PROJECT_FOLDER}" + + # Install dependencies + - npm install + + # Set version number shown in CLI + - sed -i -r "s/\{\{VERSION\}\}/${VERSION}/g" src/commander/CommanderApp.ts + + # Decrypt env vars for production + - | + 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 + + # Build + - npm run build + + # Build binaries + ## macOS + - npx pkg . -t node18-macos-arm64 --output $BIN_FILE_MACOS_ARM64 --no-bytecode --compress Brotli --public-packages "*" --public + - npx pkg . -t node18-macos-x64 --output $BIN_FILE_MACOS_X64 --no-bytecode --compress Brotli --public-packages "*" --public + + ## Linux + - npx pkg . -t node18-linuxstatic-arm64 --output $BIN_FILE_LINUX_ARM64 --no-bytecode --compress Brotli --public-packages "*" --public + - npx pkg . -t node18-linuxstatic-x64 --output $BIN_FILE_LINUX_X64 --no-bytecode --compress Brotli --public-packages "*" --public + + ## Windows + - npx pkg . -t node18-win-arm64 --output $BIN_FILE_WINDOWS_ARM64 --no-bytecode --compress Brotli --public-packages "*" --public + - npx pkg . -t node18-win-x64 --output $BIN_FILE_WINDOWS_X64 --no-bytecode --compress Brotli --public-packages "*" --public + + # Add execution rights to binaries + ## macOS + - chmod +x $BIN_FILE_MACOS_ARM64 + - chmod +x $BIN_FILE_MACOS_X64 + + ## Linux + - chmod +x $BIN_FILE_LINUX_ARM64 + - chmod +x $BIN_FILE_LINUX_X64 + + ## Windows + - chmod +x $BIN_FILE_WINDOWS_ARM64 + - chmod +x $BIN_FILE_WINDOWS_X64 + + +.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 diff --git a/NodeApp/.gitlab-ci/02_templates.yml b/NodeApp/.gitlab-ci/02_templates.yml new file mode 100644 index 0000000000000000000000000000000000000000..8bf24a6f5a203cdb1ea621d04d0091a785bbd960 --- /dev/null +++ b/NodeApp/.gitlab-ci/02_templates.yml @@ -0,0 +1,90 @@ +.pkg_and_sign:debian: + stage: pkg_and_sign + image: ubuntu:latest + tags: + - pkg + dependencies: + - build:version + script: + # Install dependencies + - apt update + - apt install -y dpkg jq curl build-essential + + # Get vars + - !reference [ .get_version, script ] + - !reference [ .get_last_stable_version, script ] + + - cd $BIN_FOLDER_DEBIAN_PKG_AND_SIGN + - PKG_BUILD_FOLDER_NAME="${BIN_NAME}_${VERSION}_${ARCH}" + + + # Pkg tree creation + - mkdir -p "${PKG_BUILD_FOLDER_NAME}/usr/local/bin/" + ## Copy binary + - cp -R ${BIN_NAME} "${PKG_BUILD_FOLDER_NAME}/usr/local/bin/" + ## Copy debian folder with package definition files + - cp -R "${RESOURCES_FOLDER}/Debian/pkg/DEBIAN" "${PKG_BUILD_FOLDER_NAME}" + + # Modify files + - cd "${PKG_BUILD_FOLDER_NAME}/DEBIAN" + ## control file + - sed -i -r "s%\{\{VERSION\}\}%${VERSION}%g" control + - sed -i -r "s%\{\{ARCH\}\}%${ARCH}%g" control + - sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME}%g" control + ## changelog file + - STABILITY=$([[ $IS_DEV == true ]] && echo 'unstable' || echo 'stable') + - PRIORITY=$([[ ${VERSION%.*} == ${LAST_STABLE_VERSION%.*} ]] && echo 'medium' || echo 'high') + - sed -i -r "s%\{\{VERSION\}\}%${VERSION}%g" changelog + - sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME}%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%\{\{STABILITY\}\}%${STABILITY}%g" changelog + - sed -i -r "s%\{\{PRIORITY\}\}%${PRIORITY}%g" changelog + ## copyright file + - sed -i -r "s%\{\{BIN_NAME\}\}%${BIN_NAME}%g" copyright + ## return to bin folder + - cd $BIN_FOLDER_DEBIAN_PKG_AND_SIGN + + # Build package + - dpkg-deb --build --root-owner-group -Z xz -z 9 ${PKG_BUILD_FOLDER_NAME} ${PKG_BIN_NAME_DEBIAN} + + # Clean folder + - rm -Rf ${PKG_BUILD_FOLDER_NAME} + artifacts: + paths: + - $ARTIFACTS_FOLDER/* + expire_in: 10 mins + rules: + - if: '$CI_COMMIT_REF_PROTECTED == "true"' + + +.pkg_and_sign:macos: + stage: pkg_and_sign + tags: + - macos_signing + dependencies: + - build:version + script: + - VERSION=$(cat $VERSION_FILE) + - security unlock-keychain -p $SIGN_KEYCHAIN_PASSWORD $SIGN_LOGIN_KEYCHAIN_PATH + + - cd $BIN_FOLDER_MACOS_PKG_AND_SIGN + + # Sign excecutable + - codesign --force --options=runtime --entitlements ../../../Resources/macOS/Signing/entitlements.plist --sign $SIGN_DEV_ID_APP --keychain $SIGN_LOGIN_KEYCHAIN_PATH --timestamp ${BIN_NAME} + + # 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 + - ditto ${BIN_NAME} ${BIN_NAME}_pkg/usr/local/bin/ + - 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} + - xcrun notarytool submit ${BIN_NAME}.pkg --keychain $SIGN_LOGIN_KEYCHAIN_PATH --keychain-profile $SIGN_KEYCHAIN_PROFILE --wait + - xcrun stapler staple ${BIN_NAME}.pkg + + # Clean folder + - rm -Rf ${BIN_NAME}_pkg + artifacts: + paths: + - $ARTIFACTS_FOLDER/* + expire_in: 10 mins + rules: + - if: '$CI_COMMIT_REF_PROTECTED == "true"' \ No newline at end of file diff --git a/NodeApp/.gitlab-ci/03_stages.yml b/NodeApp/.gitlab-ci/03_stages.yml new file mode 100644 index 0000000000000000000000000000000000000000..c459c1651b62a43f93c894fd8b640bb8df071386 --- /dev/null +++ b/NodeApp/.gitlab-ci/03_stages.yml @@ -0,0 +1,7 @@ +stages: + - test + - build + - pkg_and_sign + - clean + - upload + - release \ No newline at end of file diff --git a/NodeApp/.gitlab-ci/04_stageTest.yml b/NodeApp/.gitlab-ci/04_stageTest.yml new file mode 100644 index 0000000000000000000000000000000000000000..6c87377ea87becfa1b5404aae476a1cc981c85a0 --- /dev/null +++ b/NodeApp/.gitlab-ci/04_stageTest.yml @@ -0,0 +1,14 @@ +test:build: + stage: test + tags: + - build + image: node:latest + script: + - apt update + - apt install -y jq + - !reference [ .get_version, script ] + + # Build + - !reference [ .build_cli, script ] + rules: + - if: '$CI_COMMIT_REF_PROTECTED != "true"' diff --git a/NodeApp/.gitlab-ci/05_stageBuild.yml b/NodeApp/.gitlab-ci/05_stageBuild.yml new file mode 100644 index 0000000000000000000000000000000000000000..2771ad328154f051d2b2356ce86715ff6b3e0f05 --- /dev/null +++ b/NodeApp/.gitlab-ci/05_stageBuild.yml @@ -0,0 +1,21 @@ +build:version: + stage: build + tags: + - build + image: node:latest + script: + - apt update + - apt install -y jq + - !reference [ .get_version, script ] + - mkdir -p $ARTIFACTS_FOLDER + - echo $VERSION > $VERSION_FILE + + # Build + - !reference [ .build_cli, script ] + artifacts: + untracked: true + paths: + - $ARTIFACTS_FOLDER/* + expire_in: 10 mins + rules: + - if: '$CI_COMMIT_REF_PROTECTED == "true"' diff --git a/NodeApp/.gitlab-ci/06_stagePkgAndSign.yml b/NodeApp/.gitlab-ci/06_stagePkgAndSign.yml new file mode 100644 index 0000000000000000000000000000000000000000..dfdc2bd0004724db8d53b42484432f7d5adadead --- /dev/null +++ b/NodeApp/.gitlab-ci/06_stagePkgAndSign.yml @@ -0,0 +1,14 @@ +pkg_and_sign:debian: + parallel: + matrix: + - ARCH: [ "arm64", "amd64" ] + before_script: + - BIN_FOLDER_DEBIAN_PKG_AND_SIGN=$([[ $ARCH == "arm64" ]] && echo ${BIN_FOLDER_LINUX_ARM64} || echo ${BIN_FOLDER_LINUX_X64}) + extends: .pkg_and_sign:debian + + +pkg_and_sign:macos: + parallel: + matrix: + - BIN_FOLDER_MACOS_PKG_AND_SIGN: [ "$BIN_FOLDER_MACOS_ARM64", "$BIN_FOLDER_MACOS_X64" ] + extends: .pkg_and_sign:macos \ No newline at end of file diff --git a/NodeApp/.gitlab-ci/07_stageClean.yml b/NodeApp/.gitlab-ci/07_stageClean.yml new file mode 100644 index 0000000000000000000000000000000000000000..4eef3851aaa4b5b47ef46f6f3efa81e95216f059 --- /dev/null +++ b/NodeApp/.gitlab-ci/07_stageClean.yml @@ -0,0 +1,48 @@ +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' \ No newline at end of file diff --git a/NodeApp/.gitlab-ci/08_stageUpload.yml b/NodeApp/.gitlab-ci/08_stageUpload.yml new file mode 100644 index 0000000000000000000000000000000000000000..9ebb3fdf89f0cd171cd0e878e04b9c560c2165ec --- /dev/null +++ b/NodeApp/.gitlab-ci/08_stageUpload.yml @@ -0,0 +1,52 @@ +upload:packages: + stage: upload + tags: + - gitlab_package + dependencies: + - pkg_and_sign:macos + - pkg_and_sign:debian + image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest + script: + - !reference [ .get_version, script ] + - !reference [ .get_packages_url, script ] + + # macOS + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_MACOS_ARM64} "${PACKAGE_URL_MACOS_ARM64_BIN}";' + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_MACOS_X64} "${PACKAGE_URL_MACOS_X64_BIN}";' + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_PKG_FILE_MACOS_ARM64} "${PACKAGE_URL_MACOS_ARM64_PKG}";' + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_PKG_FILE_MACOS_X64} "${PACKAGE_URL_MACOS_X64_PKG}";' + + # Linux + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_LINUX_ARM64} "${PACKAGE_URL_LINUX_ARM64_BIN}";' + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_LINUX_X64} "${PACKAGE_URL_LINUX_X64_BIN}";' + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_PKG_FILE_DEBIAN_ARM64} "${PACKAGE_URL_DEBIAN_ARM64_PKG}";' + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_PKG_FILE_DEBIAN_X64} "${PACKAGE_URL_DEBIAN_X64_PKG}";' + + # Windows + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_WINDOWS_ARM64} "${PACKAGE_URL_WINDOWS_ARM64_BIN}";' + - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${BIN_FILE_WINDOWS_X64} "${PACKAGE_URL_WINDOWS_X64_BIN}";' + rules: + - if: '$CI_COMMIT_REF_PROTECTED == "true"' + + +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 + - 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 diff --git a/NodeApp/.gitlab-ci/09_stageRelease.yml b/NodeApp/.gitlab-ci/09_stageRelease.yml new file mode 100644 index 0000000000000000000000000000000000000000..ef93e4ed4185c81107861e8ca5110368e5c6c434 --- /dev/null +++ b/NodeApp/.gitlab-ci/09_stageRelease.yml @@ -0,0 +1,114 @@ +release:wiki: + stage: release + tags: + - release + image: alpine:latest + script: + - !reference [ .get_version, script ] + + - apk update + - apk add git + + # 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 ] + - !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": "Windows (ARM64) binary", + "url": "'${PACKAGE_URL_WINDOWS_ARM64_BIN}'", + },{ + "name": "Windows (x64) binary", + "url": "'${PACKAGE_URL_WINDOWS_X64_BIN}'", + },{ + "name": "Linux (ARM64) binary", + "url": "'${PACKAGE_URL_LINUX_ARM64_BIN}'", + },{ + "name": "Linux (x64) binary", + "url": "'${PACKAGE_URL_LINUX_X64_BIN}'", + },{ + "name": "Debian / Ubuntu (ARM64) package", + "url": "'${PACKAGE_URL_DEBIAN_ARM64_PKG}'", + },{ + "name": "Debian / Ubuntu (x64) package", + "url": "'${PACKAGE_URL_DEBIAN_X64_PKG}'", + },{ + "name": "macOS (Intel) binary", + "url": "'${PACKAGE_URL_MACOS_X64_BIN}'", + },{ + "name": "macOS (Apple Silicon) binary", + "url": "'${PACKAGE_URL_MACOS_ARM64_BIN}'", + },{ + "name": "macOS (Intel) package", + "url": "'${PACKAGE_URL_MACOS_X64_PKG}'", + },{ + "name": "macOS (Apple Silicon) package", + "url": "'${PACKAGE_URL_MACOS_ARM64_PKG}'", + },{ + "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 diff --git a/NodeApp/.idea/DojoCLI.iml b/NodeApp/.idea/DojoCLI.iml index 24643cc37449b4bde54411a80b8ed61258225e34..d47865a1c8d932c244bdb1f09d5eb3295d5dc715 100644 --- a/NodeApp/.idea/DojoCLI.iml +++ b/NodeApp/.idea/DojoCLI.iml @@ -6,6 +6,9 @@ <excludeFolder url="file://$MODULE_DIR$/temp" /> <excludeFolder url="file://$MODULE_DIR$/tmp" /> </content> + <content url="file://$MODULE_DIR$/.gitlab-ci-local"> + <excludeFolder url="file://$MODULE_DIR$/.gitlab-ci-local" /> + </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> </component> diff --git a/Resources/Debian/pkg/DEBIAN/changelog b/Resources/Debian/pkg/DEBIAN/changelog new file mode 100644 index 0000000000000000000000000000000000000000..1203451e322bd3645b1c54f5481127e52d3375af --- /dev/null +++ b/Resources/Debian/pkg/DEBIAN/changelog @@ -0,0 +1,5 @@ +{{BIN_NAME}} ({{VERSION}}) {{STABILITY}}; urgency={{URGENCY}} + + * See on gitlab: {{URL}}/-/blob/main/CHANGELOG.md + + -- Michaël Minelli <dojo@minelli.me> {{DATE}} \ No newline at end of file diff --git a/Resources/Debian/pkg/DEBIAN/compat b/Resources/Debian/pkg/DEBIAN/compat new file mode 100644 index 0000000000000000000000000000000000000000..f599e28b8ab0d8c9c57a486c89c4a5132dcbd3b2 --- /dev/null +++ b/Resources/Debian/pkg/DEBIAN/compat @@ -0,0 +1 @@ +10 diff --git a/Resources/Debian/pkg/DEBIAN/control b/Resources/Debian/pkg/DEBIAN/control new file mode 100644 index 0000000000000000000000000000000000000000..8f5ce246d783bcfdd48f6d6db7bb5eda7a886eed --- /dev/null +++ b/Resources/Debian/pkg/DEBIAN/control @@ -0,0 +1,47 @@ +Source: {{BIN_NAME}} +Version: {{VERSION}} +Standards-Version: {{VERSION}} +Section: education +Priority: optional +Maintainer: Michaël Minelli <dojo@minelli.me> +Package: {{BIN_NAME}} +Architecture: {{ARCH}} +Description: Dojo: a platform to practice programming + The Dojo platform is an online tool built to help practice programming by + allowing users to propose assignments and perform them as exercises. + . + The tool is very flexible and allows for proposing exercises for any language + and does not impose any limitation on a framework to be heavily relying + on Docker and Gitlab. These tools used in combination allow for automatic + correction of assignments in order to give immediate feedback to users + performing exercises. Solved exercises can then be shared among the community + of users such that they can inspire other users or give hints on ways to solve + a given exercise. + . + The two major concepts of the platform are the **assignments** and the **exercises**. + . + The principal way to interact with the Dojo platform is currently the `dojo` CLI. + . + . + ## The assignment + . + An assignment is written by a user that wants to propose an exercise. It is typically + composed of a written description of the work to be performed, and tests that must be + passed once the exercise is successfully performed (and some configuration files for + the infrastructure of the tests such as docker files). At its core, an assignment is + nothing else than a git repository that can be forked in the form of an exercise and + modified using standard git commands. + . + In the future a dependency tree of assignments can be created, as well as tagging for + filtering purposes. + . + . + ## The exercise + . + An exercise is an instance of an assignment which the learner will modify in order to + make it pass the automatic tests. It can be run locally on any user's machine using the + dojo CLI. When the exercise is completed it is pushed on the dojo where the CI/CD tools + of Gitlab can evaluate it automatically and notify the dojo platform of the result. The + exercises can then be shared with other users in order to propose a wide variety of + solutions and can be a base for discussion among users and with teachers. + For a more detailed description please see the CLI documentation: https://gitedu.hesge.ch/dojo_project/projects/ui/dojocli/-/wikis/home diff --git a/Resources/Debian/pkg/DEBIAN/copyright b/Resources/Debian/pkg/DEBIAN/copyright new file mode 100644 index 0000000000000000000000000000000000000000..e3a927e86f8a990b5f89b2657cdb2f3cde4aae9c --- /dev/null +++ b/Resources/Debian/pkg/DEBIAN/copyright @@ -0,0 +1,573 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: {{BIN_NAME}} +Upstream-Contact: Michaël Minelli <dojo@minelli.me> +Source: https://gitedu.hesge.ch/dojo_project/projects/ui/dojocli.git + +Files: * +Copyright: + Development by: + * Michaël Minelli <dojo@minelli.me> + * Orestis Malaspinas <orestis.malaspinas@hesge.ch> +License: AGPL-3 + +License: AGPL-3 + GNU AFFERO GENERAL PUBLIC LICENSE + . + Version 3, 19 November 2007 + . + Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies of this license + document, but changing it is not allowed. + Preamble + . + The GNU Affero General Public License is a free, copyleft license for + software and other kinds of works, specifically designed to ensure + cooperation with the community in the case of network server software. + . + The licenses for most software and other practical works are designed to + take away your freedom to share and change the works. By contrast, our + General Public Licenses are intended to guarantee your freedom to share and + change all versions of a program--to make sure it remains free software for + all its users. + . + When we speak of free software, we are referring to freedom, not price. Our + General Public Licenses are designed to make sure that you have the freedom + to distribute copies of free software (and charge for them if you wish), + that you receive source code or can get it if you want it, that you can + change the software or use pieces of it in new free programs, and that you + know you can do these things. + . + Developers that use our General Public Licenses protect your rights with two + steps: (1) assert copyright on the software, and (2) offer you this License + which gives you legal permission to copy, distribute and/or modify the + software. + . + A secondary benefit of defending all users' freedom is that improvements + made in alternate versions of the program, if they receive widespread use, + become available for other developers to incorporate. Many developers of + free software are heartened and encouraged by the resulting cooperation. + However, in the case of software used on network servers, this result may + fail to come about. The GNU General Public License permits making a modified + version and letting the public access it on a server without ever releasing + its source code to the public. + . + The GNU Affero General Public License is designed specifically to ensure + that, in such cases, the modified source code becomes available to the + community. It requires the operator of a network server to provide the + source code of the modified version running there to the users of that + server. Therefore, public use of a modified version, on a publicly + accessible server, gives the public access to the source code of the + modified version. + . + An older license, called the Affero General Public License and published by + Affero, was designed to accomplish similar goals. This is a different + license, not a version of the Affero GPL, but Affero has released a new + version of the Affero GPL which permits relicensing under this license. + . + The precise terms and conditions for copying, distribution and modification + follow. + TERMS AND CONDITIONS + 0. Definitions. + . + "This License" refers to version 3 of the GNU Affero General Public License. + . + "Copyright" also means copyright-like laws that apply to other kinds of + works, such as semiconductor masks. + . + "The Program" refers to any copyrightable work licensed under this License. + Each licensee is addressed as "you". "Licensees" and "recipients" may be + individuals or organizations. + . + To "modify" a work means to copy from or adapt all or part of the work in a + fashion requiring copyright permission, other than the making of an exact + copy. The resulting work is called a "modified version" of the earlier work + or a work "based on" the earlier work. + . + A "covered work" means either the unmodified Program or a work based on the + Program. + . + To "propagate" a work means to do anything with it that, without permission, + would make you directly or secondarily liable for infringement under + applicable copyright law, except executing it on a computer or modifying a + private copy. Propagation includes copying, distribution (with or without + modification), making available to the public, and in some countries other + activities as well. + . + To "convey" a work means any kind of propagation that enables other parties + to make or receive copies. Mere interaction with a user through a computer + network, with no transfer of a copy, is not conveying. + . + An interactive user interface displays "Appropriate Legal Notices" to the + extent that it includes a convenient and prominently visible feature that + (1) displays an appropriate copyright notice, and (2) tells the user that + there is no warranty for the work (except to the extent that warranties are + provided), that licensees may convey the work under this License, and how to + view a copy of this License. If the interface presents a list of user + commands or options, such as a menu, a prominent item in the list meets this + criterion. + 1. Source Code. + . + The "source code" for a work means the preferred form of the work for making + modifications to it. "Object code" means any non-source form of a work. + . + A "Standard Interface" means an interface that either is an official + standard defined by a recognized standards body, or, in the case of + interfaces specified for a particular programming language, one that is + widely used among developers working in that language. + . + The "System Libraries" of an executable work include anything, other than + the work as a whole, that (a) is included in the normal form of packaging a + Major Component, but which is not part of that Major Component, and (b) + serves only to enable use of the work with that Major Component, or to + implement a Standard Interface for which an implementation is available to + the public in source code form. A "Major Component", in this context, means + a major essential component (kernel, window system, and so on) of the + specific operating system (if any) on which the executable work runs, or a + compiler used to produce the work, or an object code interpreter used to run + it. + . + The "Corresponding Source" for a work in object code form means all the + source code needed to generate, install, and (for an executable work) run + the object code and to modify the work, including scripts to control those + activities. However, it does not include the work's System Libraries, or + general-purpose tools or generally available free programs which are used + unmodified in performing those activities but which are not part of the + work. For example, Corresponding Source includes interface definition files + associated with source files for the work, and the source code for shared + libraries and dynamically linked subprograms that the work is specifically + designed to require, such as by intimate data communication or control flow + between those subprograms and other parts of the work. + . + The Corresponding Source need not include anything that users can regenerate + automatically from other parts of the Corresponding Source. + . + The Corresponding Source for a work in source code form is that same work. + 2. Basic Permissions. + . + All rights granted under this License are granted for the term of copyright + on the Program, and are irrevocable provided the stated conditions are met. + This License explicitly affirms your unlimited permission to run the + unmodified Program. The output from running a covered work is covered by + this License only if the output, given its content, constitutes a covered + work. This License acknowledges your rights of fair use or other equivalent, + as provided by copyright law. + . + You may make, run and propagate covered works that you do not convey, + without conditions so long as your license otherwise remains in force. You + may convey covered works to others for the sole purpose of having them make + modifications exclusively for you, or provide you with facilities for + running those works, provided that you comply with the terms of this License + in conveying all material for which you do not control copyright. Those thus + making or running the covered works for you must do so exclusively on your + behalf, under your direction and control, on terms that prohibit them from + making any copies of your copyrighted material outside their relationship + with you. + . + Conveying under any other circumstances is permitted solely under the + conditions stated below. Sublicensing is not allowed; section 10 makes it + unnecessary. + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + . + No covered work shall be deemed part of an effective technological measure + under any applicable law fulfilling obligations under article 11 of the WIPO + copyright treaty adopted on 20 December 1996, or similar laws prohibiting or + restricting circumvention of such measures. + . + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such circumvention is + effected by exercising rights under this License with respect to the covered + work, and you disclaim any intention to limit operation or modification of + the work as a means of enforcing, against the work's users, your or third + parties' legal rights to forbid circumvention of technological measures. + 4. Conveying Verbatim Copies. + . + You may convey verbatim copies of the Program's source code as you receive + it, in any medium, provided that you conspicuously and appropriately publish + on each copy an appropriate copyright notice; keep intact all notices + stating that this License and any non-permissive terms added in accord with + section 7 apply to the code; keep intact all notices of the absence of any + warranty; and give all recipients a copy of this License along with the + Program. + . + You may charge any price or no price for each copy that you convey, and you + may offer support or warranty protection for a fee. + 5. Conveying Modified Source Versions. + . + You may convey a work based on the Program, or the modifications to produce + it from the Program, in the form of source code under the terms of section + 4, provided that you also meet all of these conditions: + . + a) The work must carry prominent notices stating that you modified it, + and giving a relevant date. + b) The work must carry prominent notices stating that it is released + under this License and any conditions added under section 7. This + requirement modifies the requirement in section 4 to "keep intact all + notices". + c) You must license the entire work, as a whole, under this License to + anyone who comes into possession of a copy. This License will therefore + apply, along with any applicable section 7 additional terms, to the whole of + the work, and all its parts, regardless of how they are packaged. This + License gives no permission to license the work in any other way, but it + does not invalidate such permission if you have separately received it. + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your work need not + make them do so. + . + A compilation of a covered work with other separate and independent works, + which are not by their nature extensions of the covered work, and which are + not combined with it such as to form a larger program, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + compilation and its resulting copyright are not used to limit the access or + legal rights of the compilation's users beyond what the individual works + permit. Inclusion of a covered work in an aggregate does not cause this + License to apply to the other parts of the aggregate. + 6. Conveying Non-Source Forms. + . + You may convey a covered work in object code form under the terms of + sections 4 and 5, provided that you also convey the machine-readable + Corresponding Source under the terms of this License, in one of these ways: + . + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the Corresponding + Source fixed on a durable physical medium customarily used for software + interchange. + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a written offer, + valid for at least three years and valid for as long as you offer spare + parts or customer support for that product model, to give anyone who + possesses the object code either (1) a copy of the Corresponding Source for + all the software in the product that is covered by this License, on a + durable physical medium customarily used for software interchange, for a + price no more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding Source from a + network server at no charge. + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This alternative is + allowed only occasionally and noncommercially, and only if you received the + object code with such an offer, in accord with subsection 6b. + d) Convey the object code by offering access from a designated place + (gratis or for a charge), and offer equivalent access to the Corresponding + Source in the same way through the same place at no further charge. You need + not require recipients to copy the Corresponding Source along with the + object code. If the place to copy the object code is a network server, the + Corresponding Source may be on a different server (operated by you or a + third party) that supports equivalent copying facilities, provided you + maintain clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the Corresponding + Source, you remain obligated to ensure that it is available for as long as + needed to satisfy these requirements. + e) Convey the object code using peer-to-peer transmission, provided you + inform other peers where the object code and Corresponding Source of the + work are being offered to the general public at no charge under subsection + 6d. + . + A separable portion of the object code, whose source code is excluded from + the Corresponding Source as a System Library, need not be included in + conveying the object code work. + . + A "User Product" is either (1) a "consumer product", which means any + tangible personal property which is normally used for personal, family, or + household purposes, or (2) anything designed or sold for incorporation into + a dwelling. In determining whether a product is a consumer product, doubtful + cases shall be resolved in favor of coverage. For a particular product + received by a particular user, "normally used" refers to a typical or common + use of that class of product, regardless of the status of the particular + user or of the way in which the particular user actually uses, or expects or + is expected to use, the product. A product is a consumer product regardless + of whether the product has substantial commercial, industrial or + non-consumer uses, unless such uses represent the only significant mode of + use of the product. + . + "Installation Information" for a User Product means any methods, procedures, + authorization keys, or other information required to install and execute + modified versions of a covered work in that User Product from a modified + version of its Corresponding Source. The information must suffice to ensure + that the continued functioning of the modified object code is in no case + prevented or interfered with solely because modification has been made. + . + If you convey an object code work under this section in, or with, or + specifically for use in, a User Product, and the conveying occurs as part of + a transaction in which the right of possession and use of the User Product + is transferred to the recipient in perpetuity or for a fixed term + (regardless of how the transaction is characterized), the Corresponding + Source conveyed under this section must be accompanied by the Installation + Information. But this requirement does not apply if neither you nor any + third party retains the ability to install modified object code on the User + Product (for example, the work has been installed in ROM). + . + The requirement to provide Installation Information does not include a + requirement to continue to provide support service, warranty, or updates for + a work that has been modified or installed by the recipient, or for the User + Product in which it has been modified or installed. Access to a network may + be denied when the modification itself materially and adversely affects the + operation of the network or violates the rules and protocols for + communication across the network. + . + Corresponding Source conveyed, and Installation Information provided, in + accord with this section must be in a format that is publicly documented + (and with an implementation available to the public in source code form), + and must require no special password or key for unpacking, reading or + copying. + 7. Additional Terms. + . + "Additional permissions" are terms that supplement the terms of this License + by making exceptions from one or more of its conditions. Additional + permissions that are applicable to the entire Program shall be treated as + though they were included in this License, to the extent that they are valid + under applicable law. If additional permissions apply only to part of the + Program, that part may be used separately under those permissions, but the + entire Program remains governed by this License without regard to the + additional permissions. + . + When you convey a copy of a covered work, you may at your option remove any + additional permissions from that copy, or from any part of it. (Additional + permissions may be written to require their own removal in certain cases + when you modify the work.) You may place additional permissions on material, + added by you to a covered work, for which you have or can give appropriate + copyright permission. + . + Notwithstanding any other provision of this License, for material you add to + a covered work, you may (if authorized by the copyright holders of that + material) supplement the terms of this License with terms: + . + a) Disclaiming warranty or limiting liability differently from the terms + of sections 15 and 16 of this License; or + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal Notices + displayed by works containing it; or + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in reasonable + ways as different from the original version; or + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + e) Declining to grant rights under trademark law for use of some trade + names, trademarks, or service marks; or + f) Requiring indemnification of licensors and authors of that material + by anyone who conveys the material (or modified versions of it) with + contractual assumptions of liability to the recipient, for any liability + that these contractual assumptions directly impose on those licensors and + authors. + . + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as you + received it, or any part of it, contains a notice stating that it is + governed by this License along with a term that is a further restriction, + you may remove that term. If a license document contains a further + restriction but permits relicensing or conveying under this License, you may + add to a covered work material governed by the terms of that license + document, provided that the further restriction does not survive such + relicensing or conveying. + . + If you add terms to a covered work in accord with this section, you must + place, in the relevant source files, a statement of the additional terms + that apply to those files, or a notice indicating where to find the + applicable terms. + . + Additional terms, permissive or non-permissive, may be stated in the form of + a separately written license, or stated as exceptions; the above + requirements apply either way. + 8. Termination. + . + You may not propagate or modify a covered work except as expressly provided + under this License. Any attempt otherwise to propagate or modify it is void, + and will automatically terminate your rights under this License (including + any patent licenses granted under the third paragraph of section 11). + . + However, if you cease all violation of this License, then your license from + a particular copyright holder is reinstated (a) provisionally, unless and + until the copyright holder explicitly and finally terminates your license, + and (b) permanently, if the copyright holder fails to notify you of the + violation by some reasonable means prior to 60 days after the cessation. + . + Moreover, your license from a particular copyright holder is reinstated + permanently if the copyright holder notifies you of the violation by some + reasonable means, this is the first time you have received notice of + violation of this License (for any work) from that copyright holder, and you + cure the violation prior to 30 days after your receipt of the notice. + . + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under this + License. If your rights have been terminated and not permanently reinstated, + you do not qualify to receive new licenses for the same material under + section 10. + 9. Acceptance Not Required for Having Copies. + . + You are not required to accept this License in order to receive or run a + copy of the Program. Ancillary propagation of a covered work occurring + solely as a consequence of using peer-to-peer transmission to receive a copy + likewise does not require acceptance. However, nothing other than this + License grants you permission to propagate or modify any covered work. These + actions infringe copyright if you do not accept this License. Therefore, by + modifying or propagating a covered work, you indicate your acceptance of + this License to do so. + 10. Automatic Licensing of Downstream Recipients. + . + Each time you convey a covered work, the recipient automatically receives a + license from the original licensors, to run, modify and propagate that work, + subject to this License. You are not responsible for enforcing compliance by + third parties with this License. + . + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a covered work + results from an entity transaction, each party to that transaction who + receives a copy of the work also receives whatever licenses to the work the + party's predecessor in interest had or could give under the previous + paragraph, plus a right to possession of the Corresponding Source of the + work from the predecessor in interest, if the predecessor has it or can get + it with reasonable efforts. + . + You may not impose any further restrictions on the exercise of the rights + granted or affirmed under this License. For example, you may not impose a + license fee, royalty, or other charge for exercise of rights granted under + this License, and you may not initiate litigation (including a cross-claim + or counterclaim in a lawsuit) alleging that any patent claim is infringed by + making, using, selling, offering for sale, or importing the Program or any + portion of it. + 11. Patents. + . + A "contributor" is a copyright holder who authorizes use under this License + of the Program or a work on which the Program is based. The work thus + licensed is called the contributor's "contributor version". + . + A contributor's "essential patent claims" are all patent claims owned or + controlled by the contributor, whether already acquired or hereafter + acquired, that would be infringed by some manner, permitted by this License, + of making, using, or selling its contributor version, but do not include + claims that would be infringed only as a consequence of further modification + of the contributor version. For purposes of this definition, "control" + includes the right to grant patent sublicenses in a manner consistent with + the requirements of this License. + . + Each contributor grants you a non-exclusive, worldwide, royalty-free patent + license under the contributor's essential patent claims, to make, use, sell, + offer for sale, import and otherwise run, modify and propagate the contents + of its contributor version. + . + In the following three paragraphs, a "patent license" is any express + agreement or commitment, however denominated, not to enforce a patent (such + as an express permission to practice a patent or covenant not to sue for + patent infringement). To "grant" such a patent license to a party means to + make such an agreement or commitment not to enforce a patent against the + party. + . + If you convey a covered work, knowingly relying on a patent license, and the + Corresponding Source of the work is not available for anyone to copy, free + of charge and under the terms of this License, through a publicly available + network server or other readily accessible means, then you must either (1) + cause the Corresponding Source to be so available, or (2) arrange to deprive + yourself of the benefit of the patent license for this particular work, or + (3) arrange, in a manner consistent with the requirements of this License, + to extend the patent license to downstream recipients. "Knowingly relying" + means you have actual knowledge that, but for the patent license, your + conveying the covered work in a country, or your recipient's use of the + covered work in a country, would infringe one or more identifiable patents + in that country that you have reason to believe are valid. + . + If, pursuant to or in connection with a single transaction or arrangement, + you convey, or propagate by procuring conveyance of, a covered work, and + grant a patent license to some of the parties receiving the covered work + authorizing them to use, propagate, modify or convey a specific copy of the + covered work, then the patent license you grant is automatically extended to + all recipients of the covered work and works based on it. + . + A patent license is "discriminatory" if it does not include within the scope + of its coverage, prohibits the exercise of, or is conditioned on the + non-exercise of one or more of the rights that are specifically granted + under this License. You may not convey a covered work if you are a party to + an arrangement with a third party that is in the business of distributing + software, under which you make payment to the third party based on the + extent of your activity of conveying the work, and under which the third + party grants, to any of the parties who would receive the covered work from + you, a discriminatory patent license (a) in connection with copies of the + covered work conveyed by you (or copies made from those copies), or (b) + primarily for and in connection with specific products or compilations that + contain the covered work, unless you entered into that arrangement, or that + patent license was granted, prior to 28 March 2007. + . + Nothing in this License shall be construed as excluding or limiting any + implied license or other defenses to infringement that may otherwise be + available to you under applicable patent law. + 12. No Surrender of Others' Freedom. + . + If conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot convey a + covered work so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you may + not convey it at all. For example, if you agree to terms that obligate you + to collect a royalty for further conveying from those to whom you convey the + Program, the only way you could satisfy both those terms and this License + would be to refrain entirely from conveying the Program. + 13. Remote Network Interaction; Use with the GNU General Public License. + . + Notwithstanding any other provision of this License, if you modify the + Program, your modified version must prominently offer all users interacting + with it remotely through a computer network (if your version supports such + interaction) an opportunity to receive the Corresponding Source of your + version by providing access to the Corresponding Source from a network + server at no charge, through some standard or customary means of + facilitating copying of software. This Corresponding Source shall include + the Corresponding Source for any work covered by version 3 of the GNU + General Public License that is incorporated pursuant to the following + paragraph. + . + Notwithstanding any other provision of this License, you have permission to + link or combine any covered work with a work licensed under version 3 of the + GNU General Public License into a single combined work, and to convey the + resulting work. The terms of this License will continue to apply to the part + which is the covered work, but the work with which it is combined will + remain governed by version 3 of the GNU General Public License. + 14. Revised Versions of this License. + . + The Free Software Foundation may publish revised and/or new versions of the + GNU Affero General Public License from time to time. Such new versions will + be similar in spirit to the present version, but may differ in detail to + address new problems or concerns. + . + Each version is given a distinguishing version number. If the Program + specifies that a certain numbered version of the GNU Affero General Public + License "or any later version" applies to it, you have the option of + following the terms and conditions either of that numbered version or of any + later version published by the Free Software Foundation. If the Program does + not specify a version number of the GNU Affero General Public License, you + may choose any version ever published by the Free Software Foundation. + . + If the Program specifies that a proxy can decide which future versions of + the GNU Affero General Public License can be used, that proxy's public + statement of acceptance of a version permanently authorizes you to choose + that version for the Program. + . + Later license versions may give you additional or different permissions. + However, no additional obligations are imposed on any author or copyright + holder as a result of your choosing to follow a later version. + 15. Disclaimer of Warranty. + . + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE + LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. + SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY + SERVICING, REPAIR OR CORRECTION. + 16. Limitation of Liability. + . + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL + ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE + PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY + GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE + OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA + OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), + EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGES. + 17. Interpretation of Sections 15 and 16. + . + If the disclaimer of warranty and limitation of liability provided above + cannot be given local legal effect according to their terms, reviewing + courts shall apply local law that most closely approximates an absolute + waiver of all civil liability in connection with the Program, unless a + warranty or assumption of liability accompanies a copy of the Program in + return for a fee. \ No newline at end of file diff --git a/Resources/Debian/pkg/DEBIAN/rules b/Resources/Debian/pkg/DEBIAN/rules new file mode 100755 index 0000000000000000000000000000000000000000..7903e6f86e772cbcd0b480b198a49be5443852f4 --- /dev/null +++ b/Resources/Debian/pkg/DEBIAN/rules @@ -0,0 +1,17 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#DH_VERBOSE = 1 + +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + + +%: + dh $@ \ No newline at end of file diff --git a/Resources/Debian/pkg/usr/local/bin/.gitkeep b/Resources/Debian/pkg/usr/local/bin/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Resources/macApp/Signing/entitlements.plist b/Resources/macOS/Signing/entitlements.plist similarity index 100% rename from Resources/macApp/Signing/entitlements.plist rename to Resources/macOS/Signing/entitlements.plist