Compare commits
	
		
			35 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 698674b46d | |||
| eb1a668738 | |||
| 95c90f2877 | |||
| 5a3c7574aa | |||
| 11f8781a0d | |||
| 191cd90c2d | |||
| b9bdd6bc9f | |||
| 3e4e5bba1c | |||
| 09530c439f | |||
| 702b2dae29 | |||
| f38ff47fe2 | |||
| da8c39c91b | |||
| d3a568cfe4 | |||
| 3fac2ba503 | |||
| b43bbe3459 | |||
| 58753bbd01 | |||
| 87995d515f | |||
| 0366226d79 | |||
| 636e32c64f | |||
| db8f88047b | |||
| 64ed038b30 | |||
| d097ba4ad7 | |||
| 530c215088 | |||
| 93f4592d16 | |||
| 0027bd9152 | |||
| 3a92db14de | |||
| d76d0ad1fb | |||
| b07be17744 | |||
| a9b1052d9c | |||
| bff56aa9d5 | |||
| 3ac16d0b16 | |||
| 64eafe7c20 | |||
| 813cda4183 | |||
| 20c3780f8e | |||
| 043759f707 | 
							
								
								
									
										14
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | kind: pipeline | ||||||
|  | name: default | ||||||
|  |  | ||||||
|  | steps: | ||||||
|  |   - name: setup | ||||||
|  |     image: registry:5000/node-build | ||||||
|  |     commands: | ||||||
|  |       - yarn | ||||||
|  |       - curl https://git.scode.ovh/Timo/standard/raw/branch/master/ci.js > ci.js | ||||||
|  |  | ||||||
|  |   - name: build | ||||||
|  |     image: registry:5000/node-build | ||||||
|  |     commands: | ||||||
|  |       - node ci.js | ||||||
							
								
								
									
										12
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,5 +1,15 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## 1.5.0 | ||||||
|  |  | ||||||
|  | Node template: use jasmine instead of ava | ||||||
|  |  | ||||||
|  | ## 1.4.0 | ||||||
|  |  | ||||||
|  | Drone template | ||||||
|  |  | ||||||
|  | Jenkins template: remove node specific template (replaced by drone) | ||||||
|  |  | ||||||
| ## 1.3.0 | ## 1.3.0 | ||||||
|  |  | ||||||
| Copyright function: carry previous creation date to prevent unnecessary modifications | Copyright function: carry previous creation date to prevent unnecessary modifications | ||||||
| @@ -7,7 +17,7 @@ Copyright function: carry previous creation date to prevent unnecessary modifica | |||||||
| ## 1.2.0 | ## 1.2.0 | ||||||
|  |  | ||||||
| - Fully interactive snippets | - Fully interactive snippets | ||||||
| - db migration generator removed (new snipped in development) | - db migration generator removed | ||||||
|  |  | ||||||
| ## 1.1.0 | ## 1.1.0 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										23
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							| @@ -1,23 +0,0 @@ | |||||||
| pipeline { |  | ||||||
|     agent any |  | ||||||
|  |  | ||||||
|     environment { |  | ||||||
|         VERSION = VersionNumber([ |  | ||||||
|             versionNumberString: |  | ||||||
|                 '${BUILDS_ALL_TIME}', |  | ||||||
|             versionPrefix: '1.3.', |  | ||||||
|             worstResultForIncrement: 'SUCCESS' |  | ||||||
|         ]) |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     stages { |  | ||||||
|         stage('Building') { |  | ||||||
|             steps { |  | ||||||
|                 script { |  | ||||||
|                     currentBuild.displayName = env.VERSION |  | ||||||
|                 } |  | ||||||
|                 sh 'yarn ci ${VERSION}' |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| # @sapphirecode/snippeteer | # @sapphirecode/snippeteer | ||||||
|  |  | ||||||
| version: 1.3.x | version: 1.5.x | ||||||
|  |  | ||||||
| macros for setting up projects or project parts | macros for setting up projects or project parts | ||||||
|  |  | ||||||
| @@ -31,8 +31,9 @@ license file and adding fields like author and license to the package.json | |||||||
|  |  | ||||||
| create a generic jenkinsfile | create a generic jenkinsfile | ||||||
|  |  | ||||||
| for node projects: automatically generates a jenkinsfile and jenkins.js for easy | #### drone | ||||||
| use in jenkins. |  | ||||||
|  | create a generic .drone.yml for deployment of node projects | ||||||
|  |  | ||||||
| necessary scripts in the package.json: | necessary scripts in the package.json: | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								jenkins.js
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								jenkins.js
									
									
									
									
									
								
							| @@ -1,29 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (C) SapphireCode - All Rights Reserved |  | ||||||
|  * This file is part of Snippeteer which is released under BSD-3-Clause. |  | ||||||
|  * See file 'LICENSE' for full license details. |  | ||||||
|  * Created by Timo Hocker <timo@scode.ovh>, June 2020 |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| 'use strict'; |  | ||||||
|  |  | ||||||
| const https = require ('https'); |  | ||||||
| const fs = require ('fs'); |  | ||||||
| const { execSync: exec_sync } = require ('child_process'); |  | ||||||
|  |  | ||||||
| const run_file = fs.createWriteStream ('.jenkins.run.js'); |  | ||||||
|  |  | ||||||
| const [ |  | ||||||
|   ,, ...args |  | ||||||
| ] = process.argv; |  | ||||||
|  |  | ||||||
| run_file.on ('close', () => { |  | ||||||
|   exec_sync (`node .jenkins.run.js ${args.join (' ')}`, { stdio: 'inherit' }); |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| https.get ( |  | ||||||
|   'https://git.scode.ovh/Timo/standard/raw/branch/master/jenkins.run.js', |  | ||||||
|   (msg) => { |  | ||||||
|     msg.pipe (run_file); |  | ||||||
|   } |  | ||||||
| ); |  | ||||||
| @@ -13,7 +13,7 @@ export class FileMapper { | |||||||
|   public static async map_all_files ( |   public static async map_all_files ( | ||||||
|     folder: string, |     folder: string, | ||||||
|     mutator: (data: string, file: string, args: Array<unknown>) => string|null, |     mutator: (data: string, file: string, args: Array<unknown>) => string|null, | ||||||
|     args: Array<unknown> = [] |     opts: Array<unknown> = [] | ||||||
|   ): Promise<void> { |   ): Promise<void> { | ||||||
|     const files = await fs.readdir (folder); |     const files = await fs.readdir (folder); | ||||||
|     for (const file of files) { |     for (const file of files) { | ||||||
| @@ -21,11 +21,11 @@ export class FileMapper { | |||||||
|         continue; |         continue; | ||||||
|       const abs_path = path.join (folder, file); |       const abs_path = path.join (folder, file); | ||||||
|       if ((await fs.stat (abs_path)).isDirectory ()) { |       if ((await fs.stat (abs_path)).isDirectory ()) { | ||||||
|         await FileMapper.map_all_files (abs_path, mutator, args); |         await FileMapper.map_all_files (abs_path, mutator, opts); | ||||||
|         continue; |         continue; | ||||||
|       } |       } | ||||||
|       const data = await fs.readFile (abs_path, 'utf-8'); |       const data = await fs.readFile (abs_path, 'utf-8'); | ||||||
|       const res = mutator (data, file, args); |       const res = mutator (data, file, opts); | ||||||
|       if (res === null) |       if (res === null) | ||||||
|         continue; |         continue; | ||||||
|       await fs.writeFile (abs_path, res, 'utf-8'); |       await fs.writeFile (abs_path, res, 'utf-8'); | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ export default class Copyright implements Snippet { | |||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     await modify_json ((json) => { |     await modify_json ((json) => { | ||||||
|       json.author = `${options.author} <${options.email}>`; |       json.author = { name: options.author, email: options.email }; | ||||||
|       json.license = options.has_license ? options.license : 'UNLICENSED'; |       json.license = options.has_license ? options.license : 'UNLICENSED'; | ||||||
|       return json; |       return json; | ||||||
|     }); |     }); | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								lib/snippets/drone/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								lib/snippets/drone/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (C) SapphireCode - All Rights Reserved | ||||||
|  |  * This file is part of Snippeteer which is released under BSD-3-Clause. | ||||||
|  |  * See file 'LICENSE' for full license details. | ||||||
|  |  * Created by Timo Hocker <timo@scode.ovh>, July 2020 | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import { files } from '@sapphirecode/standard'; | ||||||
|  | import { Snippet } from '../../Snippet'; | ||||||
|  | import { apply_template } from '../../Helper'; | ||||||
|  |  | ||||||
|  | export default class Drone implements Snippet { | ||||||
|  |   public is_active (): boolean { | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public async start (): Promise<void> { | ||||||
|  |     await apply_template (files.drone, '.drone.yml'); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -7,10 +7,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable max-len */ | /* eslint-disable max-len */ | ||||||
|  |  | ||||||
| import { files } from '@sapphirecode/standard'; |  | ||||||
|  |  | ||||||
| const general = { jenkinsfile: '' }; | const general = { jenkinsfile: '' }; | ||||||
| const node = { jenkinsfile: files.jenkinsfile, js: files.jenkins }; |  | ||||||
|  |  | ||||||
| general.jenkinsfile = `pipeline { | general.jenkinsfile = `pipeline { | ||||||
|   agent any |   agent any | ||||||
| @@ -53,4 +50,4 @@ general.jenkinsfile = `pipeline { | |||||||
| } | } | ||||||
| `; | `; | ||||||
|  |  | ||||||
| export { general, node }; | export { general }; | ||||||
|   | |||||||
| @@ -5,11 +5,10 @@ | |||||||
|  * Created by Timo Hocker <timo@scode.ovh>, May 2020 |  * Created by Timo Hocker <timo@scode.ovh>, May 2020 | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { Confirm } from 'enquirer'; |  | ||||||
| import { Snippet } from '../../Snippet'; | import { Snippet } from '../../Snippet'; | ||||||
| import { apply_template, modify_json } from '../../Helper'; | import { apply_template } from '../../Helper'; | ||||||
|  |  | ||||||
| import { general, node } from './Assets'; | import { general } from './Assets'; | ||||||
|  |  | ||||||
| export default class Jenkins implements Snippet { | export default class Jenkins implements Snippet { | ||||||
|   public is_active (): boolean { |   public is_active (): boolean { | ||||||
| @@ -17,23 +16,6 @@ export default class Jenkins implements Snippet { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   public async start (): Promise<void> { |   public async start (): Promise<void> { | ||||||
|     const is_node = await new Confirm ({ |     await apply_template (general.jenkinsfile, 'Jenkinsfile'); | ||||||
|       message: 'is the current project using nodejs?', |  | ||||||
|       initial: true |  | ||||||
|     }) |  | ||||||
|       .run (); |  | ||||||
|  |  | ||||||
|     if (is_node) { |  | ||||||
|       await apply_template (node.js, 'jenkins.js'); |  | ||||||
|       await apply_template (node.jenkinsfile, 'Jenkinsfile'); |  | ||||||
|       // eslint-disable-next-line @typescript-eslint/no-explicit-any |  | ||||||
|       await modify_json ((obj: any): any => { |  | ||||||
|         obj.scripts.ci = 'yarn && node jenkins.js'; |  | ||||||
|         return obj; |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|       await apply_template (general.jenkinsfile, 'Jenkinsfile'); |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,7 +7,11 @@ | |||||||
|  |  | ||||||
| import path from 'path'; | import path from 'path'; | ||||||
| import { Input, Confirm } from 'enquirer'; | import { Input, Confirm } from 'enquirer'; | ||||||
| import { scripts as standard_scripts } from '@sapphirecode/standard'; | import { | ||||||
|  |   scripts as standard_scripts, | ||||||
|  |   files as standard_files | ||||||
|  | } from '@sapphirecode/standard'; | ||||||
|  | import fs from 'fs-extra'; | ||||||
| import { Snippet } from '../../Snippet'; | import { Snippet } from '../../Snippet'; | ||||||
| import { apply_template, modify_json, run_command } from '../../Helper'; | import { apply_template, modify_json, run_command } from '../../Helper'; | ||||||
|  |  | ||||||
| @@ -16,6 +20,22 @@ import { | |||||||
|   tsconfig, eslintrc_ts, eslintignore |   tsconfig, eslintrc_ts, eslintignore | ||||||
| } from './Assets'; | } from './Assets'; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const packages = { | ||||||
|  |   common: [ 'eslint' ], | ||||||
|  |   js:     [ '@sapphirecode/eslint-config' ], | ||||||
|  |   ts:      [ | ||||||
|  |     'typescript', | ||||||
|  |     '@sapphirecode/eslint-config-ts' | ||||||
|  |   ], | ||||||
|  |   test:    [ | ||||||
|  |     'nyc', | ||||||
|  |     'jasmine', | ||||||
|  |     '@types/jasmine' | ||||||
|  |   ], | ||||||
|  |   test_ts: [ 'ts-node' ] | ||||||
|  | }; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * initialize the package.json |  * initialize the package.json | ||||||
|  * |  * | ||||||
| @@ -28,8 +48,22 @@ async function init_package ( | |||||||
|   use_ts: boolean, |   use_ts: boolean, | ||||||
|   use_tests: boolean |   use_tests: boolean | ||||||
| ): Promise<void> { | ): Promise<void> { | ||||||
|  |   run_command ('yarn init -y', folder); | ||||||
|  |  | ||||||
|  |   const bundle = [ | ||||||
|  |     ...packages.common, | ||||||
|  |     ...(use_ts ? packages.ts : packages.js), | ||||||
|  |     ...(use_tests ? packages.test : []), | ||||||
|  |     ...(use_ts && use_tests ? packages.test_ts : []) | ||||||
|  |   ]; | ||||||
|  |  | ||||||
|  |   run_command ( | ||||||
|  |     `yarn add --dev ${bundle.join (' ')}`, | ||||||
|  |     folder | ||||||
|  |   ); | ||||||
|  |  | ||||||
|   await modify_json ((obj: Record<string, unknown>) => { |   await modify_json ((obj: Record<string, unknown>) => { | ||||||
|     const scripts |     const scripts: Record<string, string> | ||||||
|      = { |      = { | ||||||
|        lint:    standard_scripts.lint, |        lint:    standard_scripts.lint, | ||||||
|        test:    standard_scripts.test.common, |        test:    standard_scripts.test.common, | ||||||
| @@ -39,7 +73,9 @@ async function init_package ( | |||||||
|  |  | ||||||
|     if (use_ts) { |     if (use_ts) { | ||||||
|       scripts.compile = standard_scripts.compile.ts; |       scripts.compile = standard_scripts.compile.ts; | ||||||
|  |       scripts.pretest = standard_scripts.test.ts_pre; | ||||||
|       scripts.test = standard_scripts.test.ts; |       scripts.test = standard_scripts.test.ts; | ||||||
|  |       scripts.posttest = standard_scripts.test.ts_post; | ||||||
|       files.push ('/dist/'); |       files.push ('/dist/'); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
| @@ -92,13 +128,14 @@ export default class Node implements Snippet { | |||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
|     run_command ('git init', folder); |     run_command ('git init', folder); | ||||||
|     run_command ('yarn init -y', folder); |  | ||||||
|     run_command ( |     if (use_tests) { | ||||||
|       `yarn add --dev @sapphirecode/eslint-config${use_ts |       await apply_template ( | ||||||
|         ? '-ts typescript @ava/typescript' |         standard_files.jasmine, | ||||||
|         : ''} eslint nyc ava`, |         path.join (folder, 'jasmine.json') | ||||||
|       folder |       ); | ||||||
|     ); |       await fs.mkdirp (path.join (folder, 'test/spec')); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     await init_package (folder, use_ts, use_tests); |     await init_package (folder, use_ts, use_tests); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -31,7 +31,10 @@ export default class Readme implements Snippet { | |||||||
|       package_data.software = json.name; |       package_data.software = json.name; | ||||||
|       package_data.description = json.description; |       package_data.description = json.description; | ||||||
|       package_data.license = json.license; |       package_data.license = json.license; | ||||||
|       package_data.author = json.author; |       if (typeof json.author === 'object') | ||||||
|  |         package_data.author = `${json.author.name} <${json.author.email}>`; | ||||||
|  |       else | ||||||
|  |         package_data.author = json.author; | ||||||
|     }); |     }); | ||||||
|     const readme = get_readme ( |     const readme = get_readme ( | ||||||
|       package_data.software, |       package_data.software, | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,44 +1,49 @@ | |||||||
| { | { | ||||||
|   "name": "@sapphirecode/snippeteer", |   "name": "@sapphirecode/snippeteer", | ||||||
|   "version": "1.0.0", |   "version": "1.5.6", | ||||||
|   "description": "macros for setting up projects or project parts", |   "description": "macros for setting up projects or project parts", | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "bin": { |   "bin": { | ||||||
|     "snippeteer": "./index.js" |     "snippeteer": "./index.js" | ||||||
|   }, |   }, | ||||||
|  |   "bugs": "https://redmine.scode.ovh/projects/snippeteer", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "lint": "eslint . --ext .js,.jsx,.ts,.tsx,.vue,.mjs", |     "lint": "eslint . --ext .js,.jsx,.ts,.tsx,.vue,.mjs", | ||||||
|     "ci": "yarn --frozen-lockfile && node jenkins.js", |  | ||||||
|     "test": "echo \"no test\"", |     "test": "echo \"no test\"", | ||||||
|     "compile": "tsc" |     "compile": "tsc" | ||||||
|   }, |   }, | ||||||
|   "repository": { |   "repository": { | ||||||
|     "type": "git", |     "type": "git", | ||||||
|     "url": "git@git.scode.ovh:timo/snippeteer" |     "url": "https://git.scode.ovh:timo/snippeteer.git" | ||||||
|   }, |   }, | ||||||
|   "files": [ |   "files": [ | ||||||
|     "/dist/", |     "/dist/", | ||||||
|     "/lib/", |     "/lib/", | ||||||
|     "LICENSE" |     "LICENSE" | ||||||
|   ], |   ], | ||||||
|   "author": "Timo Hocker <timo@scode.ovh>", |   "author": { | ||||||
|  |     "name": "Timo Hocker", | ||||||
|  |     "email": "timo@scode.ovh" | ||||||
|  |   }, | ||||||
|   "license": "BSD-3-Clause", |   "license": "BSD-3-Clause", | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@sapphirecode/eslint-config-ts": "^1.0.22", |     "@sapphirecode/eslint-config-ts": "^1.0.22", | ||||||
|     "@types/fs-extra": "^9.0.0", |     "@types/fs-extra": "^9.0.0", | ||||||
|     "@types/node": "^14.0.1", |     "@types/node": "^17.0.2", | ||||||
|     "eslint": "^7.0.0", |     "eslint": "^8.5.0", | ||||||
|     "typescript": "^3.8.3" |     "typescript": "^4.0.2" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@sapphirecode/console-app": "^2.0.6", |     "@sapphirecode/standard": "^1.5.5", | ||||||
|     "@sapphirecode/modelling": "^1.1.6", |  | ||||||
|     "@sapphirecode/standard": "^1.0.1", |  | ||||||
|     "enquirer": "^2.3.5", |     "enquirer": "^2.3.5", | ||||||
|     "fs-extra": "^9.0.0", |     "fs-extra": "^10.0.0", | ||||||
|     "license": "^1.0.3" |     "license": "^1.0.3" | ||||||
|   }, |   }, | ||||||
|   "engines": { |   "engines": { | ||||||
|     "node": ">=10.0.0" |     "node": ">=10.0.0" | ||||||
|   } |   }, | ||||||
| } |   "keywords": [ | ||||||
|  |     "snippet", | ||||||
|  |     "template" | ||||||
|  |   ] | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user