diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a5322dd13132c688dbdecb1f9aee199d359de840..9e3ac9177517205ddc9034c3a05eefcd52eebd57 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,8 +8,13 @@ variables: 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 @@ -23,15 +28,15 @@ variables: 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/$BIN_NAME.exe - BIN_FILE_WINDOWS_X64: $BIN_FOLDER_WINDOWS/x64/$BIN_NAME.exe + 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: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${BIN_NAME}" + PACKAGE_REGISTRY_URL: "${GITLAB_API_PROJECT_URL}/packages/generic/${BIN_NAME}" .get_version: @@ -47,8 +52,8 @@ variables: - 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}/${BIN_NAME}" - - PACKAGE_URL_WINDOWS_X64_BIN="${PACKAGE_REGISTRY_URL}_Windows-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}" .build_cli: script: @@ -86,12 +91,14 @@ variables: .clean_release: script: # Delete release if it already exists - - 'curl --request DELETE --header "JOB-TOKEN: $CI_JOB_TOKEN" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}"' + - '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" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages" > gitlabPackages.json' + - '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 @@ -103,16 +110,16 @@ variables: stages: + - test - build - sign - - clean-same-release - - clean-dev-release + - clean - upload - release -build:test: - stage: build +test:build: + stage: test tags: - build image: node:latest @@ -122,7 +129,7 @@ build:test: - !reference [.get_version, script] - !reference [.build_cli, script] rules: - - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_COMMIT_BRANCH !~ /^v[0-9]+(\.[0-9]+)*$/' + - if: '$CI_COMMIT_TAG =~ "/^$/" && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_COMMIT_BRANCH !~ /^v[0-9]+(\.[0-9]+)*$/' build:version: stage: build @@ -165,7 +172,7 @@ sign:macos: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' clean:release: - stage: clean-same-release + stage: clean tags: - gitlab_clean image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest @@ -176,7 +183,7 @@ clean:release: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' clean:packages: - stage: clean-same-release + stage: clean tags: - gitlab_clean image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest @@ -186,8 +193,8 @@ clean:packages: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' -clean-dev:release: - stage: clean-dev-release +clean:dev:release: + stage: clean tags: - gitlab_clean image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest @@ -198,8 +205,8 @@ clean-dev:release: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' -clean-dev:packages: - stage: clean-dev-release +clean:dev:packages: + stage: clean tags: - gitlab_clean image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest @@ -234,7 +241,7 @@ upload:packages: rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' -release_job: +release:gitlab: stage: release tags: - release @@ -243,9 +250,11 @@ release_job: - !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" '{ "name": $version, @@ -286,6 +295,6 @@ release_job: curl --data "${RELEASE_DATA}" \ --header "Content-Type: application/json" \ --header "JOB-TOKEN: $CI_JOB_TOKEN" \ - --request POST "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" + --request POST "${GITLAB_API_PROJECT_URL}/releases" rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' \ No newline at end of file