mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	Add a script that generates a liquibase changelog. Should be internal.
This commit is contained in:
		
							parent
							
								
									3dddf791e6
								
							
						
					
					
						commit
						59d6b99cd7
					
				@ -1,7 +1,7 @@
 | 
			
		||||
# unleash-server
 | 
			
		||||
unleash-server is a place to ask for the status of features.
 | 
			
		||||
 | 
			
		||||
# Important commands:
 | 
			
		||||
## Important commands:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
// Set up DB
 | 
			
		||||
@ -20,3 +20,11 @@ http://localhost:4242/features
 | 
			
		||||
// Execute tests:
 | 
			
		||||
npm test
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Making a schema change
 | 
			
		||||
 | 
			
		||||
1. Create `migrations/sql/NNN-your-migration-name.up.sql` with your change in SQL.
 | 
			
		||||
2. Create `migrations/sql/NNN-your-migration-name.down.sql` with the rollback of your change in SQL.
 | 
			
		||||
3. Run `db-migrate create your-migration-name` and edit the generated file to run the above SQL files.
 | 
			
		||||
4. Run `npm run db-migrate-up`.
 | 
			
		||||
5. Generate LB artifact using `scripts/generate-liquibase-artifact` (TODO: make this internal)
 | 
			
		||||
 | 
			
		||||
@ -45,6 +45,7 @@
 | 
			
		||||
        "jshint": "2.5.2",
 | 
			
		||||
        "mocha": "1.20.1",
 | 
			
		||||
        "supertest": "0.13.0",
 | 
			
		||||
        "supervisor": "~0.6.0"
 | 
			
		||||
        "supervisor": "~0.6.0",
 | 
			
		||||
        "xmlbuilder": "^2.4.4"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										51
									
								
								unleash-server/scripts/generate-liquibase-artifact.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										51
									
								
								unleash-server/scripts/generate-liquibase-artifact.js
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,51 @@
 | 
			
		||||
#!/usr/bin/env node
 | 
			
		||||
 | 
			
		||||
// TODO: move this to somewhere internal
 | 
			
		||||
 | 
			
		||||
var builder = require('xmlbuilder');
 | 
			
		||||
var util    = require('util');
 | 
			
		||||
var path    = require('path');
 | 
			
		||||
var fs      = require('fs');
 | 
			
		||||
var sqlRoot = path.resolve(__dirname, '../migrations/sql');
 | 
			
		||||
var encoding = 'UTF-8';
 | 
			
		||||
 | 
			
		||||
var changeLog = builder.create('databaseChangeLog').dec('1.0', encoding);
 | 
			
		||||
changeLog.att('xmlns', 'http://www.liquibase.org/xml/ns/dbchangelog');
 | 
			
		||||
changeLog.att('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
 | 
			
		||||
changeLog.att('xmlns:ext', 'http://www.liquibase.org/xml/ns/dbchangelog-ext');
 | 
			
		||||
changeLog.att('xsi:schemaLocation',
 | 
			
		||||
         'http://www.liquibase.org/xml/ns/dbchangelog ' +
 | 
			
		||||
         'http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd ' +
 | 
			
		||||
         'http://www.liquibase.org/xml/ns/dbchangelog-ext ' +
 | 
			
		||||
         'http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd');
 | 
			
		||||
 | 
			
		||||
fs.readdir(sqlRoot, function (err, files) {
 | 
			
		||||
    if (err) { throw err; }
 | 
			
		||||
 | 
			
		||||
    var changes = {};
 | 
			
		||||
 | 
			
		||||
    files.forEach(function (sqlFile) {
 | 
			
		||||
        var match = sqlFile.match(/(.+?)\.(up|down)\.sql/);
 | 
			
		||||
 | 
			
		||||
        if (!match) {
 | 
			
		||||
            throw util.format('invalid sql file name, missing up|down: %s', sqlFile);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var name      = match[1];
 | 
			
		||||
        var direction = match[2];
 | 
			
		||||
 | 
			
		||||
        changes[name]            = changes[name] || {};
 | 
			
		||||
        changes[name][direction] = fs.readFileSync(path.resolve(sqlRoot, sqlFile), {encoding: encoding});
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    Object.keys(changes).forEach(function (name) {
 | 
			
		||||
        var change = changes[name];
 | 
			
		||||
 | 
			
		||||
        var el = changeLog.ele('changeSet', {id: name});
 | 
			
		||||
        el.ele('sql', {}, change.up);
 | 
			
		||||
        el.ele('rollback', {}, change.down);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    util.puts(changeLog.end({pretty: true}));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user