@@ -1,70 +0,0 @@ | |||
{ | |||
"slug": "Befaco", | |||
"name": "Befaco", | |||
"author": "Befaco", | |||
"license": "BSD-3-Clause", | |||
"authorEmail": "contact@vcvrack.com", | |||
"pluginUrl": "https://vcvrack.com/Befaco.html", | |||
"authorUrl": "https://vcvrack.com/", | |||
"sourceUrl": "https://github.com/VCVRack/Befaco", | |||
"version": "1.0.0", | |||
"modules": [ | |||
{ | |||
"slug": "EvenVCO", | |||
"name": "EvenVCO", | |||
"tags": [ | |||
"VCO" | |||
] | |||
}, | |||
{ | |||
"slug": "Rampage", | |||
"name": "Rampage", | |||
"tags": [ | |||
"Function Generator", | |||
"Logic", | |||
"Slew Limiter", | |||
"Envelope Follower", | |||
"Dual" | |||
] | |||
}, | |||
{ | |||
"slug": "ABC", | |||
"name": "A*B+C", | |||
"tags": [ | |||
"Ring Modulator", | |||
"Attenuator", | |||
"Dual" | |||
] | |||
}, | |||
{ | |||
"slug": "SpringReverb", | |||
"name": "Spring Reverb", | |||
"tags": [ | |||
"Reverb" | |||
] | |||
}, | |||
{ | |||
"slug": "Mixer", | |||
"name": "Mixer", | |||
"tags": [ | |||
"Mixer" | |||
] | |||
}, | |||
{ | |||
"slug": "SlewLimiter", | |||
"name": "Slew Limiter", | |||
"tags": [ | |||
"Slew Limiter", | |||
"Envelope Follower" | |||
] | |||
}, | |||
{ | |||
"slug": "DualAtenuverter", | |||
"name": "Dual Atenuverter", | |||
"tags": [ | |||
"Attenuator", | |||
"Dual" | |||
] | |||
} | |||
] | |||
} |
@@ -0,0 +1,123 @@ | |||
{ | |||
"slug": "CharredDesert", | |||
"name": "CharredDesert", | |||
"version": "1.0.0", | |||
"license": "CC0-1.0", | |||
"author": "Jerry Sievert", | |||
"authorEmail": "rack@legitimatesounding.com", | |||
"authorUrl": "https://legitimatesounding.com/", | |||
"pluginUrl": "https://github.com/JerrySievert/CharredDesert", | |||
"manualUrl": "https://github.com/JerrySievert/CharredDesert/blob/master/docs/README.md", | |||
"sourceUrl": "https://github.com/JerrySievert/CharredDesert", | |||
"donateUrl": "https://paypal.me/JerrySievert", | |||
"modules": [ | |||
{ | |||
"slug": "DTMF", | |||
"name": "DTMF", | |||
"description": "DTMF Tone Generator", | |||
"tags": [ | |||
"Envelope generator" | |||
] | |||
}, | |||
{ | |||
"slug": "Noise", | |||
"name": "Noise", | |||
"description": "White and Pink Noise Generator", | |||
"tags": [ | |||
"Envelope generator", | |||
"Noise" | |||
] | |||
}, | |||
{ | |||
"slug": "CVSequencer", | |||
"name": "CV Sequencer", | |||
"description": "CV Sequencer", | |||
"tags": [ | |||
"Logic", | |||
"Sequencer" | |||
] | |||
}, | |||
{ | |||
"slug": "Not", | |||
"name": "Not", | |||
"description": "CV and Voltage Inverter", | |||
"tags": [ | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "Pan", | |||
"name": "Pan", | |||
"description": "Stereo Panner", | |||
"tags": [ | |||
"Panning" | |||
] | |||
}, | |||
{ | |||
"slug": "Shift", | |||
"name": "Shift", | |||
"description": "CV and Waveform Shifter/Attenuator", | |||
"tags": [ | |||
"Logic", | |||
"Attenuator" | |||
] | |||
}, | |||
{ | |||
"slug": "Oscar2", | |||
"name": "Oscar^2", | |||
"description": "Oscillator Madness", | |||
"tags": [ | |||
"VCO", | |||
"Waveshaper" | |||
] | |||
}, | |||
{ | |||
"slug": "Eq", | |||
"name": "Eq", | |||
"description": "CV Controlled Equalizer", | |||
"tags": [ | |||
"Equalizer" | |||
] | |||
}, | |||
{ | |||
"slug": "Carbon", | |||
"name": "Carbon", | |||
"description": "Moog-like Filter", | |||
"tags": [ | |||
"VCF" | |||
] | |||
}, | |||
{ | |||
"slug": "Mixer", | |||
"name": "Mixer", | |||
"description": "8 Channel Stereo Mixer", | |||
"tags": [ | |||
"Mixer" | |||
] | |||
}, | |||
{ | |||
"slug": "MixerCV", | |||
"name": "Mixer CV", | |||
"description": "CV Controlled 8 Channel Mixer", | |||
"tags": [ | |||
"Mixer" | |||
] | |||
}, | |||
{ | |||
"slug": "CV", | |||
"name": "CV", | |||
"description": "Simple CV Manipulator", | |||
"tags": [ | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "M", | |||
"name": "M", | |||
"description": "Mini 2 Channel Mixer", | |||
"tags": [ | |||
"Mixer" | |||
] | |||
} | |||
] | |||
} |
@@ -0,0 +1,87 @@ | |||
{ | |||
"slug": "DrumKit", | |||
"name": "DrumKit", | |||
"version": "1.0.0", | |||
"license": "CC0-1.0", | |||
"author": "Jerry Sievert", | |||
"authorEmail": "rack@legitimatesounding.com", | |||
"authorUrl": "https://legitimatesounding.com/", | |||
"pluginUrl": "https://github.com/JerrySievert/DrumKit", | |||
"manualUrl": "https://github.com/JerrySievert/DrumKit/blob/master/README.md", | |||
"sourceUrl": "https://github.com/JerrySievert/DrumKit", | |||
"donateUrl": "https://paypal.me/JerrySievert", | |||
"modules": [ | |||
{ | |||
"slug": "BassDrum9", | |||
"name": "Bass Drum 9", | |||
"description": "Bass Drum Kit based on 909", | |||
"tags": [ | |||
"Drum" | |||
] | |||
}, | |||
{ | |||
"slug": "ClosedHiHat", | |||
"name": "Closed HiHat", | |||
"description": "HiHat Module", | |||
"tags": [ | |||
"DRUM" | |||
] | |||
}, | |||
{ | |||
"slug": "CR78", | |||
"name": "CR78", | |||
"description": "CompuRhythm 78 Kit", | |||
"tags": [ | |||
"DRUM" | |||
] | |||
}, | |||
{ | |||
"slug": "CR78mk2", | |||
"name": "CR78 mk2", | |||
"description": "CompuRhythm 78 Kit, mk 2", | |||
"tags": [ | |||
"Drum" | |||
] | |||
}, | |||
{ | |||
"slug": "DMX", | |||
"name": "DMX", | |||
"description": "DMX Drum Kit", | |||
"tags": [ | |||
"Drum" | |||
] | |||
}, | |||
{ | |||
"slug": "DMXmk2", | |||
"name": "DMX mk2", | |||
"description": "DMX Drum Kit mk 2", | |||
"tags": [ | |||
"Drum" | |||
] | |||
}, | |||
{ | |||
"slug": "OpenHiHat", | |||
"name": "Open HiHat", | |||
"description": "HiHat Module", | |||
"tags": [ | |||
"Drum" | |||
] | |||
}, | |||
{ | |||
"slug": "SyntheticBassDrum", | |||
"name": "Synthetic Bass Drum", | |||
"description": "Synthetic Bass Drum", | |||
"tags": [ | |||
"Drum" | |||
] | |||
}, | |||
{ | |||
"slug": "SnareDrumN", | |||
"name": "Snare Drum N", | |||
"description": "Snare Drum Kit based on Novation Drumstation", | |||
"tags": [ | |||
"Drum" | |||
] | |||
} | |||
] | |||
} |
@@ -1,137 +0,0 @@ | |||
{ | |||
"slug": "FrozenWasteland", | |||
"name": "Frozen Wasteland", | |||
"version": "1.0.0", | |||
"author": "Eric Sterling", | |||
"license": "CC0-1.0", | |||
"authorEmail": "e.sterling@comcast.net", | |||
"pluginUrl": "https://github.com/almostEric/FrozenWasteland/blob/master/README.md", | |||
"authorUrl": "https://vcvrack.com/", | |||
"manualUrl": "https://github.com/almostEric/FrozenWasteland/blob/master/README.md", | |||
"sourceUrl": "https://github.com/almostEric/FrozenWasteland", | |||
"donateUrl": "https://paypal.me/FrozenWasteland", | |||
"modules": [ | |||
{ | |||
"slug": "BPMLFO", | |||
"name": "BPM LFO", | |||
"tags": [ | |||
"LFO" | |||
] | |||
}, | |||
{ | |||
"slug": "BPMLFO2", | |||
"name": "BPM LFO 2", | |||
"tags": [ | |||
"LFO" | |||
] | |||
}, | |||
{ | |||
"slug": "CDCSeriouslySlowLFO", | |||
"name": "CDC Seriously Slow LFO", | |||
"tags": [ | |||
"LFO" | |||
] | |||
}, | |||
{ | |||
"slug": "DamianLillard", | |||
"name": "Damian Lillard", | |||
"tags": [ | |||
"VCA" | |||
] | |||
}, | |||
{ | |||
"slug": "EverlastingGlottalStopper", | |||
"name": "Everlasting Glottal Stopper", | |||
"tags": [ | |||
"VCO" | |||
] | |||
}, | |||
{ | |||
"slug": "HairPick", | |||
"name": "Hair Pick", | |||
"tags": [ | |||
"VCF" | |||
] | |||
}, | |||
{ | |||
"slug": "LissajousLFO", | |||
"name": "Lissajous LFO", | |||
"tags": [ | |||
"LFO" | |||
] | |||
}, | |||
{ | |||
"slug": "MrBlueSky", | |||
"name": "Mr. Blue Sky", | |||
"tags": [ | |||
"Vocoder" | |||
] | |||
}, | |||
{ | |||
"slug": "PhasedLockedLoop", | |||
"name": "Phased Locked Loop", | |||
"tags": [ | |||
"VCO" | |||
] | |||
}, | |||
{ | |||
"slug": "PortlandWeather", | |||
"name": "Portland Weather", | |||
"tags": [ | |||
"Delay", | |||
"Granular", | |||
"VCF" | |||
] | |||
}, | |||
{ | |||
"slug": "QuadAlgorithmicRhythm", | |||
"name": "Quad Algorithmic Rhythm Generator", | |||
"tags": [ | |||
"Sequencer" | |||
] | |||
}, | |||
{ | |||
"slug": "QuadRhythmExpander", | |||
"name": "Quad Rhythm Expander", | |||
"tags": [ | |||
"Sequencer", | |||
"Expander" | |||
] | |||
}, | |||
{ | |||
"slug": "QuantussyCell", | |||
"name": "Quantussy Cell", | |||
"tags": [ | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "RouletteLFO", | |||
"name": "Roulette LFO", | |||
"tags": [ | |||
"LFO" | |||
] | |||
}, | |||
{ | |||
"slug": "SeriouslySlowLFO", | |||
"name": "Seriously Slow LFO", | |||
"tags": [ | |||
"LFO" | |||
] | |||
}, | |||
{ | |||
"slug": "TheOneRingModulator", | |||
"name": "The One Ring Modulator", | |||
"tags": [ | |||
"Ring Modulator" | |||
] | |||
}, | |||
{ | |||
"slug": "VoxInhumana", | |||
"name": "Vox Inhumana", | |||
"tags": [ | |||
"VCF" | |||
] | |||
} | |||
] | |||
} |
@@ -1,173 +0,0 @@ | |||
{ | |||
"slug": "Fundamental", | |||
"name": "Fundamental", | |||
"author": "VCV", | |||
"license": "BSD-3-Clause", | |||
"authorEmail": "contact@vcvrack.com", | |||
"pluginUrl": "https://vcvrack.com/Fundamental.html", | |||
"authorUrl": "https://vcvrack.com/", | |||
"manualUrl": "https://vcvrack.com/Fundamental.html#manual", | |||
"sourceUrl": "https://github.com/VCVRack/Fundamental", | |||
"version": "1.0.0", | |||
"modules": [ | |||
{ | |||
"slug": "VCO", | |||
"name": "VCO-1", | |||
"tags": [ | |||
"VCO" | |||
] | |||
}, | |||
{ | |||
"slug": "VCO2", | |||
"name": "VCO-2", | |||
"tags": [ | |||
"VCO" | |||
] | |||
}, | |||
{ | |||
"slug": "VCF", | |||
"name": "VCF", | |||
"tags": [ | |||
"VCF" | |||
] | |||
}, | |||
{ | |||
"slug": "VCA-1", | |||
"name": "VCA-1", | |||
"tags": [ | |||
"VCA" | |||
] | |||
}, | |||
{ | |||
"slug": "VCA", | |||
"name": "VCA-2", | |||
"tags": [ | |||
"VCA", | |||
"Dual" | |||
] | |||
}, | |||
{ | |||
"slug": "LFO", | |||
"name": "LFO-1", | |||
"tags": [ | |||
"LFO" | |||
] | |||
}, | |||
{ | |||
"slug": "LFO2", | |||
"name": "LFO-2", | |||
"tags": [ | |||
"LFO" | |||
] | |||
}, | |||
{ | |||
"slug": "Delay", | |||
"name": "Delay", | |||
"tags": [ | |||
"Delay" | |||
] | |||
}, | |||
{ | |||
"slug": "ADSR", | |||
"name": "ADSR", | |||
"tags": [ | |||
"Envelope Generator" | |||
] | |||
}, | |||
{ | |||
"slug": "VCMixer", | |||
"name": "Mixer", | |||
"tags": [ | |||
"Mixer", | |||
"VCA" | |||
] | |||
}, | |||
{ | |||
"slug": "8vert", | |||
"name": "8vert", | |||
"tags": [ | |||
"Attenuator" | |||
] | |||
}, | |||
{ | |||
"slug": "Unity", | |||
"name": "Unity", | |||
"tags": [ | |||
"Mixer", | |||
"Utility", | |||
"Dual" | |||
] | |||
}, | |||
{ | |||
"slug": "Mutes", | |||
"name": "Mutes", | |||
"tags": [ | |||
"Switch" | |||
] | |||
}, | |||
{ | |||
"slug": "Scope", | |||
"name": "Scope", | |||
"tags": [ | |||
"Visual" | |||
] | |||
}, | |||
{ | |||
"slug": "SEQ3", | |||
"name": "SEQ-3", | |||
"tags": [ | |||
"Sequencer" | |||
] | |||
}, | |||
{ | |||
"slug": "SequentialSwitch1", | |||
"name": "Sequential Switch 1", | |||
"tags": [ | |||
"Utility" | |||
] | |||
}, | |||
{ | |||
"slug": "SequentialSwitch2", | |||
"name": "Sequential Switch 2", | |||
"tags": [ | |||
"Utility" | |||
] | |||
}, | |||
{ | |||
"slug": "Split", | |||
"name": "Split", | |||
"description": "Splits a polyphonic cable into multiple monophonic cables", | |||
"tags": [ | |||
"Poly", | |||
"Utility" | |||
] | |||
}, | |||
{ | |||
"slug": "Merge", | |||
"name": "Merge", | |||
"description": "Combines multiple monophonic cables into a polyphonic cable", | |||
"tags": [ | |||
"Poly", | |||
"Utility" | |||
] | |||
}, | |||
{ | |||
"slug": "Sum", | |||
"name": "Sum", | |||
"description": "Sums all channels in a polyphonic cable", | |||
"tags": [ | |||
"Poly", | |||
"Utility" | |||
] | |||
}, | |||
{ | |||
"slug": "Viz", | |||
"name": "Viz", | |||
"description": "Visualizes all channels of a polyphonic cable", | |||
"tags": [ | |||
"Poly", | |||
"Visual" | |||
] | |||
} | |||
] | |||
} |
@@ -0,0 +1,128 @@ | |||
{ | |||
"slug": "SynthKit", | |||
"name": "SynthKit", | |||
"version": "1.0.0", | |||
"license": "CC0-1.0", | |||
"author": "Jerry Sievert", | |||
"authorEmail": "rack@legitimatesounding.com", | |||
"authorUrl": "https://legitimatesounding.com/", | |||
"pluginUrl": "https://github.com/jerrysievert/synthkit/", | |||
"manualUrl": "https://github.com/JerrySievert/SynthKit/blob/master/docs/README.md", | |||
"sourceUrl": "https://github.com/jerrysievert/synthkit/", | |||
"donateUrl": "https://paypal.me/JerrySievert", | |||
"modules": [ | |||
{ | |||
"slug": "1x8Splitter", | |||
"name": "1x8 Splitter", | |||
"description": "1 in 8 out", | |||
"tags": [ | |||
"Clock modulator", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "1x8SplitterCV", | |||
"name": "1x8 Splitter (CV)", | |||
"description": "CV Controlled 1x8 Splitter", | |||
"tags": [ | |||
"Clock modulator", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "Addition", | |||
"name": "Addition", | |||
"description": "Simple value addition", | |||
"tags": [ | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "Subtraction", | |||
"name": "Subtraction", | |||
"description": "Simple value subtraction", | |||
"tags": [ | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "ClockDivider", | |||
"name": "Clock Divider", | |||
"description": "Clock Divider", | |||
"tags": [ | |||
"Clock modulator", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "And", | |||
"name": "And", | |||
"description": "Logical Bitwise And", | |||
"tags": [ | |||
"Utility", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "Or", | |||
"name": "Or", | |||
"description": "Logical Bitwise Or", | |||
"tags": [ | |||
"Utility", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "FibonacciClockDivider", | |||
"name": "Fibonacci Clock Divider", | |||
"description": "Fibonacci Clock Divider", | |||
"tags": [ | |||
"Clock modulator", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "PrimeClockDivider", | |||
"name": "PrimeClock Divider", | |||
"description": "Prime Clock Divider", | |||
"tags": [ | |||
"Clock modulator", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "RotatingClockDivider", | |||
"name": "Rotating Clock Divider", | |||
"description": "Rotating Clock Divider", | |||
"tags": [ | |||
"Clock modulator", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "ShiftingClockDividerCV", | |||
"name": "Shifting Clock Divider", | |||
"description": "Shifting Clock Divider", | |||
"tags": [ | |||
"Clock modulator", | |||
"Logic" | |||
] | |||
}, | |||
{ | |||
"slug": "4-StepSequencer", | |||
"name": "4-Step Sequencer", | |||
"description": "4-Step Sequencer", | |||
"tags": [ | |||
"Sequencer" | |||
] | |||
}, | |||
{ | |||
"slug": "8-StepSequencer", | |||
"name": "8-Step Sequencer", | |||
"description": "8-Step Sequencer", | |||
"tags": [ | |||
"Sequencer" | |||
] | |||
} | |||
] | |||
} |
@@ -1,21 +0,0 @@ | |||
{ | |||
"slug": "VCV-Recorder", | |||
"name": "Recorder", | |||
"author": "VCV", | |||
"license": "BSD-3-Clause", | |||
"authorEmail": "contact@vcvrack.com", | |||
"authorUrl": "https://vcvrack.com/", | |||
"sourceUrl": "https://github.com/VCVRack/VCV-Recorder", | |||
"version": "1.0.0", | |||
"modules": [ | |||
{ | |||
"slug": "Recorder", | |||
"name": "Recorder", | |||
"description": "Records stereo audio and video from Rack screen a file", | |||
"tags": [ | |||
"Recording", | |||
"Visual" | |||
] | |||
} | |||
] | |||
} |
@@ -1,94 +0,0 @@ | |||
{ | |||
"slug": "rcm", | |||
"name": "RCM", | |||
"brand": "RCM", | |||
"version": "1.0.0", | |||
"license": "GPL-2.0-or-later", | |||
"author": "RCM", | |||
"authorEmail": "", | |||
"authorUrl": "https://github.com/Rcomian", | |||
"pluginUrl": "https://github.com/Rcomian/rcm-modules", | |||
"manualUrl": "https://github.com/Rcomian/rcm-modules/blob/v0.6/README.md", | |||
"sourceUrl": "https://github.com/Rcomian/rcm-modules", | |||
"donateUrl": "", | |||
"modules": [ | |||
{ | |||
"slug": "rcm-CVTgl", | |||
"name": "CV Toggle", | |||
"description": "A labelled toggle switch, outputs 0V or 10V", | |||
"tags": [] | |||
}, | |||
{ | |||
"slug": "rcm-CVMmt", | |||
"name": "CV Momentary", | |||
"description": "A labelled button, outputs 0V or 10V", | |||
"tags": [] | |||
}, | |||
{ | |||
"slug": "rcm-CVS0to10", | |||
"name": "CV Sliders 0 to 10", | |||
"description": "4 CV sliders, outputs 0V to 10V", | |||
"tags": [] | |||
}, | |||
{ | |||
"slug": "rcm-CV5to5", | |||
"name": "CV Knob -5 to 5", | |||
"description": "CV knob, outputs -5V to 5V", | |||
"tags": [] | |||
}, | |||
{ | |||
"slug": "rcm-CV0to10", | |||
"name": "CV Knob 0 to 10", | |||
"description": "CV knob, outputs 0V to 10V", | |||
"tags": [] | |||
}, | |||
{ | |||
"slug": "rcm-gverb", | |||
"name": "GVerb", | |||
"description": "Dirty unstable reverb", | |||
"tags": [ | |||
"reverb" | |||
] | |||
}, | |||
{ | |||
"slug": "rcm-duck", | |||
"name": "Duck", | |||
"description": "Basic audio ducking", | |||
"tags": [ | |||
"dynamics" | |||
] | |||
}, | |||
{ | |||
"slug": "rcm-seq-adapter", | |||
"name": "SEQ Adapter", | |||
"description": "Nord style reset for syncing simple sequencers", | |||
"tags": [ | |||
"seq" | |||
] | |||
}, | |||
{ | |||
"slug": "rcm-sync", | |||
"name": "Sync", | |||
"description": "Simplified Nord style reset for syncing simple sequencers", | |||
"tags": [ | |||
"seq" | |||
] | |||
}, | |||
{ | |||
"slug": "rcm-pianoroll", | |||
"name": "Piano Roll", | |||
"description": "Simple Piano Roll for sequencing", | |||
"tags": [ | |||
"seq" | |||
] | |||
}, | |||
{ | |||
"slug": "AudioInterface16", | |||
"name": "Audio Interface 16", | |||
"description": "A reskin of the Audio16 Interface (only kept for backwards compat)", | |||
"tags": [ | |||
"audio" | |||
] | |||
} | |||
] | |||
} |
@@ -1 +0,0 @@ | |||
Subproject commit 6638244558048824ac505f385fd5cda70a795cd6 |
@@ -0,0 +1,74 @@ | |||
import os | |||
import sys | |||
RACK_SDK = os.path.abspath("Rack-SDK") | |||
STAGE_DIR = "stage" | |||
PACKAGE_DIR = "../packages" | |||
def system(cmd): | |||
err = os.system(cmd) | |||
if err: | |||
raise Exception(f"Command failed with error {err}: {cmd}") | |||
def stage_package(plugin_dir): | |||
system(f'mkdir -p {STAGE_DIR}') | |||
system(f'mv {plugin_dir}/dist/*.zip {STAGE_DIR}/') | |||
def move_stage(): | |||
system(f'mv -vi {STAGE_DIR}/* {PACKAGE_DIR}/') | |||
def delete_stage(): | |||
system(f'rm -rf {STAGE_DIR}') | |||
def build_mac(plugin_dir): | |||
env = f'CC=x86_64-apple-darwin15-clang CXX=x86_64-apple-darwin15-clang++-libc++ STRIP=x86_64-apple-darwin15-strip RACK_DIR={RACK_SDK}' | |||
make = f'{env} make -j$(nproc) -C {plugin_dir}' | |||
system(f'{make} clean') | |||
system(f'{make} dist') | |||
stage_package(plugin_dir) | |||
system(f'{make} clean') | |||
def build_win(plugin_dir): | |||
env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={RACK_SDK}' | |||
make = f'{env} make -j$(nproc) -C {plugin_dir}' | |||
system(f'{make} clean') | |||
system(f'{make} dist') | |||
stage_package(plugin_dir) | |||
system(f'{make} clean') | |||
def build_lin(plugin_dir): | |||
make = f'make -j$(nproc)' | |||
plugin_abs = os.path.abspath(plugin_dir) | |||
# TODO Make this Docker image publicly available | |||
# It's essentially just Ubuntu 16.04 with plugin build dependencies installed, the workdir, and a user account set up so it matches my own machine's UID to solve file permissions issues. | |||
docker = f'docker run --rm -v {RACK_SDK}:/Rack-SDK -v {plugin_abs}:/workdir -w /workdir -u vortico -e RACK_DIR=/Rack-SDK rackplugin:1' | |||
system(f'{docker} {make} clean') | |||
system(f'{docker} {make} dist') | |||
stage_package(plugin_dir) | |||
system(f'{docker} {make} clean') | |||
def build(plugin_dir): | |||
try: | |||
build_lin(plugin_dir) | |||
build_win(plugin_dir) | |||
build_mac(plugin_dir) | |||
move_stage() | |||
finally: | |||
delete_stage() | |||
if __name__ == "__main__": | |||
plugin_dir = sys.argv[1] | |||
if not plugin_dir: | |||
raise "No plugin_dir given" | |||
build(plugin_dir) | |||
@@ -0,0 +1,77 @@ | |||
import sys | |||
import os | |||
import glob | |||
import json | |||
import time | |||
import build | |||
build.system("git pull") | |||
build.system("git submodule update --init --recursive") | |||
plugin_dirs = sys.argv[1:] | |||
if not plugin_dirs: | |||
plugin_dirs = glob.glob("repos/*") | |||
built_slugs = [] | |||
for plugin_dir in plugin_dirs: | |||
manifest_filename = f"{plugin_dir}/plugin.json" | |||
try: | |||
with open(manifest_filename, "r") as f: | |||
manifest = json.load(f) | |||
except IOError: | |||
# Skip plugins without plugin.json | |||
continue | |||
slug = manifest['slug'] | |||
library_manifest_filename = f"manifests/{slug}.json" | |||
library_manifest = None | |||
try: | |||
with open(library_manifest_filename, "r") as f: | |||
library_manifest = json.load(f) | |||
except IOError: | |||
pass | |||
# Check if the build is up to date | |||
if library_manifest and manifest['version'] == library_manifest['version']: | |||
continue | |||
# Build repo | |||
print() | |||
print(f"Building {slug}") | |||
try: | |||
build.build(plugin_dir) | |||
except Exception as e: | |||
print(e) | |||
print(f"{slug} build failed") | |||
input() | |||
continue | |||
# Copy manifest | |||
with open(library_manifest_filename, "w") as f: | |||
json.dump(manifest, f, indent=" ") | |||
built_slugs.append(slug) | |||
# Open plugin issue thread | |||
os.system(f"qutebrowser \"https://github.com/VCVRack/library/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+{slug}\" &") | |||
if not built_slugs: | |||
raise Exception("Nothing to build") | |||
raise Exception("finished") | |||
# Upload packages | |||
build.system("cd ../packages && make upload") | |||
# Commit repository | |||
build.system("git add manifests") | |||
build.system("git commit -m 'Update builds'") | |||
build.system("git push") | |||
print() | |||
print("Built " + ", ".join(built_slugs)) |