From 9f6e16e7410cec500f637ff24c82355d96d22187 Mon Sep 17 00:00:00 2001 From: Winter_Myst <22961076-wintermyst@users.noreply.gitlab.com> Date: Sun, 22 Sep 2024 01:44:24 +0200 Subject: [PATCH] feat: ci/cd --- .gitlab-ci.yml | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++ gulpfile.js | 2 +- 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..b213980 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,94 @@ +stages: + - compile + - release + +# Compile Job (runs on every commit) +compile: + stage: compile + image: node:14 + script: + - npm install --global gulp-cli + - npm install + - gulp compile + only: + - branches + +# Release Job (manually triggered with version) +release: + stage: release + image: node:14 + before_script: + - apt-get update && apt-get install -y curl jq + - npm install --global gulp-cli + - npm install + # Set up SSH agent and add private key for pushing to protected branch + - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' + - eval $(ssh-agent -s) + - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - ssh-keyscan gitlab.com >> ~/.ssh/known_hosts + script: + # Check if VERSION is provided + - if [ -z "$VERSION" ]; then echo "Error: VERSION variable is required." && exit 1; fi + + # Run Gulp release task (includes zipping) + - gulp release + + # Create a release on GitLab + - export RELEASE_RESPONSE=$(curl --request POST \ + --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ + --header "Content-Type: application/json" \ + --data '{ + "name": "Release v'$VERSION'", + "tag_name": "v'$VERSION'", + "description": "Release v'$VERSION'", + "ref": "master", + "assets": { + "links": [ + { + "name": "Download kids-on-brooms.zip", + "url": "https://gitlab.com/YOUR_NAMESPACE/YOUR_PROJECT/-/jobs/$CI_JOB_ID/artifacts/download" + } + ] + } + }' "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/releases") + + # Get the release URL from the response + - export RELEASE_URL=$(echo $RELEASE_RESPONSE | jq -r '.assets.links[0].url') + + # Update the system.json file with the release URL + - sed -i "s|\"download\":.*|\"download\": \"$RELEASE_URL\",|" system.json + + # Commit the updated system.json and push it to master + - git config --global user.name "GitLab CI" + - git config --global user.email "ci@gitlab.com" + - git add system.json + - git commit -m "Update system.json with release URL" + - git push origin master + + # Publish the release to the Foundry API + - curl -X POST https://api.foundryvtt.com/_api/packages/release_version/ \ + -H "Authorization: $FOUNDRY_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "id": "Your-Package-ID", + "release": { + "version": "'$VERSION'", + "manifest": "https://gitlab.com/wintermyst/kids-on-brooms/-/raw/master/system.json", + "notes": "https://gitlab.com/wintermyst/kids-on-brooms/releases/tag/v'$VERSION'", + "compatibility": { + "minimum": "12.331", + "verified": "12.331", + "maximum": "" + } + } + }' + only: + - master + when: manual + allow_failure: false + artifacts: + paths: + - kids-on-brooms.zip + expire_in: never \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 5ba179b..dcfb34a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -73,7 +73,7 @@ function zipRelease() { .pipe(gulp.dest('.')); } -exports.build = gulp.series( +exports.release = gulp.series( compileScss, zipRelease ); \ No newline at end of file