From 41567d417a925e1847c98a4e9f7c9bdcafdb2f86 Mon Sep 17 00:00:00 2001 From: echel0n Date: Mon, 11 Nov 2019 00:27:33 -0800 Subject: [PATCH] Added CI/CD release stage to build app --- .gitlab-ci.yml | 164 +++++++++---------------------------------- Gruntfile.js | 149 +-------------------------------------- README.txt | 4 +- package.json | 3 +- requirements-dev.txt | 4 +- setup.cfg | 12 +++- 6 files changed, 52 insertions(+), 284 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0827de1a4..b4d25c96d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,50 +1,9 @@ stages: - - release - build - review - - deploy - -sentry_release_master: - stage: release - image: - name: getsentry/sentry-cli - entrypoint: [""] - script: - - export SENTRY_URL=$SENTRY_URL - - export SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN - - export SENTRY_ORG=$SENTRY_ORG - - export SENTRY_PROJECT=$SENTRY_PROJECT - - sentry-cli releases new --project $SENTRY_PROJECT $(cat sickrage/version.txt) - - sentry-cli releases set-commits --auto $(cat sickrage/version.txt) - - sentry-cli releases finalize $(cat sickrage/version.txt) - - sentry-cli releases deploys $(cat sickrage/version.txt) new -e master - only: - - /^[0-9.]+$/ - except: - - branches - - triggers - -sentry_release_develop: - stage: release - image: - name: getsentry/sentry-cli - entrypoint: [""] - script: - - export SENTRY_URL=$SENTRY_URL - - export SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN - - export SENTRY_ORG=$SENTRY_ORG - - export SENTRY_PROJECT=$SENTRY_PROJECT - - sentry-cli releases new --project $SENTRY_PROJECT $(cat sickrage/version.txt) - - sentry-cli releases set-commits --auto $(cat sickrage/version.txt) - - sentry-cli releases finalize $(cat sickrage/version.txt) - - sentry-cli releases deploys $(cat sickrage/version.txt) new -e develop - only: - - /^[0-9.]+dev[0-9]+$/ - except: - - branches - - triggers + - release -build:mr: +merge_request:build: stage: build image: name: docker:latest @@ -64,10 +23,10 @@ build:mr: only: - merge_requests -deploy:mr: +merge_request:review: stage: review dependencies: - - build:mr + - merge_request:build image: name: lachlanevenson/k8s-kubectl:latest entrypoint: ["/bin/sh", "-c"] @@ -91,11 +50,11 @@ deploy:mr: environment: name: review/$CI_COMMIT_REF_NAME url: https://review.sickrage.ca/$CI_COMMIT_REF_SLUG - on_stop: stop:mr + on_stop: merge_request:stop only: - merge_requests -stop:mr: +merge_request:stop: stage: review image: name: lachlanevenson/k8s-kubectl:latest @@ -113,91 +72,34 @@ stop:mr: only: - merge_requests -deploy_pypi: - stage: deploy - image: python:3.7-alpine3.9 - script: - - apk add --no-cache py-pip - - pip install -U twine - - python setup.py sdist bdist_wheel - - twine upload dist/* - only: - - /^[0-9.]+$/ - - /^[0-9.]+dev[0-9]+$/ - except: - - branches - - triggers - -deploy_docker_master: - stage: deploy - variables: - UPSTREAM_BRANCH: master - UPSTREAM_COMMIT_SHA: $CI_COMMIT_SHA - trigger: - project: sickrage/sickrage-docker - branch: master - only: - - /^[0-9.]+$/ - except: - - branches - - triggers - -deploy_docker_develop: - stage: deploy - variables: - UPSTREAM_BRANCH: develop - UPSTREAM_COMMIT_SHA: $CI_COMMIT_SHA - trigger: - project: sickrage/sickrage-docker - branch: master - only: - - /^[0-9.]+dev[0-9]+$/ - except: - - branches - - triggers - -deploy_synology: - stage: deploy - variables: - UPSTREAM_BRANCH: master - UPSTREAM_COMMIT_SHA: $CI_COMMIT_SHA - trigger: - project: sickrage/sickrage-synology - branch: master - only: - - /^[0-9.]+$/ - except: - - branches - - triggers - -deploy_readynas: - stage: deploy +release:develop: + stage: release + image: + name: nikolaik/python-nodejs:python3.7-nodejs10-alpine variables: - UPSTREAM_COMMIT_TAG: $CI_COMMIT_TAG - UPSTREAM_PROJECT_NAME: $CI_PROJECT_NAME - UPSTREAM_COMMIT_TAG_MESSAGE: $CI_COMMIT_TAG_MESSAGE - UPSTREAM_PROJECT_ID: $CI_PROJECT_ID - trigger: - project: sickrage/sickrage-readynas - branch: master + NODE_ENV: "development" + script: + - apk add --no-cache git bash openssh-client + - pip install bumpversion + - npm install -qs + - pip install -r requirements-dev.txt + - eval $(ssh-agent -s) + - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - git config --global user.email $(git --no-pager show -s --format='%ae' HEAD) + - git config --global user.name $(git --no-pager show -s --format='%an' HEAD) + - npm run build + - python setup.py extract_messages + - crowdin-cli-py upload sources + - crowdin-cli-py download + - python setup.py compile_catalog + - git add --all + - bumpversion --allow-dirty preversion sickrage/version.txt + - git push https://$GIT_ACCESS_USER:$GIT_ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:$CI_COMMIT_REF_NAME --follow-tags only: - - /^[0-9.]+$/ + - test-develop except: - - branches + - tags - triggers - -deploy_qnap: - stage: deploy - variables: - UPSTREAM_COMMIT_TAG: $CI_COMMIT_TAG - UPSTREAM_PROJECT_NAME: $CI_PROJECT_NAME - UPSTREAM_COMMIT_TAG_MESSAGE: $CI_COMMIT_TAG_MESSAGE - UPSTREAM_PROJECT_ID: $CI_PROJECT_ID - trigger: - project: sickrage/sickrage-qnap - branch: master - only: - - /^[0-9.]+$/ - except: - - branches - - triggers \ No newline at end of file + - pipelines \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index e8ab3a5cd..4ee750003 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,5 +1,4 @@ module.exports = function (grunt) { - const shell = require('shelljs'); const webpackConfig = require('./webpack.config'); require('load-grunt-tasks')(grunt); @@ -42,70 +41,6 @@ module.exports = function (grunt) { 'babel_extract': {cmd: 'python setup.py extract_messages'}, 'babel_update': {cmd: 'python setup.py update_catalog'}, 'babel_compile': {cmd: 'python setup.py compile_catalog'}, - - // Git Commands - 'git': { - cmd: function (cmd, branch) { - branch = branch ? ' ' + branch : ''; - return 'git ' + cmd + branch; - } - }, - 'git_push': { - cmd: function (remote, branch, tags) { - let pushCmd = 'git push ' + remote + ' ' + branch; - if (tags) { - pushCmd += ' --tags'; - } - return pushCmd; - }, - stderr: false, - callback: function (err, stdout, stderr) { - grunt.log.write(stderr); - } - }, - 'git_commit': { - cmd: function (message) { - return 'git commit -am "' + message + '"'; - }, - stderr: false, - callback: function (err, stdout, stderr) { - grunt.log.write(stderr); - } - }, - 'git_last_tag': { - cmd: 'git for-each-ref refs/tags --sort=-taggerdate --count=1 --format=%(refname:short)', - stdout: false, - callback: function (err, stdout) { - stdout = stdout.trim(); - if (/^\d{1,2}.\d{1,2}.\d+(?:.dev\d+)?$/.test(stdout)) { - grunt.config('last_tag', stdout); - } else { - grunt.fatal('Could not get the last tag name. We got: ' + stdout); - } - } - }, - 'git_list_changes': { - cmd: function () { - return 'git log --oneline --pretty=format:%s ' + grunt.config('last_tag') + '..HEAD'; - }, - stdout: false, - maxBuffer: 500 * 1024, - callback: function (err, stdout) { - const commits = stdout.trim() - .replace(/`/gm, '').replace(/^\([\w\d\s,.\-+_/>]+\)\s/gm, ''); // removes ` and tag information - if (commits) { - grunt.config('commits', commits); - } else { - grunt.fatal('Getting new commit list failed!'); - } - } - }, - 'git_tag': { - cmd: function (version) { - return 'git tag ' + version + ' -m "' + grunt.config('commits') + '"'; - }, - stdout: false - } } }); @@ -154,91 +89,11 @@ module.exports = function (grunt) { } }); - grunt.registerTask('bump_version', function (new_version) { - const vFile = 'sickrage/version.txt'; - grunt.file.write(vFile, new_version) - }); - - grunt.registerTask('pre-release', function () { - grunt.task.run(['exec:git:checkout:develop']); - - const vFile = 'sickrage/version.txt'; - const version = grunt.file.read(vFile); - const versionParts = version.split('.'); - const vArray = { - vMajor: versionParts[0], - vMinor: versionParts[1], - vPatch: versionParts[2], - vPre: versionParts[3] || 0 - }; - - if (vArray.vPre === 0) { - vArray.vPatch = parseFloat(vArray.vPatch) + 1; - } - - if (vArray.vPre !== 0) { - vArray.vPre = vArray.vPre.split('dev')[1]; - vArray.vPre = parseFloat(vArray.vPre) + 1; - } else { - vArray.vPre = parseFloat(vArray.vPre) + 1; - } - - const newVersion = vArray.vMajor + '.' + vArray.vMinor + '.' + vArray.vPatch + '.dev' + vArray.vPre; - - const tasks = [ - 'changelog', - 'webpack:dev', - //'sync_trans', - 'bump_version:' + newVersion, - 'exec:git_commit:Pre-Release v' + newVersion, - 'exec:git_last_tag', 'exec:git_list_changes', 'exec:git_tag:' + newVersion, - 'exec:git_push:origin:develop:tags', - ]; - - grunt.task.run(tasks); - }); - grunt.registerTask('release', function () { - grunt.task.run(['exec:git:checkout:develop']); - - const vFile = 'sickrage/version.txt'; - const version = grunt.file.read(vFile); - const versionParts = version.split('.'); - const vArray = { - vMajor: versionParts[0], - vMinor: versionParts[1], - vPatch: versionParts[2], - vPre: versionParts[3] || 0 - }; - - if (vArray.vPre === 0) { - vArray.vPatch = parseFloat(vArray.vPatch) + 1; - } - - if (vArray.vPre !== 0) { - vArray.vPre = vArray.vPre.split('dev')[1]; - vArray.vPre = parseFloat(vArray.vPre) + 1; - } else { - vArray.vPre = parseFloat(vArray.vPre) + 1; - } - - const newVersion = vArray.vMajor + '.' + vArray.vMinor + '.' + vArray.vPatch; - const tasks = [ - 'exec:git:checkout:-b release-v' + newVersion + ':develop', 'changelog', - 'webpack:prod', - //'sync_trans', - 'bump_version:' + newVersion, - 'exec:git_commit:Release v' + newVersion, - 'exec:git:checkout:master', - 'exec:git:merge:release-v' + newVersion, - 'exec:git_last_tag', 'exec:git_list_changes', 'exec:git_tag:' + newVersion, - 'exec:git_push:origin:master:tags', - 'exec:git:checkout:develop', - 'exec:git:merge:release-v' + newVersion, - 'exec:git_push:origin:develop', - 'exec:git:branch:-d release-v' + newVersion, + 'webpack', + 'sync_trans', ]; grunt.task.run(tasks); diff --git a/README.txt b/README.txt index d5fdb4d1b..f6c250ddf 100644 --- a/README.txt +++ b/README.txt @@ -32,4 +32,6 @@ Before using this with your existing database (sickrage.db or sickbeard.db) plea any other database files such as cache.db and failed.db if present. We HIGHLY recommend starting out with no database files at all to make this a fresh start but the choice is at your own -risk. \ No newline at end of file +risk. + +test \ No newline at end of file diff --git a/package.json b/package.json index b9d9a721e..888ca248b 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,7 @@ }, "homepage": "https://www.sickrage.ca", "scripts": { - "dev": "webpack --mode development", - "prod": "webpack --mode production" + "build": "webpack --config webpack.config.js -p" }, "devDependencies": { "@fortawesome/fontawesome-free": "^5.1.0", diff --git a/requirements-dev.txt b/requirements-dev.txt index 9e4a3be40..7d83160f0 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,5 +3,5 @@ crowdin-cli-py babel wheel tox -wheel -vcrpy-unittest \ No newline at end of file +vcrpy-unittest +Mako \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 93ac254a5..13bfb7771 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,3 +1,12 @@ +[bumpversion] +current_version = 9.4.184.dev4 +parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\.(?P[a-z]+)(?P\d+))? +serialize = + {major}.{minor}.{patch}.{releaselevel}{preversion} + {major}.{minor}.{patch} +commit = True +tag = True + [metadata] description-file = README.txt @@ -24,4 +33,5 @@ input_file = sickrage/locale/messages.pot output_dir = sickrage/locale input_file = sickrage/locale/messages.pot ignore_obsolete = true -previous = true \ No newline at end of file +previous = true + -- GitLab