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

CI/CD => Enhancements

parent 32c4c4ae
Branches
Tags 2.0.0
No related merge requests found
Pipeline #26332 passed
...@@ -8,8 +8,13 @@ variables: ...@@ -8,8 +8,13 @@ variables:
MACOS_PKG_EXTENSION: '.pkg' MACOS_PKG_EXTENSION: '.pkg'
MACOS_PKG_BIN_NAME: "${BIN_NAME}${MACOS_PKG_EXTENSION}" MACOS_PKG_BIN_NAME: "${BIN_NAME}${MACOS_PKG_EXTENSION}"
WINDOWS_BIN_EXTENSION: '.exe'
WINDOWS_BIN_NAME: "${BIN_NAME}${WINDOWS_BIN_EXTENSION}"
ARTIFACTS_FOLDER: /artifacts ARTIFACTS_FOLDER: /artifacts
GITLAB_API_PROJECT_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}
BIN_FOLDER_MACOS: $ARTIFACTS_FOLDER/macOS BIN_FOLDER_MACOS: $ARTIFACTS_FOLDER/macOS
BIN_FOLDER_LINUX: $ARTIFACTS_FOLDER/Linux BIN_FOLDER_LINUX: $ARTIFACTS_FOLDER/Linux
BIN_FOLDER_WINDOWS: $ARTIFACTS_FOLDER/Windows BIN_FOLDER_WINDOWS: $ARTIFACTS_FOLDER/Windows
...@@ -23,15 +28,15 @@ variables: ...@@ -23,15 +28,15 @@ variables:
BIN_PKG_FILE_MACOS_X64: $BIN_FOLDER_MACOS_X64/$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_ARM64: $BIN_FOLDER_LINUX/arm64/$BIN_NAME
BIN_FILE_LINUX_X64: $BIN_FOLDER_LINUX/x64/$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_ARM64: $BIN_FOLDER_WINDOWS/arm64/$WINDOWS_BIN_NAME
BIN_FILE_WINDOWS_X64: $BIN_FOLDER_WINDOWS/x64/$BIN_NAME.exe BIN_FILE_WINDOWS_X64: $BIN_FOLDER_WINDOWS/x64/$WINDOWS_BIN_NAME
VERSION_FILE: $ARTIFACTS_FOLDER/VERSION VERSION_FILE: $ARTIFACTS_FOLDER/VERSION
VERSION_DEV_SUFFIX: '-dev' VERSION_DEV_SUFFIX: '-dev'
PROJECT_FOLDER: NodeApp 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: .get_version:
...@@ -47,8 +52,8 @@ variables: ...@@ -47,8 +52,8 @@ variables:
- PACKAGE_URL_MACOS_X64_PKG="${PACKAGE_REGISTRY_URL}_macOS-pkg-x64/${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_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_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_ARM64_BIN="${PACKAGE_REGISTRY_URL}_Windows-arm64/${VERSION}/${WINDOWS_BIN_NAME}"
- PACKAGE_URL_WINDOWS_X64_BIN="${PACKAGE_REGISTRY_URL}_Windows-x64/${VERSION}/${BIN_NAME}" - PACKAGE_URL_WINDOWS_X64_BIN="${PACKAGE_REGISTRY_URL}_Windows-x64/${VERSION}/${WINDOWS_BIN_NAME}"
.build_cli: .build_cli:
script: script:
...@@ -86,12 +91,14 @@ variables: ...@@ -86,12 +91,14 @@ variables:
.clean_release: .clean_release:
script: script:
# Delete release if it already exists # 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: .clean_packages:
script: script:
# Get all packages of the project # 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) # Filter and select packages to delete (based on version)
- packagesToDelete=`jq -r '.[] | select(.version=="'${VERSION}'") | ._links.delete_api_path' gitlabPackages.json` - packagesToDelete=`jq -r '.[] | select(.version=="'${VERSION}'") | ._links.delete_api_path' gitlabPackages.json`
# Delete packages by calling Gitlab API # Delete packages by calling Gitlab API
...@@ -103,16 +110,16 @@ variables: ...@@ -103,16 +110,16 @@ variables:
stages: stages:
- test
- build - build
- sign - sign
- clean-same-release - clean
- clean-dev-release
- upload - upload
- release - release
build:test: test:build:
stage: build stage: test
tags: tags:
- build - build
image: node:latest image: node:latest
...@@ -122,7 +129,7 @@ build:test: ...@@ -122,7 +129,7 @@ build:test:
- !reference [.get_version, script] - !reference [.get_version, script]
- !reference [.build_cli, script] - !reference [.build_cli, script]
rules: 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: build:version:
stage: build stage: build
...@@ -165,7 +172,7 @@ sign:macos: ...@@ -165,7 +172,7 @@ sign:macos:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/'
clean:release: clean:release:
stage: clean-same-release stage: clean
tags: tags:
- gitlab_clean - gitlab_clean
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
...@@ -176,7 +183,7 @@ clean:release: ...@@ -176,7 +183,7 @@ clean:release:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/'
clean:packages: clean:packages:
stage: clean-same-release stage: clean
tags: tags:
- gitlab_clean - gitlab_clean
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
...@@ -186,8 +193,8 @@ clean:packages: ...@@ -186,8 +193,8 @@ clean:packages:
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/'
clean-dev:release: clean:dev:release:
stage: clean-dev-release stage: clean
tags: tags:
- gitlab_clean - gitlab_clean
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
...@@ -198,8 +205,8 @@ clean-dev:release: ...@@ -198,8 +205,8 @@ clean-dev:release:
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
clean-dev:packages: clean:dev:packages:
stage: clean-dev-release stage: clean
tags: tags:
- gitlab_clean - gitlab_clean
image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest image: registry.gitlab.com/gitlab-ci-utils/curl-jq:latest
...@@ -234,7 +241,7 @@ upload:packages: ...@@ -234,7 +241,7 @@ upload:packages:
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/'
release_job: release:gitlab:
stage: release stage: release
tags: tags:
- release - release
...@@ -243,9 +250,11 @@ release_job: ...@@ -243,9 +250,11 @@ release_job:
- !reference [.get_version, script] - !reference [.get_version, script]
- !reference [.get_packages_url, script] - !reference [.get_packages_url, script]
- echo 'Running release_job' - 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_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` - 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` - 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" '{ 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, "name": $version,
...@@ -286,6 +295,6 @@ release_job: ...@@ -286,6 +295,6 @@ release_job:
curl --data "${RELEASE_DATA}" \ curl --data "${RELEASE_DATA}" \
--header "Content-Type: application/json" \ --header "Content-Type: application/json" \
--header "JOB-TOKEN: $CI_JOB_TOKEN" \ --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: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/'
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment