[QPE-138] Updating versioning for zip-file and feature branches
This commit is contained in:
@@ -22,16 +22,33 @@ jobs:
|
||||
name: Run tests
|
||||
command: npm run test-once
|
||||
|
||||
bump-version:
|
||||
<<: *defaults
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Bump version
|
||||
command: scripts/bump-version.sh $GITHUB_ORG $GITHUB_REPO
|
||||
- persist_to_workspace:
|
||||
root: ~/qlik-network-chart
|
||||
paths:
|
||||
- BUMPED_VERSION
|
||||
|
||||
build:
|
||||
<<: *defaults
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: ~/qlik-network-chart
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: npm install
|
||||
- run:
|
||||
name: Build and package
|
||||
command: npm run build
|
||||
command: |
|
||||
export VERSION=$(scripts/get-bumped-version.sh)
|
||||
echo "Version: ${VERSION}"
|
||||
npm run build
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
- persist_to_workspace:
|
||||
@@ -39,8 +56,8 @@ jobs:
|
||||
paths:
|
||||
- build
|
||||
- store_artifacts:
|
||||
path: build/qlik-network-chart.zip
|
||||
destination: qlik-network-chart.zip
|
||||
path: build
|
||||
destination: build
|
||||
deploy:
|
||||
<<: *defaults
|
||||
steps:
|
||||
@@ -52,16 +69,22 @@ jobs:
|
||||
command: scripts/install-ghr.sh
|
||||
- run:
|
||||
name: Create GitHub Release
|
||||
command: scripts/create-release.sh $GITHUB_ORG $GITHUB_REPO $PACKAGE_NAME
|
||||
command: |
|
||||
export VERSION=$(scripts/get-bumped-version.sh)
|
||||
echo "Version: ${VERSION}"
|
||||
scripts/create-release.sh $GITHUB_ORG $GITHUB_REPO $PACKAGE_NAME $VERSION
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
master_flow:
|
||||
jobs:
|
||||
- test
|
||||
- build:
|
||||
- bump-version:
|
||||
requires:
|
||||
- test
|
||||
- build:
|
||||
requires:
|
||||
- bump-version
|
||||
- deploy:
|
||||
requires:
|
||||
- build
|
||||
@@ -69,3 +92,4 @@ workflows:
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- project-configuration
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
node_modules/
|
||||
build/
|
||||
BUMPED_VERSION
|
||||
|
||||
13
gulpfile.js
13
gulpfile.js
@@ -5,6 +5,7 @@ var settings = require('./settings');
|
||||
var webpackConfig = require('./webpack.config');
|
||||
var webpack = require('webpack');
|
||||
var WebpackDevServer = require('webpack-dev-server');
|
||||
var jeditor = require("gulp-json-editor");
|
||||
|
||||
gulp.task('remove-build-folder', function(){
|
||||
return del([settings.buildDestination], { force: true });
|
||||
@@ -12,7 +13,7 @@ gulp.task('remove-build-folder', function(){
|
||||
|
||||
gulp.task('zip-build', function(){
|
||||
return gulp.src(settings.buildDestination + '/**/*')
|
||||
.pipe(zip(settings.name + '.zip'))
|
||||
.pipe(zip(settings.name + '_' + settings.version + '.zip'))
|
||||
.pipe(gulp.dest(settings.buildDestination));
|
||||
});
|
||||
|
||||
@@ -32,8 +33,16 @@ gulp.task('webpack-build', done => {
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task('update-qext-version', function () {
|
||||
return gulp.src("./build/" + settings.name + ".qext")
|
||||
.pipe(jeditor({
|
||||
'version': settings.version
|
||||
}))
|
||||
.pipe(gulp.dest("./build"));
|
||||
})
|
||||
|
||||
gulp.task('build',
|
||||
gulp.series('remove-build-folder', 'webpack-build', 'zip-build')
|
||||
gulp.series('remove-build-folder', 'webpack-build', 'update-qext-version', 'zip-build')
|
||||
);
|
||||
|
||||
gulp.task('watch', () => new Promise((resolve, reject) => {
|
||||
|
||||
158
package-lock.json
generated
158
package-lock.json
generated
@@ -739,6 +739,18 @@
|
||||
"integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "10.12.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.3.tgz",
|
||||
"integrity": "sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/semver": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
|
||||
"integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@webassemblyjs/ast": {
|
||||
"version": "1.7.11",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
|
||||
@@ -923,6 +935,12 @@
|
||||
"integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
|
||||
"dev": true
|
||||
},
|
||||
"abbrev": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
||||
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
|
||||
"dev": true
|
||||
},
|
||||
"accepts": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
|
||||
@@ -2393,6 +2411,16 @@
|
||||
"typedarray": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"config-chain": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
|
||||
"integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ini": "^1.3.4",
|
||||
"proto-list": "~1.2.1"
|
||||
}
|
||||
},
|
||||
"connect": {
|
||||
"version": "3.6.6",
|
||||
"resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
|
||||
@@ -2809,6 +2837,12 @@
|
||||
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
|
||||
"dev": true
|
||||
},
|
||||
"deepmerge": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
|
||||
"integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
|
||||
"dev": true
|
||||
},
|
||||
"default-compare": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
|
||||
@@ -2963,6 +2997,12 @@
|
||||
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
|
||||
"dev": true
|
||||
},
|
||||
"detect-indent": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
|
||||
"integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
|
||||
"dev": true
|
||||
},
|
||||
"detect-node": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
|
||||
@@ -3133,6 +3173,28 @@
|
||||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"editorconfig": {
|
||||
"version": "0.15.2",
|
||||
"resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz",
|
||||
"integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "^10.11.7",
|
||||
"@types/semver": "^5.5.0",
|
||||
"commander": "^2.19.0",
|
||||
"lru-cache": "^4.1.3",
|
||||
"semver": "^5.6.0",
|
||||
"sigmund": "^1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": {
|
||||
"version": "2.19.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
|
||||
"integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
@@ -5316,6 +5378,52 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"gulp-json-editor": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/gulp-json-editor/-/gulp-json-editor-2.4.3.tgz",
|
||||
"integrity": "sha512-cSYh93dbSxIEXiuC0eHUBkrAJA0jS7pWGZ/x0uUt0Hu1xxUt5QuT7C2+wJE0q2YWtlOTz/lxD+HFHP15/Th7lg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"deepmerge": "^2.2.1",
|
||||
"detect-indent": "^5.0.0",
|
||||
"js-beautify": "^1.8.8",
|
||||
"plugin-error": "^1.0.1",
|
||||
"through2": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-colors": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "http://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
|
||||
"integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-wrap": "^0.1.0"
|
||||
}
|
||||
},
|
||||
"plugin-error": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
|
||||
"integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-colors": "^1.0.1",
|
||||
"arr-diff": "^4.0.0",
|
||||
"arr-union": "^3.1.0",
|
||||
"extend-shallow": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"through2": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/through2/-/through2-3.0.0.tgz",
|
||||
"integrity": "sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"readable-stream": "2 || 3",
|
||||
"xtend": "~4.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"gulp-zip": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-4.2.0.tgz",
|
||||
@@ -6320,6 +6428,18 @@
|
||||
"integrity": "sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA==",
|
||||
"dev": true
|
||||
},
|
||||
"js-beautify": {
|
||||
"version": "1.8.8",
|
||||
"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.8.tgz",
|
||||
"integrity": "sha512-qVNq7ZZ7ZbLdzorvSlRDadS0Rh5oyItaE95v6I4wbbuSiijxn7SnnsV6dvKlcXuO2jX7lK8tn9fBulx34K/Ejg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"config-chain": "~1.1.5",
|
||||
"editorconfig": "^0.15.0",
|
||||
"mkdirp": "~0.5.0",
|
||||
"nopt": "~4.0.1"
|
||||
}
|
||||
},
|
||||
"js-levenshtein": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz",
|
||||
@@ -7353,6 +7473,16 @@
|
||||
"semver": "^5.3.0"
|
||||
}
|
||||
},
|
||||
"nopt": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
|
||||
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"abbrev": "1",
|
||||
"osenv": "^0.1.4"
|
||||
}
|
||||
},
|
||||
"normalize-package-data": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
|
||||
@@ -7681,6 +7811,12 @@
|
||||
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
|
||||
"dev": true
|
||||
},
|
||||
"os-homedir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
|
||||
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
|
||||
"dev": true
|
||||
},
|
||||
"os-locale": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz",
|
||||
@@ -7698,6 +7834,16 @@
|
||||
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
|
||||
"dev": true
|
||||
},
|
||||
"osenv": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
|
||||
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"os-homedir": "^1.0.0",
|
||||
"os-tmpdir": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"p-defer": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
|
||||
@@ -8420,6 +8566,12 @@
|
||||
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
|
||||
"dev": true
|
||||
},
|
||||
"proto-list": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
|
||||
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
|
||||
"dev": true
|
||||
},
|
||||
"proxy-addr": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
|
||||
@@ -9273,6 +9425,12 @@
|
||||
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
|
||||
"dev": true
|
||||
},
|
||||
"sigmund": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
|
||||
"integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
|
||||
"dev": true
|
||||
},
|
||||
"signal-exit": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"eslint-loader": "2.1.1",
|
||||
"file-loader": "2.0.0",
|
||||
"gulp": "4.0.0",
|
||||
"gulp-json-editor": "2.4.3",
|
||||
"gulp-zip": "4.2.0",
|
||||
"jasmine-core": "3.3.0",
|
||||
"karma": "3.1.1",
|
||||
|
||||
27
scripts/bump-version.sh
Normal file → Executable file
27
scripts/bump-version.sh
Normal file → Executable file
@@ -5,18 +5,27 @@ join_by () {
|
||||
local IFS="$1"; shift; echo "$*";
|
||||
}
|
||||
|
||||
# get version from repo
|
||||
OLD_VERSION="$(scripts/get-latest-version.sh $1 $2)"
|
||||
if [ "${CIRCLE_BRANCH}" == "master" ]; then
|
||||
# get version from repo
|
||||
OLD_VERSION="$(scripts/get-latest-version.sh $1 $2)"
|
||||
echo "Latest GitHub release version: ${OLD_VERSION}"
|
||||
|
||||
# split into array
|
||||
IFS='.' read -ra ARRAY_VERSION <<< "$OLD_VERSION"
|
||||
# split into array
|
||||
IFS='.' read -ra ARRAY_VERSION <<< "$OLD_VERSION"
|
||||
|
||||
# bump minor
|
||||
ARRAY_VERSION[1]=$((ARRAY_VERSION[1]+1))
|
||||
# bump minor
|
||||
ARRAY_VERSION[1]=$((ARRAY_VERSION[1]+1))
|
||||
|
||||
# join into string
|
||||
NEW_VERSION=$(join_by . ${ARRAY_VERSION[@]})
|
||||
echo "$NEW_VERSION"
|
||||
# join into string
|
||||
NEW_VERSION=$(join_by . ${ARRAY_VERSION[@]})
|
||||
elif [[ ! -z "${CIRCLE_BRANCH}" && ! -z "${CIRCLE_BUILD_NUM}" ]]; then
|
||||
NEW_VERSION="$(echo ${CIRCLE_BRANCH} | sed -e 's/\//-/g')_${CIRCLE_BUILD_NUM}"
|
||||
else
|
||||
NEW_VERSION="dev"
|
||||
fi
|
||||
|
||||
echo "Bumped version: ${NEW_VERSION}"
|
||||
echo "${NEW_VERSION}" > BUMPED_VERSION
|
||||
|
||||
|
||||
# Usage
|
||||
|
||||
9
scripts/create-release.sh
Normal file → Executable file
9
scripts/create-release.sh
Normal file → Executable file
@@ -1,11 +1,10 @@
|
||||
#!/bin/bash
|
||||
set -o errexit
|
||||
|
||||
echo "Bumping version from: $(scripts/print-version.sh $1 $2)"
|
||||
VERSION="$(scripts/bump-version.sh $1 $2)"
|
||||
echo "to: $VERSION"
|
||||
$HOME/bin/ghr -t ${ghoauth} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${VERSION} "./build/$3.zip"
|
||||
echo "Creating release for version: $VERSION"
|
||||
echo "Artifact name: ./build/${3}_${VERSION}.zip"
|
||||
$HOME/bin/ghr -t ${ghoauth} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${VERSION} "./build/${3}_${4}.zip"
|
||||
|
||||
|
||||
# Usage
|
||||
# $ create-release.sh qlik-oss qsSimpleKPI qlik-multi-kpi
|
||||
# $ create-release.sh qlik-oss qsSimpleKPI qlik-multi-kpi 0.3.1
|
||||
|
||||
7
scripts/get-bumped-version.sh
Executable file
7
scripts/get-bumped-version.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -o errexit
|
||||
|
||||
echo "$(head -n 1 BUMPED_VERSION)"
|
||||
|
||||
# Usage
|
||||
# $ get-bumped-version.sh
|
||||
0
scripts/get-latest-version.sh
Normal file → Executable file
0
scripts/get-latest-version.sh
Normal file → Executable file
0
scripts/install-ghr.sh
Normal file → Executable file
0
scripts/install-ghr.sh
Normal file → Executable file
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -o errexit
|
||||
|
||||
VERSION="$(scripts/get-latest-version.sh $1 $2)"
|
||||
|
||||
echo ${VERSION}
|
||||
|
||||
# Usage
|
||||
# $ print-version.sh qlik-oss qsSimpleKPI
|
||||
# 0.12.0
|
||||
@@ -7,6 +7,7 @@ module.exports = {
|
||||
buildDestination: process.env.BUILD_PATH || defaultBuildDestination,
|
||||
mode: process.env.NODE_ENV || 'development',
|
||||
name: packageJSON.name,
|
||||
version: process.env.VERSION || 'local-dev',
|
||||
url: process.env.BUILD_URL || defaultBuildDestination,
|
||||
port: 8082
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user