diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9e3ac9177517205ddc9034c3a05eefcd52eebd57..3b50e6bf884d89a67a424daeb8dabd9044cba47b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -38,69 +38,93 @@ variables: 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_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}" - 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="DojoCLI_Wiki_${VERSION}.tar.xz" + - PACKAGE_URL_WIKI="${PACKAGE_REGISTRY_URL}_Windows-x64/${VERSION}/${WIKI_ARCHIVE_NAME}" + + .build_cli: script: - cd NodeApp + # Download secure files - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash - mv env_$VERSION .env + # Install dependencies - npm install - npm run build + # Build binaries ## macOS - npx pkg . -t node18-macos-arm64 --output $BIN_FILE_MACOS_ARM64 --no-bytecode --public-packages "*" --public - npx pkg . -t node18-macos-x64 --output $BIN_FILE_MACOS_X64 --no-bytecode --public-packages "*" --public + ## Linux - npx pkg . -t node18-linuxstatic-arm64 --output $BIN_FILE_LINUX_ARM64 --no-bytecode --public-packages "*" --public - npx pkg . -t node18-linuxstatic-x64 --output $BIN_FILE_LINUX_X64 --no-bytecode --public-packages "*" --public + ## Windows - npx pkg . -t node18-win-arm64 --output $BIN_FILE_WINDOWS_ARM64 --no-bytecode --public-packages "*" --public - npx pkg . -t node18-win-x64 --output $BIN_FILE_WINDOWS_X64 --no-bytecode --public-packages "*" --public + .sign_macos: 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 + + # 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 @@ -127,10 +151,13 @@ test:build: - apt update - apt install -y jq - !reference [.get_version, script] + + # Build - !reference [.build_cli, script] rules: - if: '$CI_COMMIT_TAG =~ "/^$/" && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_COMMIT_BRANCH !~ /^v[0-9]+(\.[0-9]+)*$/' + build:version: stage: build tags: @@ -142,6 +169,8 @@ build:version: - !reference [.get_version, script] - mkdir -p $ARTIFACTS_FOLDER - echo $VERSION > $VERSION_FILE + + # Build - !reference [.build_cli, script] artifacts: untracked: true @@ -151,6 +180,7 @@ build:version: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' + sign:macos: stage: sign tags: @@ -160,17 +190,22 @@ sign:macos: 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 day + expire_in: 1 hour rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' + clean:release: stage: clean tags: @@ -182,6 +217,7 @@ clean:release: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' + clean:packages: stage: clean tags: @@ -193,6 +229,7 @@ clean:packages: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' + clean:dev:release: stage: clean tags: @@ -205,6 +242,7 @@ clean:dev:release: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' + clean:dev:packages: stage: clean tags: @@ -217,6 +255,7 @@ clean:dev:packages: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' + upload:packages: stage: upload tags: @@ -227,20 +266,94 @@ upload:packages: script: - !reference [.get_version, script] - !reference [.get_packages_url, script] - #macOS + + # 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 + + # 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 + + # 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_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' + +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_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' + + +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: @@ -249,11 +362,12 @@ release:gitlab: script: - !reference [.get_version, script] - !reference [.get_packages_url, script] - - echo 'Running release_job' + # 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" '{ @@ -285,8 +399,11 @@ release:gitlab: "name": "macOS (Intel) package", "url": "'${PACKAGE_URL_MACOS_X64_PKG}'", },{ - "name": "macOS (Apple Silicon) package", - "url": "'${PACKAGE_URL_MACOS_ARM64_PKG}'", + "name": "macOS (Apple Silicon) package", + "url": "'${PACKAGE_URL_MACOS_ARM64_PKG}'", + },{ + "name": "Wiki", + "url": "'${PACKAGE_URL_WIKI}'", } ] } diff --git a/Wiki/Home.md b/Wiki/Home.md new file mode 100644 index 0000000000000000000000000000000000000000..ec072aec5347c5ca75c7fe301cb07585dc56fad6 --- /dev/null +++ b/Wiki/Home.md @@ -0,0 +1 @@ +# Wiki of the CLI of Dojo \ No newline at end of file