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

Merge branch 'add-wiki-build' into v2.1.0

parents 7f44e348 8d45b86e
No related branches found
No related tags found
No related merge requests found
Pipeline #26389 failed
...@@ -6,6 +6,8 @@ variables: ...@@ -6,6 +6,8 @@ variables:
DOCKER_TLS_CERTDIR: DOCKER_TLS_CERTDIR:
DOCKER_DRIVER: overlay2 DOCKER_DRIVER: overlay2
PROJECT_NAME: DojoExerciseChecker
VERSION_DEV_SUFFIX: '-dev' VERSION_DEV_SUFFIX: '-dev'
GITLAB_API_PROJECT_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID} GITLAB_API_PROJECT_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}
...@@ -15,12 +17,24 @@ variables: ...@@ -15,12 +17,24 @@ variables:
PROJECT_FOLDER: ExerciseChecker PROJECT_FOLDER: ExerciseChecker
PACKAGE_REGISTRY_URL: "${GITLAB_API_PROJECT_URL}/packages/generic/${PROJECT_NAME}"
WIKI_FOLDER: Wiki
.get_version: .get_version:
script: script:
- IS_DEV=$([[ $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH ]] && echo false || echo true) - 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 '') - VERSION=$(jq -r .version $PROJECT_FOLDER/package.json)$([[ $IS_DEV == true ]] && echo $VERSION_DEV_SUFFIX || echo '')
.get_packages_url:
script:
# Wiki
- WIKI_ARCHIVE_NAME="${PROJECT_NAME}_Wiki_${VERSION}.tar.xz"
- PACKAGE_URL_WIKI="${PACKAGE_REGISTRY_URL}_Wiki/${VERSION}/${WIKI_ARCHIVE_NAME}"
.init_dind_script: .init_dind_script:
script: script:
# Install dependencies # Install dependencies
...@@ -28,20 +42,25 @@ variables: ...@@ -28,20 +42,25 @@ variables:
- apk add git - apk add git
- apk add jq - apk add jq
- apk add curl - apk add curl
# Init docker buildx # Init docker buildx
- docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWORD $DOCKER_REGISTRY - docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWORD $DOCKER_REGISTRY
- docker buildx create --use - docker buildx create --use
# Get version from package.json # Get version from package.json
- !reference [.get_version, script] - !reference [.get_version, script]
- CONTAINER_IMAGE=$DOCKER_REGISTRY_IMAGE:$VERSION - CONTAINER_IMAGE=$DOCKER_REGISTRY_IMAGE:$VERSION
.build_script: .build_script:
script: script:
- !reference [ .init_dind_script, script ] - !reference [ .init_dind_script, script ]
- mkdir -p $ARTIFACTS_FOLDER - mkdir -p $ARTIFACTS_FOLDER
# Download secure files # Download secure files
- curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | sh - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | sh
- mv .secure_files/env_$VERSION $PROJECT_FOLDER/.env - mv .secure_files/env_$VERSION $PROJECT_FOLDER/.env
# Need to build for each platform separately because of multi-stage builds (docker buildx don't use cache same way as docker build) # Need to build for each platform separately because of multi-stage builds (docker buildx don't use cache same way as docker build)
- > - >
platform_array=$(echo $DOCKER_PLATFORMS | tr "," "\n"); platform_array=$(echo $DOCKER_PLATFORMS | tr "," "\n");
...@@ -50,20 +69,40 @@ variables: ...@@ -50,20 +69,40 @@ variables:
docker buildx build --pull --platform $platform --file $DOCKERFILE --tag $CONTAINER_IMAGE . docker buildx build --pull --platform $platform --file $DOCKERFILE --tag $CONTAINER_IMAGE .
done done
.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" "${GITLAB_API_PROJECT_URL}/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) # 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}"' - '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: stages:
- test - test
- build - build
- clean - clean
- upload
- release - release
test:build: test:build:
stage: test stage: test
tags: tags:
...@@ -77,6 +116,7 @@ test:build: ...@@ -77,6 +116,7 @@ test:build:
rules: rules:
- if: '$CI_COMMIT_TAG =~ "/^$/" && $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
tags: tags:
...@@ -87,11 +127,13 @@ build:version: ...@@ -87,11 +127,13 @@ build:version:
- docker:dind - docker:dind
script: script:
- !reference [ .build_script, script ] - !reference [ .build_script, script ]
# Here docker buildx can use cached images created in previous step # Here docker buildx can use cached images created in previous step
- docker buildx build --platform $DOCKER_PLATFORMS --file $DOCKERFILE --push --tag $CONTAINER_IMAGE . - docker buildx build --platform $DOCKER_PLATFORMS --file $DOCKERFILE --push --tag $CONTAINER_IMAGE .
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:release: clean:release:
stage: clean stage: clean
tags: tags:
...@@ -103,6 +145,19 @@ clean:release: ...@@ -103,6 +145,19 @@ clean:release:
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: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_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH =~ /^v[0-9]+(\.[0-9]+)*$/'
clean:dev:release: clean:dev:release:
stage: clean stage: clean
tags: tags:
...@@ -115,6 +170,20 @@ clean:dev:release: ...@@ -115,6 +170,20 @@ clean:dev:release:
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - 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'
clean:dev:dockerhub: clean:dev:dockerhub:
stage: clean stage: clean
tags: tags:
...@@ -126,6 +195,7 @@ clean:dev:dockerhub: ...@@ -126,6 +195,7 @@ clean:dev:dockerhub:
script: script:
- !reference [.init_dind_script, script] - !reference [.init_dind_script, script]
- VERSION="${VERSION}${VERSION_DEV_SUFFIX}" - VERSION="${VERSION}${VERSION_DEV_SUFFIX}"
# Remove dev tag # Remove dev tag
## Login to dockerhub (get JWT token) ## Login to dockerhub (get JWT token)
- GET_TOKEN_DATA=$(jq --null-input --arg username "$DOCKER_REGISTRY_USER" --arg password "$DOCKER_REGISTRY_PASSWORD" '{"username":$username,"password":$password}') - GET_TOKEN_DATA=$(jq --null-input --arg username "$DOCKER_REGISTRY_USER" --arg password "$DOCKER_REGISTRY_PASSWORD" '{"username":$username,"password":$password}')
...@@ -134,11 +204,36 @@ clean:dev:dockerhub: ...@@ -134,11 +204,36 @@ clean:dev:dockerhub:
--header "Content-Type: application/json" \ --header "Content-Type: application/json" \
--header "JOB-TOKEN: $CI_JOB_TOKEN" \ --header "JOB-TOKEN: $CI_JOB_TOKEN" \
"https://hub.docker.com/v2/users/login/" | jq -r .token` "https://hub.docker.com/v2/users/login/" | jq -r .token`
## Delete tag ## Delete tag
- 'curl --header "Authorization: JWT ${TOKEN}" --request DELETE "https://hub.docker.com/v2/repositories/${DOCKER_REGISTRY_IMAGE}/tags/${VERSION}/"' - 'curl --header "Authorization: JWT ${TOKEN}" --request DELETE "https://hub.docker.com/v2/repositories/${DOCKER_REGISTRY_IMAGE}/tags/${VERSION}/"'
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
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:dockerhub:latest: release:dockerhub:latest:
stage: release stage: release
tags: tags:
...@@ -149,11 +244,60 @@ release:dockerhub:latest: ...@@ -149,11 +244,60 @@ release:dockerhub:latest:
- docker:dind - docker:dind
script: script:
- !reference [.init_dind_script, script] - !reference [.init_dind_script, script]
# Push latest tag # Push latest tag
- docker buildx imagetools create $CONTAINER_IMAGE --tag $DOCKER_REGISTRY_IMAGE:latest - docker buildx imagetools create $CONTAINER_IMAGE --tag $DOCKER_REGISTRY_IMAGE:latest
rules: rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
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: release:gitlab:
stage: release stage: release
tags: tags:
...@@ -162,17 +306,28 @@ release:gitlab: ...@@ -162,17 +306,28 @@ release:gitlab:
script: script:
- !reference [.get_version, script] - !reference [.get_version, script]
- echo 'Running release_job' - echo 'Running release_job'
- !reference [.get_packages_url, script]
# Extract description from CHANGELOG.md # 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) # 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,
"description": $description, "description": $description,
"tag_name": $tag_name, "tag_name": $tag_name,
"ref": $ref "ref": $ref,
"assets": {
"links": [
{
"name": "Wiki",
"url": "'${PACKAGE_URL_WIKI}'",
}
]
}
}') }')
- > - >
curl --data "${RELEASE_DATA}" \ curl --data "${RELEASE_DATA}" \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment