Move kitematic docs to kitematic subdirectory
136
CONTRIBUTING.md
|
@ -1,136 +0,0 @@
|
|||
# Contributing to Kitematic
|
||||
|
||||
Thanks for contributing and supporting the Kitematic project!
|
||||
|
||||
Before you file an issue or a pull request, read the following tips on how to keep development of the project awesome for all of the contributors:
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Mac Prerequisites](#prerequisites-for-developing-kitematic-on-mac)
|
||||
- [Windows Prerequisites](#prerequisites-for-developing-kitematic-on-windows)
|
||||
- [Getting Started](#getting-started)
|
||||
- [Architecture](#architecture)
|
||||
- [GitHub Issues](#github-issues)
|
||||
- [Pull Requests](#pull-requests)
|
||||
- [Code Guidelines](#code-guidelines)
|
||||
- [Testing](#testing)
|
||||
- [License](#license)
|
||||
|
||||
|
||||
### Prerequisites for developing Kitematic on Mac
|
||||
You will need to install:
|
||||
- The [Docker Toolbox](https://docker.com/toolbox)
|
||||
- [Node.js](https://nodejs.org/)
|
||||
- Wine `brew install wine` (only if you want to generate a Windows release on OS X)
|
||||
- The latest Xcode from the Apple App Store.
|
||||
|
||||
### Prerequisites for developing Kitematic on Windows
|
||||
You will need to install:
|
||||
- The [Docker Toolbox](https://docker.com/toolbox)
|
||||
- [Node.js](https://nodejs.org/)
|
||||
- Open a command prompt (`cmd`) and run the command `mkdir ~/AppData/Roaming/npm`
|
||||
- [Visual Studio 2013 Community](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) (or similar) - You do not need to install any optional packages during install.
|
||||
- [Python](https://www.python.org/downloads/release/python-2710/)
|
||||
|
||||

|
||||
|
||||
### Getting Started
|
||||
|
||||
- `npm install`
|
||||
|
||||
To run the app in development:
|
||||
|
||||
- `npm start`
|
||||
|
||||
Running `npm start` will download and install the Docker client,
|
||||
[Docker Machine](https://github.com/docker/machine), [Docker Compose](https://github.com/docker/compose)
|
||||
the [Boot2Docker iso](https://github.com/boot2docker/boot2docker),
|
||||
[Electron](http://electron.atom.io/).
|
||||
|
||||
### Building & Release
|
||||
|
||||
- `npm run release`
|
||||
|
||||
### Unit Tests
|
||||
|
||||
- `npm test`
|
||||
|
||||
## Architecture
|
||||
|
||||
### Overview
|
||||
|
||||
**Note: This architecture is work in progress and doesn't reflect the current state of the app, yet!**
|
||||
|
||||
Kitematic is an application built using [electron](https://github.com/atom/electron) and is powered by the [Docker Engine](https://github.com/docker/docker). While it's work in progress, the goal is to make Kitematic a high-performance, portable Javascript ES6 application built with React and Flux (using [alt](https://github.com/goatslacker/alt). It adopts a single data flow pattern:
|
||||
|
||||
```
|
||||
╔═════════╗ ╔════════╗ ╔═════════════════╗
|
||||
║ Actions ║──────>║ Stores ║──────>║ View Components ║
|
||||
╚═════════╝ ╚════════╝ ╚═════════════════╝
|
||||
^ │
|
||||
└──────────────────────────────────────┘
|
||||
```
|
||||
|
||||
There are three primary types of objects:
|
||||
- **Actions**: Interact with the system (Docker Engine, Docker Machine, Registries, Hub, etc)
|
||||
- **Views**: Views make up the UI, and trigger available actions.
|
||||
- **Stores**: Stores store the state of the application.
|
||||
|
||||
and since Kitematic has a large amount of interaction with outside systems, we've added utils:
|
||||
- **Utils**: Utils interact with APIs, outside systems, CLI tools and generate. They are called by user-generated actions and in return, also create actions based on API return values, CLI output etc.
|
||||
|
||||
### Guidelines
|
||||
|
||||
- Avoid asynchronous code in Actions, Stores or Views. Instead, put code involving callbacks, promises or generators in utils or actions.
|
||||
|
||||
## GitHub Issues
|
||||
|
||||
Please try and label any issue as:
|
||||
- `bug`: clearly a defect or unwanted behavior (errors, performance issues)
|
||||
- `enhancement`: making an existing, working feature better (UI improvements, better integration)
|
||||
- `feature`: an entirely new feature. Please work on [roadmap features](https://github.com/kitematic/kitematic/blob/master/ROADMAP.md).
|
||||
|
||||
Before creating an issue, please:
|
||||
|
||||
1. **Search the existing issues** to see if an issue already exists (and if so, throw in a handy :+1:)!
|
||||
|
||||
2. **Make sure you're running the latest version of Kitematic**. The bug may already be fixed!
|
||||
|
||||
3. **Explain how to reproduce the bug**. This will save maintainers tons of time!
|
||||
|
||||
Please be as detailed as possible. Include a description of your environment and steps on how to reproduce a bug.
|
||||
|
||||
## Pull Requests
|
||||
|
||||
We're thrilled to receive pull requests of any kind. Anything from bug fix, tests or new features are welcome.
|
||||
|
||||
That said, please let us know what you're planning to do! For large changes always create a proposal. Maintainers will love to give you advice on building it and it keeps the app's design coherent.
|
||||
|
||||
### Pull Request Requirements:
|
||||
- Includes tests
|
||||
- [Signed Off](https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work)
|
||||
|
||||
## Testing
|
||||
|
||||
Please try to test any new code.
|
||||
- Tests can be run using `npm test`
|
||||
- Kitematic uses the [Jest framework](https://facebook.github.io/jest/) by Facebook. To keep tests fast, please mock as much as possible.
|
||||
|
||||
## Code Guidelines
|
||||
|
||||
### Javascript
|
||||
|
||||
Kitematic is es6 ready. Please use es6 constructs where possible, they are powerful and make the code more succinct, understandable and fun.
|
||||
|
||||
- Semicolons
|
||||
- 2 spaces (no tabs)
|
||||
|
||||
#### Checking Javascript code standards with JSHint
|
||||
|
||||
Run `npm run lint` before committing to ensure your javascript is up to standard. Feel free to suggest changes to the lint spec in `.jshint`.
|
||||
|
||||
We designed Kitematic to be easy to build, extend and distribute for developers.
|
||||
|
||||
## License
|
||||
|
||||
By contributing your code, you agree to license your contribution under the [Apache license](https://github.com/kitematic/kitematic/blob/master/LICENSE).
|
421
Gruntfile.js
|
@ -1,421 +0,0 @@
|
|||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var execFile = require('child_process').execFile;
|
||||
var packagejson = require('./package.json');
|
||||
var electron = require('electron-prebuilt');
|
||||
|
||||
module.exports = function (grunt) {
|
||||
require('load-grunt-tasks')(grunt);
|
||||
var target = grunt.option('target') || 'development';
|
||||
var beta = grunt.option('beta') || false;
|
||||
var alpha = grunt.option('alpha') || false;
|
||||
var env = process.env;
|
||||
env.NODE_PATH = '..:' + env.NODE_PATH;
|
||||
env.NODE_ENV = target;
|
||||
|
||||
var certificateFile = grunt.option('certificateFile');
|
||||
|
||||
var version = function (str) {
|
||||
var match = str.match(/(\d+\.\d+\.\d+)/);
|
||||
return match ? match[1] : null;
|
||||
};
|
||||
|
||||
var BASENAME = 'Kitematic';
|
||||
var OSX_APPNAME = BASENAME + ' (Beta)';
|
||||
var WINDOWS_APPNAME = BASENAME + ' (Alpha)';
|
||||
var LINUX_APPNAME = BASENAME + ' (Alpha)';
|
||||
var OSX_OUT = './dist';
|
||||
var OSX_OUT_X64 = OSX_OUT + '/' + OSX_APPNAME + '-darwin-x64';
|
||||
var OSX_FILENAME = OSX_OUT_X64 + '/' + OSX_APPNAME + '.app';
|
||||
var LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_amd64.deb';
|
||||
|
||||
|
||||
var IS_WINDOWS = process.platform === 'win32';
|
||||
var IS_LINUX = process.platform === 'linux';
|
||||
|
||||
var IS_I386 = process.arch === 'ia32';
|
||||
var IS_X64 = process.arch === 'x64';
|
||||
|
||||
var IS_DEB = fs.existsSync('/etc/lsb-release') || fs.existsSync('/etc/debian_version');
|
||||
var IS_RPM = fs.existsSync('/etc/redhat-release');
|
||||
|
||||
var linuxpackage = null;
|
||||
// linux package detection
|
||||
if (IS_DEB && IS_X64) {
|
||||
linuxpackage = 'electron-installer-debian:linux64';
|
||||
} else if (IS_DEB && IS_I386) {
|
||||
linuxpackage = 'electron-installer-debian:linux32';
|
||||
LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_i386.deb';
|
||||
} else if (IS_RPM && IS_X64) {
|
||||
linuxpackage = 'electron-installer-redhat:linux64';
|
||||
LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_x86_64.rpm';
|
||||
} else if (IS_RPM && IS_I386) {
|
||||
linuxpackage = 'electron-installer-redhat:linux32';
|
||||
LINUX_FILENAME = OSX_OUT + '/' + BASENAME + '_' + packagejson.version + '_x86.rpm';
|
||||
}
|
||||
|
||||
grunt.initConfig({
|
||||
IDENTITY: 'Developer ID Application: Docker Inc',
|
||||
OSX_FILENAME: OSX_FILENAME,
|
||||
OSX_FILENAME_ESCAPED: OSX_FILENAME.replace(/ /g, '\\ ').replace(/\(/g, '\\(').replace(/\)/g, '\\)'),
|
||||
LINUX_FILENAME: LINUX_FILENAME,
|
||||
|
||||
// electron
|
||||
electron: {
|
||||
windows: {
|
||||
options: {
|
||||
name: BASENAME,
|
||||
dir: 'build/',
|
||||
out: 'dist',
|
||||
version: packagejson['electron-version'],
|
||||
platform: 'win32',
|
||||
arch: 'x64',
|
||||
asar: true,
|
||||
icon: 'util/kitematic.ico'
|
||||
}
|
||||
},
|
||||
osx: {
|
||||
options: {
|
||||
name: OSX_APPNAME,
|
||||
dir: 'build/',
|
||||
out: 'dist',
|
||||
version: packagejson['electron-version'],
|
||||
platform: 'darwin',
|
||||
arch: 'x64',
|
||||
asar: true,
|
||||
'app-version': packagejson.version
|
||||
}
|
||||
},
|
||||
linux: {
|
||||
options: {
|
||||
name: LINUX_APPNAME,
|
||||
dir: 'build/',
|
||||
out: 'dist',
|
||||
version: packagejson['electron-version'],
|
||||
platform: 'linux',
|
||||
arch: 'x64',
|
||||
asar: true,
|
||||
'app-bundle-id': 'com.kitematic.kitematic',
|
||||
'app-version': packagejson.version
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
rcedit: {
|
||||
exes: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'dist/' + BASENAME + '-win32-x64',
|
||||
src: [BASENAME + '.exe']
|
||||
}],
|
||||
options: {
|
||||
icon: 'util/kitematic.ico',
|
||||
'file-version': packagejson.version,
|
||||
'product-version': packagejson.version,
|
||||
'version-string': {
|
||||
'CompanyName': 'Docker',
|
||||
'ProductVersion': packagejson.version,
|
||||
'ProductName': WINDOWS_APPNAME,
|
||||
'FileDescription': WINDOWS_APPNAME,
|
||||
'InternalName': BASENAME + '.exe',
|
||||
'OriginalFilename': BASENAME + '.exe',
|
||||
'LegalCopyright': 'Copyright 2015-2016 Docker Inc. All rights reserved.'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// images
|
||||
copy: {
|
||||
dev: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: '.',
|
||||
src: ['package.json', 'settings.json', 'index.html'],
|
||||
dest: 'build/'
|
||||
}, {
|
||||
expand: true,
|
||||
cwd: 'images/',
|
||||
src: ['**/*'],
|
||||
dest: 'build/'
|
||||
}, {
|
||||
expand: true,
|
||||
cwd: 'fonts/',
|
||||
src: ['**/*'],
|
||||
dest: 'build/'
|
||||
}, {
|
||||
cwd: 'node_modules/',
|
||||
src: Object.keys(packagejson.dependencies).map(function (dep) {
|
||||
return dep + '/**/*';
|
||||
}),
|
||||
dest: 'build/node_modules/',
|
||||
expand: true
|
||||
}]
|
||||
},
|
||||
windows: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'resources',
|
||||
src: ['ssh.exe', 'OPENSSH_LICENSE', 'msys-*'],
|
||||
dest: 'dist/' + BASENAME + '-win32-x64/resources/resources'
|
||||
}],
|
||||
options: {
|
||||
mode: true
|
||||
}
|
||||
},
|
||||
osx: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'resources',
|
||||
src: ['terminal'],
|
||||
dest: '<%= OSX_FILENAME %>/Contents/Resources/resources/'
|
||||
}, {
|
||||
src: 'util/kitematic.icns',
|
||||
dest: '<%= OSX_FILENAME %>/Contents/Resources/atom.icns'
|
||||
}],
|
||||
options: {
|
||||
mode: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
rename: {
|
||||
installer: {
|
||||
src: 'dist/Setup.exe',
|
||||
dest: 'dist/' + BASENAME + 'Setup-' + packagejson.version + '-Windows-Alpha.exe'
|
||||
}
|
||||
},
|
||||
|
||||
// styles
|
||||
less: {
|
||||
options: {
|
||||
sourceMapFileInline: true
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'build/main.css': 'styles/main.less'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// javascript
|
||||
babel: {
|
||||
options: {
|
||||
sourceMap: 'inline',
|
||||
blacklist: 'regenerator',
|
||||
stage: 1,
|
||||
optional: ['asyncToGenerator']
|
||||
},
|
||||
dist: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'src/',
|
||||
src: ['**/*.js'],
|
||||
dest: 'build/'
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
shell: {
|
||||
electron: {
|
||||
command: electron + ' ' + 'build',
|
||||
options: {
|
||||
async: true,
|
||||
execOptions: {
|
||||
env: env
|
||||
}
|
||||
}
|
||||
},
|
||||
sign: {
|
||||
options: {
|
||||
failOnError: false
|
||||
},
|
||||
command: [
|
||||
'codesign --deep -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>/Contents/Frameworks/*',
|
||||
'codesign -v -f -s "<%= IDENTITY %>" <%= OSX_FILENAME_ESCAPED %>',
|
||||
'codesign -vvv --display <%= OSX_FILENAME_ESCAPED %>',
|
||||
'codesign -v --verify <%= OSX_FILENAME_ESCAPED %>'
|
||||
].join(' && ')
|
||||
},
|
||||
zip: {
|
||||
command: 'ditto -c -k --sequesterRsrc --keepParent <%= OSX_FILENAME_ESCAPED %> release/' + BASENAME + '-Mac.zip'
|
||||
},
|
||||
linux_npm: {
|
||||
command: 'cd build && npm install --production'
|
||||
},
|
||||
linux_zip: {
|
||||
command: 'ditto -c -k --sequesterRsrc --keepParent <%= LINUX_FILENAME %> release/' + BASENAME + '-Ubuntu.zip'
|
||||
}
|
||||
},
|
||||
|
||||
clean: {
|
||||
release: ['build/', 'dist/']
|
||||
},
|
||||
|
||||
compress: {
|
||||
windows: {
|
||||
options: {
|
||||
archive: './release/' + BASENAME + '-Windows.zip',
|
||||
mode: 'zip'
|
||||
},
|
||||
files: [{
|
||||
expand: true,
|
||||
dot: true,
|
||||
cwd: './dist/Kitematic-win32-x64',
|
||||
src: '**/*'
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
// livereload
|
||||
watchChokidar: {
|
||||
options: {
|
||||
spawn: true
|
||||
},
|
||||
livereload: {
|
||||
options: {livereload: true},
|
||||
files: ['build/**/*']
|
||||
},
|
||||
js: {
|
||||
files: ['src/**/*.js'],
|
||||
tasks: ['newer:babel']
|
||||
},
|
||||
less: {
|
||||
files: ['styles/**/*.less'],
|
||||
tasks: ['less']
|
||||
},
|
||||
copy: {
|
||||
files: ['images/*', 'index.html', 'fonts/*'],
|
||||
tasks: ['newer:copy:dev']
|
||||
}
|
||||
},
|
||||
'electron-packager': {
|
||||
build: {
|
||||
options: {
|
||||
platform: process.platform,
|
||||
arch: process.arch,
|
||||
dir: './build',
|
||||
out: './dist/',
|
||||
name: 'Kitematic',
|
||||
ignore: 'bower.json',
|
||||
version: packagejson['electron-version'], // set version of electron
|
||||
overwrite: true
|
||||
}
|
||||
},
|
||||
osxlnx: {
|
||||
options: {
|
||||
platform: 'linux',
|
||||
arch: 'x64',
|
||||
dir: './build',
|
||||
out: './dist/',
|
||||
name: 'Kitematic',
|
||||
ignore: 'bower.json',
|
||||
version: packagejson['electron-version'], // set version of electron
|
||||
overwrite: true
|
||||
}
|
||||
}
|
||||
},
|
||||
'electron-installer-debian': {
|
||||
options: {
|
||||
name: BASENAME.toLowerCase(), // spaces and brackets cause linting errors
|
||||
productName: LINUX_APPNAME.toLowerCase(),
|
||||
productDescription: 'Run containers through a simple, yet powerful graphical user interface.',
|
||||
maintainer: 'Ben French <frenchben@docker.com>',
|
||||
section: 'devel',
|
||||
priority: 'optional',
|
||||
icon: './util/kitematic.png',
|
||||
lintianOverrides: [
|
||||
'changelog-file-missing-in-native-package',
|
||||
'executable-not-elf-or-script',
|
||||
'extra-license-file',
|
||||
'non-standard-dir-perm',
|
||||
'non-standard-file-perm',
|
||||
'non-standard-executable-perm',
|
||||
'script-not-executable',
|
||||
'shlib-with-executable-bit',
|
||||
'binary-without-manpage',
|
||||
'debian-changelog-file-missing',
|
||||
'unusual-interpreter',
|
||||
'wrong-path-for-interpreter',
|
||||
'backup-file-in-package',
|
||||
'package-contains-vcs-control-file',
|
||||
'embedded-javascript-library',
|
||||
'embedded-library',
|
||||
'arch-dependent-file-in-usr-share'
|
||||
],
|
||||
categories: [
|
||||
'Utility'
|
||||
],
|
||||
rename: function (dest, src) {
|
||||
return LINUX_FILENAME;
|
||||
}
|
||||
},
|
||||
linux64: {
|
||||
options: {
|
||||
arch: 'amd64'
|
||||
},
|
||||
src: './dist/Kitematic-linux-x64/',
|
||||
dest: './dist/'
|
||||
},
|
||||
linux32: {
|
||||
options: {
|
||||
arch: 'i386'
|
||||
},
|
||||
src: './dist/Kitematic-linux-ia32/',
|
||||
dest: './dist/'
|
||||
}
|
||||
},
|
||||
'electron-installer-redhat': {
|
||||
options: {
|
||||
productName: LINUX_APPNAME,
|
||||
productDescription: 'Run containers through a simple, yet powerful graphical user interface.',
|
||||
priority: 'optional',
|
||||
icon: './util/kitematic.png',
|
||||
categories: [
|
||||
'Utilities'
|
||||
],
|
||||
rename: function (dest, src) {
|
||||
return LINUX_FILENAME;
|
||||
}
|
||||
},
|
||||
linux64: {
|
||||
options: {
|
||||
arch: 'x86_64'
|
||||
},
|
||||
src: './dist/Kitematic-linux-x64/',
|
||||
dest: './dist/'
|
||||
},
|
||||
linux32: {
|
||||
options: {
|
||||
arch: 'x86'
|
||||
},
|
||||
src: './dist/Kitematic-linux-ia32/',
|
||||
dest: './dist/'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Load the plugins for linux packaging
|
||||
grunt.loadNpmTasks('grunt-electron-packager');
|
||||
grunt.loadNpmTasks('grunt-electron-installer-debian');
|
||||
grunt.loadNpmTasks('grunt-electron-installer-redhat');
|
||||
|
||||
grunt.registerTask('default', ['newer:babel', 'less', 'newer:copy:dev', 'shell:electron', 'watchChokidar']);
|
||||
|
||||
if (!IS_WINDOWS && !IS_LINUX) {
|
||||
grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'compress', 'shell:linux_npm', 'electron-packager:osxlnx', 'electron-installer-debian:linux64', 'shell:linux_zip']);
|
||||
}else if (IS_LINUX) {
|
||||
if (linuxpackage) {
|
||||
grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'shell:linux_npm', 'electron-packager:build', linuxpackage]);
|
||||
}else {
|
||||
grunt.log.errorlns('Your Linux distribution is not yet supported - arch:' + process.arch + ' platform:' + process.platform);
|
||||
}
|
||||
}else {
|
||||
grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron:windows', 'copy:windows', 'rcedit:exes', 'compress']);
|
||||
}
|
||||
|
||||
process.on('SIGINT', function () {
|
||||
grunt.task.run(['shell:electron:kill']);
|
||||
process.exit(1);
|
||||
});
|
||||
};
|
202
LICENSE
|
@ -1,202 +0,0 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2014-2016 Docker, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
46
MAINTAINERS
|
@ -1,46 +0,0 @@
|
|||
# Kitematic maintainers file
|
||||
#
|
||||
# This file describes who runs the docker/kitematic project and how.
|
||||
# This is a living document - if you see something out of date or missing, speak up!
|
||||
#
|
||||
# It is structured to be consumable by both humans and programs.
|
||||
# To extract its contents programmatically, use any TOML-compliant parser.
|
||||
#
|
||||
# This file is compiled into the MAINTAINERS file in docker/opensource.
|
||||
#
|
||||
[Org]
|
||||
[Org."Core maintainers"]
|
||||
people = [
|
||||
"elesant",
|
||||
"FrenchBen",
|
||||
"jeffdm",
|
||||
"mchiang0610",
|
||||
]
|
||||
|
||||
[people]
|
||||
|
||||
# A reference list of all people associated with the project.
|
||||
# All other sections should refer to people by their canonical key
|
||||
# in the people section.
|
||||
|
||||
# ADD YOURSELF HERE IN ALPHABETICAL ORDER
|
||||
|
||||
[people.elesant]
|
||||
Name = "Sean Li"
|
||||
Email = "mail@shang.li"
|
||||
GitHub = "elesant"
|
||||
|
||||
[people.FrenchBen]
|
||||
Name = "Ben French"
|
||||
Email = "frenchben@docker.com"
|
||||
GitHub = "FrenchBen"
|
||||
|
||||
[people.jeffdm]
|
||||
Name = "Jeff Morgan"
|
||||
Email = "jmorgan@docker.com"
|
||||
GitHub = "jeffdm"
|
||||
|
||||
[people.mchiang0610]
|
||||
Name = "Michael Chiang"
|
||||
Email = "mchiang@docker.com"
|
||||
GitHub = "mchiang0610"
|
29
Makefile
|
@ -1,29 +0,0 @@
|
|||
.PHONY: docs docs-shell docs-build run
|
||||
|
||||
# TODO: clearly need to note pre-req's - OSX and node installed? - see contributing docs
|
||||
run:
|
||||
npm install
|
||||
npm run
|
||||
|
||||
# Get the IP ADDRESS
|
||||
DOCKER_IP=$(shell python -c "import urlparse ; print urlparse.urlparse('$(DOCKER_HOST)').hostname or ''")
|
||||
HUGO_BASE_URL=$(shell test -z "$(DOCKER_IP)" && echo localhost || echo "$(DOCKER_IP)")
|
||||
HUGO_BIND_IP=0.0.0.0
|
||||
|
||||
# import the existing docs build cmds from docker/docker
|
||||
DOCS_MOUNT := $(if $(DOCSDIR),-v $(CURDIR)/$(DOCSDIR):/$(DOCSDIR))
|
||||
DOCSPORT := 8000
|
||||
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
||||
DOCKER_DOCS_IMAGE := kitematic-docs$(if $(GIT_BRANCH),:$(GIT_BRANCH))
|
||||
DOCKER_RUN_DOCS := docker run --rm -it $(DOCS_MOUNT)
|
||||
|
||||
docs: docs-build
|
||||
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" \
|
||||
hugo server \
|
||||
--port=$(DOCSPORT) --baseUrl=$(HUGO_BASE_URL) --bind=$(HUGO_BIND_IP)
|
||||
|
||||
docs-shell: docs-build
|
||||
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" bash
|
||||
|
||||
docs-build:
|
||||
docker build -t "$(DOCKER_DOCS_IMAGE)" -f docs/Dockerfile .
|
60
README.md
|
@ -1,60 +0,0 @@
|
|||
[](https://travis-ci.org/docker/kitematic)
|
||||
|
||||
|
||||
[](https://kitematic.com)
|
||||
|
||||
Kitematic is a simple application for managing Docker containers on Mac, Linux and Windows.
|
||||
|
||||

|
||||
|
||||
## Installing Kitematic
|
||||
|
||||
[Download the latest version](https://docker.com/toolbox) of Kitematic via the Docker Toolbox.
|
||||
|
||||
## Documentation
|
||||
|
||||
Kitematic's documentation and other information can be found at [http://kitematic.com/docs](http://kitematic.com/docs).
|
||||
|
||||
## Security Disclosure
|
||||
|
||||
Security is very important to us. If you have any issue regarding security, please disclose the information responsibly by sending an email to security@docker.com and not by creating a github issue.
|
||||
|
||||
## Bugs and Feature Requests
|
||||
|
||||
Have a bug or a feature request? Please first read the [Issue Guidelines](https://github.com/kitematic/kitematic/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/kitematic/kitematic/issues/new).
|
||||
|
||||
## Roadmap & Contributing
|
||||
|
||||
We welcome all pull requests and contributions that anyone would like to make. The Kitematic team is super happy to support anyone who wants to get involved. Please checkout our [roadmap](ROADMAP.md) that we keep up to date for ideas to help you with contributing. We would love to talk to you about contributing.
|
||||
|
||||
Please read through our [Contributing Guidelines](https://github.com/kitematic/kitematic/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
|
||||
|
||||
## Community
|
||||
|
||||
- [](https://gitter.im/kitematic/kitematic?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
- Ask questions on our [user forum](https://forums.docker.com/c/open-source-projects/kitematic).
|
||||
- **#kitematic** on IRC. [Join the channel](http://webchat.freenode.net/?channels=%23kitematic&uio=d4).
|
||||
- Follow [@kitematic on Twitter](https://twitter.com/kitematic).
|
||||
|
||||
## Uninstalling
|
||||
|
||||
**Mac**
|
||||
|
||||
- Remove Kitematic.app
|
||||
- Remove any unwanted Virtual Machines in VirtualBox
|
||||
```bash
|
||||
# remove app data
|
||||
rm -rf ~/Library/Application\ Support/Kitematic
|
||||
```
|
||||
|
||||
**Windows**
|
||||
|
||||
Open `Programs and Features` from `Control Panel`
|
||||
|
||||
- Uninstall Kitematic
|
||||
- Uninstall Oracle VM VirtualBox
|
||||
|
||||
## Copyright and License
|
||||
|
||||
Code released under the [Apache license](LICENSE).
|
||||
Images are copyrighted by Docker, Inc.
|
46
ROADMAP.md
|
@ -1,46 +0,0 @@
|
|||
## Kitematic Roadmap
|
||||
|
||||
**January 2015**
|
||||
|
||||
* Automatic updates
|
||||
* Stability bug fixes
|
||||
|
||||
**Februay 2015**
|
||||
|
||||
* Docker machine support
|
||||
* Front-end refactor
|
||||
* Starting Unit tests
|
||||
|
||||
**March 2015**
|
||||
|
||||
* Kitematic re-design (container centric workflow)
|
||||
* Docker Hub pull / search for public Docker images
|
||||
|
||||
**April 2015**
|
||||
|
||||
* Custom URL protocol
|
||||
|
||||
**May 2015**
|
||||
|
||||
* Docker Hub - sign-up/sign-in
|
||||
* Allow users to sign-up / sign-in to Docker Hub from Kitematic.
|
||||
* Docker Hub - private repo view if user is logged-in to Docker Hub account
|
||||
|
||||
**June 2015**
|
||||
|
||||
* Microsoft Windows alpha
|
||||
|
||||
**July 2015**
|
||||
|
||||
* Refactor to Flux Architecture
|
||||
* Stability & code quality improvements
|
||||
|
||||
**August 2015**
|
||||
|
||||
* Make Kitematic part of the Docker Toolbox
|
||||
* Stability & code quality improvements
|
||||
|
||||
**September 2015**
|
||||
|
||||
* Better integration with new version of Docker Hub
|
||||
* Stability & code quality improvements
|
|
@ -1,32 +0,0 @@
|
|||
jest.autoMockOff();
|
||||
|
||||
jasmine.getEnv().defaultTimeoutInterval = 60000;
|
||||
|
||||
let hubUtil = require('../src/utils/HubUtil');
|
||||
let Promise = require('bluebird');
|
||||
|
||||
describe('HubUtil Integration Tests', () => {
|
||||
describe('auth', () => {
|
||||
pit('successfully authenticates', () => {
|
||||
return new Promise((resolve) => {
|
||||
hubUtil.auth(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, (error, response, body) => {
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(error).toBe(null);
|
||||
|
||||
let data = JSON.parse(body);
|
||||
expect(data.token).toBeTruthy();
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
pit('provides a 401 if credentials are incorrect', () => {
|
||||
return new Promise((resolve) => {
|
||||
hubUtil.auth(process.env.INTEGRATION_USER, 'incorrectpassword', (error, response) => {
|
||||
expect(response.statusCode).toBe(401);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,62 +0,0 @@
|
|||
jest.autoMockOff();
|
||||
|
||||
jasmine.getEnv().defaultTimeoutInterval = 60000;
|
||||
|
||||
let _ = require('underscore');
|
||||
let regHubUtil = require('../src/utils/RegHubUtil');
|
||||
let hubUtil = require('../src/utils/HubUtil');
|
||||
let Promise = require('bluebird');
|
||||
|
||||
describe('RegHubUtil Integration Tests', () => {
|
||||
describe('with login', () => {
|
||||
pit('lists private repos', () => {
|
||||
return new Promise((resolve) => {
|
||||
hubUtil.login(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, () => {
|
||||
regHubUtil.repos((error, repos) => {
|
||||
expect(_.findWhere(repos, {name: 'test_private', is_private: true})).toBeTruthy();
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
pit('lists tags for a private repo', () => {
|
||||
return new Promise((resolve) => {
|
||||
hubUtil.login(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, () => {
|
||||
regHubUtil.tags(`${process.env.INTEGRATION_USER}/test_private`, (error, tags) => {
|
||||
expect(error).toBeFalsy();
|
||||
expect(tags.length).toEqual(1);
|
||||
expect(tags[0].name).toEqual('latest');
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('public repos', () => {
|
||||
pit('lists repos', () => {
|
||||
return new Promise((resolve) => {
|
||||
hubUtil.login(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, () => {
|
||||
regHubUtil.repos((error, repos) => {
|
||||
expect(_.findWhere(repos, {name: 'test'})).toBeTruthy();
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
pit('lists tags for a repo', () => {
|
||||
return new Promise((resolve) => {
|
||||
hubUtil.login(process.env.INTEGRATION_USER, process.env.INTEGRATION_PASSWORD, () => {
|
||||
regHubUtil.tags(`${process.env.INTEGRATION_USER}/test`, (error, tags) => {
|
||||
expect(error).toBeFalsy();
|
||||
expect(tags.length).toEqual(1);
|
||||
expect(tags[0].name).toEqual('latest');
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,5 +0,0 @@
|
|||
module.exports = {
|
||||
require: jest.genMockFunction(),
|
||||
match: jest.genMockFunction(),
|
||||
on: jest.genMockFunction()
|
||||
};
|
|
@ -1,7 +0,0 @@
|
|||
module.exports = {
|
||||
require: jest.genMockFunction(),
|
||||
match: jest.genMockFunction(),
|
||||
app: jest.genMockFunction(),
|
||||
remote: jest.genMockFunction(),
|
||||
dialog: jest.genMockFunction()
|
||||
};
|
|
@ -1,4 +0,0 @@
|
|||
module.exports = {
|
||||
require: jest.genMockFunction(),
|
||||
match: jest.genMockFunction()
|
||||
};
|
|
@ -1,67 +0,0 @@
|
|||
jest.dontMock('../src/utils/Util').dontMock('console');
|
||||
const util = require('../src/utils/Util');
|
||||
|
||||
describe('Util', () => {
|
||||
describe('when removing sensitive data', () => {
|
||||
it('filters ssh certificate data', () => {
|
||||
var testdata = String.raw`time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=30 -o LogLevel=quiet -p 50483 -i /Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost sudo mkdir -p /var/lib/boot2docker" time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=30 -o LogLevel=quiet -p 50483 -i /Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost echo \"-----BEGIN CERTIFICATE-----\nMIIC+DCCAeKgAwIBAgIRANfIbsa2M94gDY+fBiBiQBkwCwYJKoZIhvcNAQELMBIx\nEDAOBgNVBAoTB2ptb3JnYW4wHhcNMTUwNDE4MDEzODAwWhcNMTgwNDAyMDEzODAw\nWjAPMQ0wCwYDVQQKEwRkZXYyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEA1yamWT0bk0pRU7eiStjiXe2jkzdeI0SdJZo+bjczkl6kzNW/FmR/OkcP8gHX\nCO3fUCWkR/+rBgz3nuM1Sy0BIUo0EMQGfx17OqIJPXO+BrpCHsXlphHmbQl5bE2Y\nF+bAsGc6WCippw/caNnIHRsb6zAZVYX2AHLYY0fwIDAQABo1AwTjAOBgNVHQ8BAf8EBAMCAKAwHQYD\nVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwDwYDVR0R\nBAgwBocEwKhjZTALBgkqhkiG9w0BAQsDggEBAKBdD86+kl4X1VMjgGlNYnc42tWa\nbo1iDl/frxiLkfPSc2McAOm3AqX1ao+ynjqq1XTlBLPTQByu/oNZgA724LRJDfdG\nCKGUV8latW7rB1yhf/SZSmyhNjufuWlgCtbkw7Q/oPddzYuSOdDW8tVok9gMC0vL\naqKCWfVKkCmvGH+8/wPrkYmro/f0uwJ8ee+yrbBPlBE/qE+Lqcfr0YcXEDaS8CmL\nDjWg7KNFpA6M+/tFNQhplbjwRsCt7C4bzQu0aBIG5XH1Jr2HrKlLjWdmluPHWUL6\nX5Vh1bslYJzsSdBNZFWSKShZ+gtRpjtV7NynANDJPQNIRhDxAf4uDY9hA2c=\n-----END CERTIFICATE-----\n\" | sudo tee /var/lib/boot2docker/server.pem"
|
||||
time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: /usr/bin/VBoxManage showvminfo dev2 --machinereadable"`;
|
||||
expect(util.removeSensitiveData(testdata).indexOf('CERTIFICATE')).toEqual(-1);
|
||||
expect(util.removeSensitiveData(testdata).indexOf('nX5Vh1bslYJzsSdBNZFWSKShZ+gtRpjtV7NynANDJPQNIRhDxAf4uDY9hA2c')).toEqual(-1);
|
||||
expect(util.removeSensitiveData(testdata).indexOf('<redacted>')).toNotEqual(-1);
|
||||
});
|
||||
|
||||
it('filters ssh private key data', () => {
|
||||
var testdata = String.raw`hZbuxglOtQv2AQqOp/luhZ3Y8kDs4cqRzoA1o+k+LAyjEb+Nk\nGA8=\n-----END CERTIFICATE-----\n\" | sudo tee /var/lib/boot2docker/ca.pem"
|
||||
time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=30 -o LogLevel=quiet -p 50483 -i /Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost echo \"-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA1yamWT0bk0pRU7eiStjiXe2jkzdeI0SdJZo+bjczkl6kzNW/\nFmR/OkcP8gHXCO3fUCWkR/+rBgz3nuM1Sy0BIUo0EMQGfx17OqIJPXO+BrpCHsXl\nphHmbQl5bE2YF+bAsGc6WCippczQIu5bPweeAkR1WdlkhD08tHD4o1ESe09fXx5G\nXcZFfd2xQWdvAJX3fTuGBk3IMEF2fye5b69zUyVDGbTylyjKDOi9Xxdlc4y9cOPw\nzcwQFCOJiCBYlxDO0fbinA+KigCs29Dd5U3oXbloLr3JQTE/SkxFh9W5rkX8ysY4\n2h3EnR7YIBWt/caNnIHRsb6zAZVYX2AHLYY0fwIDAQABAoIBAQDKF3TTh/G59WnU\n4D2iXnyqy8gFRVG4gP+3TV3s+w8HIr1b5j6akwVqwUs5//5zVbSYPPNF6eJESbPi\nW/s4ROq10VR8lxSfHBsfJQrW3TwWZ6gp7atbxZ6Stv6F+5CsisReLmiAXJmVsn+j\nAA9Xchk6egFcxzWCfV7jAuaZyVI53cclepm/xkGjPwrfXr+nA+UMvO6DllC6IcBF\no4+O0jVtzdMecZnQk6nWxNJjurodTTQakrNAqSMgBshn48wf3N35b+p8RtTzLJ8L\nYuHkv6OKMITIazcHadjsN8icGgIGf2BJ1CRje7j0Yzow8jwY+Pet3yxKSfXED89B\nD34AEXl5AoGBANi17og+yPFOWURUrksO/QyzlOtXcQdQu8SmkUj4ACoqF0gegQIb\nC/DNMcYxJAsPPgw/t5Ws/af8DuatYguGukmekYREVjc7DS/hPWDZzeavPd95cOw0\nuMPgJE76HJ3BSYcp1f8WKcN+xDket9CF6Qz+VX5aQSUEc333V5h7D/nzAoGBAP4o\nVCvQu5eKYmDhMFSOA0+Qm3EECRqMLoH6kpEcbMjM8+kOeI0fUuE3CX8nzs7P4py/\n0IFj2Yxl578NHJOjCpbB1UKtxLkmDH42wXXzrWJXRaWXC93dh1sl0aB6qE25FtSD\nzjYh4y1DA/t6y95YRrIqC2WhIU7eigIoujmtOFJFAoGABSKiiWX7ewRhRyY+jxbG\n1lM3FzCWRBccq/dKgBEoZ9dhf9sBMZyUdttV751gfkaZMM8duZVE2YM2ky7OoPlL\nVs1EI38/D8X9dQIAY1gl8e57J92H2IETU8ju81Qn83EOHf7WzFmpGbHaUoQw1Ocn\nc6BfREQ9QPRPDFAdKkbYRRMCgYEAl44k4xvNQUhb8blWwJUOlFt+1Z26cAI3mXp5\n+94fYH4W1Fq0uDJ9kZ7oItLyF5EPaLlY9E8+YuJBl0OSTtdicROUv/Yu4Nk3ievM\n4TE1qvavqVaw1NRM6qVao3+A7Rf57S/Lv6vldBAKR+OpviSVw5gew7OZ0RYS5caz\nhcEtXKECgYAJb7t67nococm0PsRe8Xv1SQOQjetrhzwzD1PLOSC9TrzwA22/ZktZ\neu/qfvYgOPT4LkDGVCzn8J+TAcUVnIvAnJRQTsBu55uiL8YC5jZQ8E1hBf7kskMq\nh16WD19Djv3WhfBNXBxvnagDDWw5DxmiiKzSf0k3QDDoX7wjDAV1dQ==\n-----END RSA PRIVATE KEY-----\n\" | sudo tee /var/lib/boot2docker/server-key.pem"
|
||||
time="2015-04-17T21:43:47-04:00" level="debug" msg="executing: ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=30 -o LogLevel=quiet -p 50483 -i /Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost echo \"-----BEGIN CERTIFICATE-----\nMIIC+DCCAeKgAwIBAgIRANfIbsa2M94gDY+fBiBiQBkwCwYJKoZIhvcNAQELMBIx\nEDAOBg`;
|
||||
expect(util.removeSensitiveData(testdata).indexOf('PRIVATE')).toEqual(-1);
|
||||
expect(util.removeSensitiveData(testdata).indexOf('94fYH4W1Fq0uDJ9kZ7oItLyF5EPaLlY9E8+YuJBl0OSTtdicROUv')).toEqual(-1);
|
||||
expect(util.removeSensitiveData(testdata).indexOf('<redacted>')).toNotEqual(-1);
|
||||
});
|
||||
|
||||
it('filters username data', () => {
|
||||
var testdata = String.raw`/Users/johnappleseed/.docker/machine/machines/dev2/id_rsa docker@localhost echo`;
|
||||
expect(util.removeSensitiveData(testdata).indexOf('/Users/johnappleseed/')).toEqual(-1);
|
||||
expect(util.removeSensitiveData(testdata).indexOf('/Users/<redacted>/')).toNotEqual(-1);
|
||||
|
||||
testdata = String.raw`/Users/some.wei-rdUsername/.docker/machine/machines/dev2/id_rsa docker@localhost echo`;
|
||||
expect(util.removeSensitiveData(testdata).indexOf('/Users/some.wei-rdUsername/.docker')).toEqual(-1);
|
||||
expect(util.removeSensitiveData(testdata).indexOf('/Users/<redacted>/.docker')).toNotEqual(-1);
|
||||
});
|
||||
|
||||
it('filters Windows username data', () => {
|
||||
var testdata = String.raw`C:\\Users\\johnappleseed\\.docker\\machine`;
|
||||
expect(util.removeSensitiveData(testdata).indexOf('johnappleseed')).toEqual(-1);
|
||||
expect(util.removeSensitiveData(testdata).indexOf('<redacted>')).toNotEqual(-1);
|
||||
});
|
||||
|
||||
it ('returns input if empty or not a string', () => {
|
||||
expect(util.removeSensitiveData('')).toBe('');
|
||||
expect(util.removeSensitiveData(1)).toBe(1);
|
||||
expect(util.removeSensitiveData(undefined)).toBe(undefined);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when verifying that a repo is official', () => {
|
||||
it('accepts official repo', () => {
|
||||
expect(util.isOfficialRepo('redis')).toBe(true);
|
||||
});
|
||||
|
||||
it('rejects falsy value as official repo', () => {
|
||||
expect(util.isOfficialRepo(undefined)).toBe(false);
|
||||
});
|
||||
|
||||
it('rejects empty repo name', () => {
|
||||
expect(util.isOfficialRepo('')).toBe(false);
|
||||
});
|
||||
|
||||
it('rejects repo with non official namespace', () => {
|
||||
expect(util.isOfficialRepo('kitematic/html')).toBe(false);
|
||||
});
|
||||
|
||||
it('rejects repo with a different registry address', () => {
|
||||
expect(util.isOfficialRepo('www.myregistry.com/kitematic/html')).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
16
circle.yml
|
@ -1,16 +0,0 @@
|
|||
machine:
|
||||
xcode:
|
||||
version: "7.0"
|
||||
|
||||
dependencies:
|
||||
cache_directories:
|
||||
- "node_modules"
|
||||
|
||||
deployment:
|
||||
release:
|
||||
tag: /v.*/
|
||||
owner: docker
|
||||
commands:
|
||||
- github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Mac.zip --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Mac.zip
|
||||
- github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Windows.zip --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Windows.zip
|
||||
- github-release upload --user docker --repo kitematic --tag $CIRCLE_TAG --file release/Kitematic-Ubuntu.zip --name Kitematic-$(echo $CIRCLE_TAG | cut -c2-)-Ubuntu.zip
|
|
@ -1,32 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by Fontastic.me</metadata>
|
||||
<defs>
|
||||
<font id="kitematic" horiz-adv-x="512">
|
||||
<font-face font-family="kitematic" units-per-em="512" ascent="480" descent="-32"/>
|
||||
<missing-glyph horiz-adv-x="512" />
|
||||
|
||||
<glyph glyph-name="add" unicode="a" d="M256 0c-7 0-12 5-12 12l0 488c0 7 5 12 12 12 7 0 12-5 12-12l0-488c0-7-5-12-12-12z m244 256l-488 0c-7 0-12 5-12 12 0 8 5 12 12 12l488 0c7 0 12-4 12-12 0-7-5-12-12-12z"/>
|
||||
<glyph glyph-name="badge-private" unicode="e" d="M411 0l-310 0c-19 0-36 15-36 36l0 238c0 20 16 36 36 36l310 0c19 0 36-16 36-36l0-238c0-21-16-36-36-36z m-310 286c-6 0-12-6-12-12l0-238c0-7 5-12 12-12l310 0c6 0 12 6 12 12l0 238c0 7-5 12-12 12z m286 12l-24 0 0 76c0 55-43 114-107 114-64 0-107-59-107-114l0-76-24 0 0 76c0 75 60 138 131 138 71 0 131-63 131-138z m-131-227c-20 0-36 16-36 36l0 36c-14 11-24 28-24 48 0 33 27 59 60 59 33 0 60-26 60-59 0-20-10-37-24-48l0-36c0-20-16-36-36-36z m0 155c-20 0-36-15-36-35 0-14 7-25 18-31l6-4 0-49c0-7 5-12 12-12 7 0 12 5 12 12l0 49 6 4c11 6 18 17 18 31 0 20-16 35-36 35z"/>
|
||||
<glyph glyph-name="restart" unicode="f" d="M156 226c-1 0-1 0 0 0-5 0-7 3-10 5l-36 48c-4 4-4 13 2 16 5 4 13 4 17-2l28-37 37 38c5 5 12 5 17 0 5-5 5-12 0-17l-47-47c-2-3-6-4-8-4z m104-71c-6 0-12 5-12 12 0 7 4 12 12 12 25 1 47 10 64 28 14 16 22 37 21 59-2 46-43 82-91 79-25-1-49-12-65-29-16-18-23-43-21-70 0-7-5-11-11-13-7 0-12 5-13 11-2 33 7 63 27 87 21 23 50 37 81 38 62 2 115-44 117-103 1-28-8-55-28-75-21-22-49-35-81-36 1 0 1 0 0 0z m-4-155c-142 0-256 114-256 256 0 142 114 256 256 256 142 0 256-114 256-256 0-142-114-256-256-256z m0 488c-129 0-232-103-232-232 0-129 103-232 232-232 129 0 232 103 232 232 0 129-103 232-232 232z"/>
|
||||
<glyph glyph-name="browser-view" unicode="g" d="M256 0c-142 0-256 114-256 256 0 142 114 256 256 256 142 0 256-114 256-256 0-142-114-256-256-256z m0 488c-129 0-232-103-232-232 0-129 103-232 232-232 129 0 232 103 232 232 0 129-103 232-232 232z m137-292l-19 0-14 48-14-48-19 0-20 65-20-65-19 0-14 48-13-48-20 0-20 65-20-65-19 0-14 48-13-48-20 0-27 86 23 0 14-49 13 49 19 0 14-49 15 49 31 0 14-49 13 49 19 0 14-49 15 49 31 0 14-49 13 49 19 0 14-49 15 49 22 0z"/>
|
||||
<glyph glyph-name="search" unicode="h" d="M500 0c-3 0-5 1-8 3l-198 198c-4 5-4 12 0 17 5 4 12 4 17 0l198-198c4-5 4-12 0-17-3-2-5-3-9-3z m-320 151c-99 0-180 82-180 181 0 99 81 180 180 180 99 0 181-81 181-180 0-99-82-181-181-181z m0 338c-86 0-157-71-157-157 0-86 71-157 157-157 86 0 157 71 157 157 0 86-71 157-157 157z"/>
|
||||
<glyph glyph-name="start" unicode="i" d="M256 0c-142 0-256 114-256 256 0 142 114 256 256 256 142 0 256-114 256-256 0-142-114-256-256-256z m0 488c-129 0-232-103-232-232 0-129 103-232 232-232 129 0 232 103 232 232 0 129-103 232-232 232z m-52-337c-15 0-25 11-25 28l0 142c0 16 9 28 25 28 4 0 9-1 14-4l148-74c9-4 15-13 15-21 0-8-6-17-15-21l-148-74c-6-3-11-4-14-4z m0 174c0 0-2-1-2-4l0-142c0-3 0-4 2-4 0 0 1 0 3 1l148 74-148 74c-2 1-3 1-3 1z"/>
|
||||
<glyph glyph-name="delete" unicode="j" d="M27 18c-4 0-8 1-11 4-6 6-6 14 0 21l445 444c6 7 15 7 21 0 6-6 6-14 0-20l-445-445c-2-2-6-4-10-4z m457-2c-4 0-7 1-10 4l-445 445c-6 6-6 14 0 20 6 7 14 7 20 0l445-444c6-7 6-15 0-21-2-2-6-4-10-4z"/>
|
||||
<glyph glyph-name="stop" unicode="l" d="M321 155l-130 0c-21 0-36 15-36 36l0 130c0 21 15 36 36 36l130 0c21 0 36-15 36-36l0-130c0-21-15-36-36-36z m-130 178c-8 0-12-4-12-12l0-130c0-8 4-12 12-12l130 0c8 0 12 4 12 12l0 130c0 8-4 12-12 12z m65-333c-142 0-256 114-256 256 0 142 114 256 256 256 142 0 256-114 256-256 0-142-114-256-256-256z m0 488c-129 0-232-103-232-232 0-129 103-232 232-232 129 0 232 103 232 232 0 129-103 232-232 232z"/>
|
||||
<glyph glyph-name="tag" unicode="m" d="M315 9c-4 0-7 1-9 3l-302 306c-3 3-4 5-4 9l0 173c0 7 5 12 12 12l173 0c4 0 6-1 9-4l306-302c2-2 5-7 3-12-1-4-3-7-8-9l-129-39-39-129c-2-4-5-7-9-8-1 0-2 0-3 0z m-291 323l284-288 36 116c1 3 3 7 8 8l116 36-288 284-156 0z m95 7c-29 0-53 24-53 54 0 29 24 53 53 53 30 0 54-24 54-53 0-30-24-54-54-54z m0 83c-15 0-29-14-29-29 0-16 14-30 29-30 16 0 30 14 30 30 0 15-14 29-30 29z"/>
|
||||
<glyph glyph-name="expand" unicode="q" d="M300 287c-4 0-7 1-9 4-5 5-5 12 0 17l200 200c5 5 12 5 17 0 5-5 5-12 0-17l-200-200c-2-3-5-4-8-4z m-275-275c-4 0-6 2-9 4-5 5-5 13 0 18l200 200c5 5 13 5 18 0 5-5 5-13 0-18l-200-200c-3-2-5-4-9-4z m475 338c-8 0-13 5-13 12l0 125-125 0c-7 0-12 5-12 13 0 7 5 12 12 12l138 0c7 0 12-5 12-12l0-138c0-7-5-12-12-12z m-350-350l-138 0c-7 0-12 5-12 12l0 138c0 7 5 12 12 12 8 0 13-5 13-12l0-125 125 0c7 0 12-5 12-13 0-7-5-12-12-12z"/>
|
||||
<glyph glyph-name="favorite" unicode="r" d="M256 23c-2 0-5 1-7 3-10 7-249 181-249 317 0 91 67 146 133 146 43 0 95-26 123-93 28 67 80 93 123 93 66 0 133-55 133-146 0-135-239-309-249-317-2-2-5-3-7-3z m-123 442c-54 0-110-45-110-122 0-111 193-264 233-293 40 29 233 182 233 293 0 77-56 122-110 122-53 0-95-40-111-110-2-5-6-9-12-9-6 0-10 3-12 9-16 70-58 110-111 110z"/>
|
||||
<glyph glyph-name="feedback" unicode="s" d="M29 6c-4 0-6 1-9 4-3 3-5 9-2 14l55 107c-47 42-73 98-73 154 0 122 114 222 256 222 142 0 256-100 256-222 0-123-114-223-256-223-32 0-61 7-83 14l-140-69c-1-1-3-1-4-1z m227 476c-129 0-232-89-232-199 0-51 26-103 71-141 5-4 6-10 3-15l-43-83 111 55c2 1 5 1 9 1 21-7 50-14 81-14 129 0 232 89 232 199 0 108-103 197-232 197z m-115-119l219 0 0-24-219 0z m0-59l219 0 0-24-219 0z m0-60l219 0 0-24-219 0z"/>
|
||||
<glyph glyph-name="link" unicode="t" d="M162 214c-13 0-24 5-33 15l-109 108c-13 13-20 30-20 48 0 17 7 34 20 47l61 61c13 13 30 20 48 20 17 0 34-7 47-20l109-108c10-11 15-25 13-41-3-14-10-28-23-40-5-5-12-5-17 0-4 4-4 12 0 16 10 10 15 19 16 28 1 8-1 14-7 20l-109 108c-16 17-45 17-62 0l-60-60c-9-9-13-19-13-31 0-12 4-23 13-31l108-109c6-6 12-8 20-7 9 1 19 7 28 16 4 4 12 4 16 0 5-5 5-12 0-17-13-13-27-20-41-23 0 0-3 0-5 0z m221-214c-17 0-34 7-47 20l-107 109c-22 21-18 54 9 81 5 4 12 4 17 0 5-5 5-12 0-17-14-14-24-33-10-48l107-108c9-8 19-13 31-13 12 0 23 5 31 13l62 62c9 8 13 19 13 31 0 12-4 22-13 31l-108 107c-14 14-35 5-48-10-4-4-12-4-16 0-5 5-5 12 0 17 27 27 59 31 81 10l108-108c13-13 20-29 20-47 0-18-7-35-19-48l-62-62c-14-13-31-20-49-20z m-26 143c-3 0-6 1-8 3l-191 191c-4 5-4 12 0 17 5 4 12 4 17 0l191-191c4-5 4-12 0-17-3-2-5-3-9-3z"/>
|
||||
<glyph glyph-name="more" unicode="u" d="M70 186c-39 0-70 32-70 70 0 38 31 70 70 70 38 0 70-32 70-70 0-38-32-70-70-70z m0 117c-26 0-47-21-47-47 0-26 21-47 47-47 25 0 46 21 46 47 0 26-21 47-46 47z m186-117c-38 0-70 32-70 70 0 38 32 70 70 70 38 0 70-32 70-70 0-38-32-70-70-70z m0 117c-26 0-47-21-47-47 0-26 21-47 47-47 26 0 47 21 47 47 0 26-21 47-47 47z m186-117c-38 0-70 32-70 70 0 38 32 70 70 70 39 0 70-32 70-70 0-38-31-70-70-70z m0 117c-25 0-46-21-46-47 0-26 21-47 46-47 26 0 47 21 47 47 0 26-21 47-47 47z"/>
|
||||
<glyph glyph-name="preferences" unicode="v" d="M297 0l-84 0c-7 0-12 5-12 12l0 61c-2 1-5 3-8 3-9 3-20 7-30 11l-42-43c-5-5-13-5-17 0l-60 60c-3 2-4 4-4 8 0 4 1 6 4 9l43 42c-8 15-14 34-18 54l-58 0c-7 0-12 5-12 12l0 67c0 8 5 12 12 12l60 0c3 11 9 26 16 38l-43 43c-5 5-5 12 0 17l60 60c4 5 12 5 17 0l42-43c13 6 27 12 38 16l0 61c0 7 5 12 12 12l84 0c8 0 13-5 13-12l0-60c11-4 25-8 37-16l43 43c5 5 12 5 17 0l60-60c2-2 4-5 4-8 0-4-2-6-4-9l-43-43c6-12 11-24 16-37l60 0c7 0 12-5 12-13l0-67c0-7-5-12-12-12l-59 0c-3-29-9-42-17-55l42-41c5-5 5-12 0-17l-60-60c-5-5-12-5-17 0l-43 43c-10-5-19-9-29-11-2-1-6-3-9-3l0-61c2-8-3-13-11-13z m-70 24l59 0 0 56c0 5 3 9 7 11 3 3 9 5 18 8 11 3 24 8 33 13 5 3 11 3 14-1l41-40 42 42-40 41c-4 3-5 9-1 14l1 1c9 15 15 25 18 63 2 6 6 11 13 11l56 0 0 42-56 0c-7 0-11 4-13 10-3 17-11 34-19 49-3 5-3 11 1 14l40 41-42 42-41-40c-3-4-9-5-14-1-15 8-40 18-48 19-6 2-10 6-10 13l0 56-59 0 0-56c0-7-4-11-10-13-10-2-34-11-48-19-4-3-11-3-14 1l-40 40-43-42 40-41c4-3 5-9 1-14-8-15-17-39-19-49-1-5-6-10-12-10l-56 0 0-42 56 0c6 0 11-5 12-11 4-25 11-50 19-64 3-5 3-11-1-14l-40-41 43-42 40 40c3 4 10 5 14 1 9-5 22-10 33-13 8-3 15-5 19-8 3-2 6-6 6-11z m29 122c-61 0-110 49-110 110 0 61 49 110 110 110 61 0 110-49 110-110 0-61-49-110-110-110z m0 195c-48 0-85-37-85-85 0-48 37-85 85-85 48 0 85 37 85 85 0 48-37 85-85 85z"/>
|
||||
<glyph glyph-name="badge-official" unicode="c" d="M252 512c8 0 14 0 21 0 0 0 1 0 1 0 9 0 19-2 28-4 33-7 61-22 85-47 25-28 38-60 37-97-1-19-6-38-16-54-15-30-39-52-69-66-4-2-10-5-15-7 33-76 68-152 101-229-1 0-1 0-2 2-55 30-110 63-165 94-1 1-2 1-3 0-55-31-111-64-166-94 0 0-1-2-1-2 0 0 0 0 0 2 0 1 1 1 1 2 34 74 67 149 99 223 1 2 3 4 4 8-1 0-1 0-1 1-24 11-43 25-60 45-23 29-32 62-27 98 2 24 11 45 26 63 30 38 69 57 116 62 2-1 4 0 6 0z m16-24c-24 0-42-2-58-9-28-11-52-28-67-53-17-26-22-53-14-83 6-25 20-45 39-61 24-19 51-30 82-32 23-2 44 1 64 8 28 10 52 27 67 52 18 27 23 58 13 90-8 25-24 45-45 61-25 18-55 26-81 27z m105-424c-24 55-49 111-73 166-29-6-57-5-86 2-25-56-50-112-75-168 2 0 2 0 2 0 38 22 75 43 113 65 1 1 2 1 3 0 26-16 53-30 79-46 13-4 25-12 37-19z m-113 222c-29 0-52 8-72 25-14 13-24 28-26 47-2 19 1 37 12 53 13 20 31 32 53 38 30 8 59 5 86-12 18-11 30-26 36-46 7-27 2-49-14-70-15-17-35-28-58-33-7-2-14-2-17-2z m-4 24c2 0 4 0 6 0 1 0 2 0 4 0 17 2 34 8 46 21 14 14 19 32 13 51-5 16-14 26-27 34-19 11-41 14-63 9-16-3-30-12-40-25-9-12-13-26-10-40 2-15 9-25 20-34 15-12 33-16 51-16z"/>
|
||||
<glyph glyph-name="docker-cli" unicode="d" d="M0 274c0 5 0 11 0 16 0 0 0 0 0 2 0 4 1 8 1 13 0 3 1 7 1 12 17 0 34 0 50 0 0 28 0 55 0 83 28 0 56 0 84 0 0 1 0 1 0 2 0 26 0 54 0 80 0 1 0 1 0 2 34 0 70 0 104 0 0 0 0 0 0-1 0-27 0-55 0-82 0 0 0-1 0-1 29 0 56 0 84 0 0-28 0-55 0-83 16-1 31 1 46 7-1 3-2 6-3 9-4 13-5 25-3 39 1 9 3 18 7 26 3 6 7 12 11 17 3 3 5 5 8 8 5-4 9-8 14-12 12-10 21-21 28-35 2-4 3-7 4-11 0 0 0 0 1 0 5 0 11 1 16 1 11 0 21-2 31-8 7-3 13-8 20-11-2-5-6-11-8-16-6-11-13-21-25-28-14-9-30-13-47-14-1 0-2 0-2-1-5-11-10-23-17-33 0 0 0-1-1-2 1 0 1 0 2 0 21 0 43 0 64 0 17 0 32-14 32-31 0-60 0-120 0-179 0-14-10-26-23-30-3-2-5-2-7-2-81 0-164 0-245 0 0 0 0 0-1 0-17 3-29 15-29 32 0 27 0 54 0 82 0 1 0 1 0 2-8 0-15-1-23-1-18 0-38 1-57 7-31 7-57 23-79 46-10 9-17 21-23 32-10 19-15 38-16 59 2 0 1 2 1 4z m350-44c-40 0-79 0-119 0-6 0-12-4-12-12 0-58 0-117 0-175 0-7 5-12 12-12 79 0 159 0 238 0 7 0 12 6 12 12 0 58 0 117 0 175 0 8-5 12-12 12-40 0-79 0-119 0z m50 86c-3-3-6-5-8-6-16-9-33-14-51-15-10-1-19 0-29 0-96 0-192 0-288 0-1 0-1 0-2 0 0-1 0-1 0-1-1-12 0-23 1-34 2-14 6-29 14-42 9-16 22-31 37-42 24-18 52-27 82-28 10-1 21 0 30 0 4 0 8 0 11 1 0 1 0 1 0 3 0 22 0 45 0 70 0 17 14 31 32 31 49 0 99 0 148 0 1 0 2 0 3 1 11 17 19 33 26 52 2 1 2 4 3 4 1 1 3 0 5 0 8-1 16 0 25 1 12 2 23 8 31 17 2 3 5 6 6 10 0 0-1 0-1 1-7 4-14 5-23 6-9 0-17-1-27-4-2-1-5-2-8-2-1 10-2 20-7 31-6 9-12 18-20 25-1-3-3-5-4-7-4-7-5-14-5-21 0-8 0-14 2-20 5-15 11-23 17-31z m-264 0c0 20 0 41 0 62-21 0-42 0-63 0 0-21 0-42 0-62 21 0 42 0 63 0z m21 0c21 0 42 0 62 0 0 20 0 41 0 62-20 0-41 0-62 0 0-21 0-42 0-62z m62 146c-20 0-41 0-62 0 0-21 0-42 0-63 21 0 42 0 62 0 0 21 0 42 0 63z m84-84c-21 0-42 0-63 0 0-21 0-42 0-62 21 0 42 0 63 0 0 20 0 41 0 62z m7-247c-5 6-10 12-15 18-3 5-7 8-10 12-4 4-3 11 1 15 4 4 12 3 15-2 10-12 21-25 31-36 2-2 3-4 6-6-4-5-7-8-10-12-9-10-18-21-27-31-4-5-12-5-16 0-3 4-4 9 0 13 8 9 15 17 22 27 1-2 2 0 3 2z m71-48c-8 0-16 0-26 0-4 0-7 2-9 6-2 4-1 7 1 10 2 3 5 4 8 4 18 0 35 0 53 0 6 0 10-4 10-10 0-6-4-10-10-10-9 0-17 0-27 0z m-235 142c0-20-15-37-34-38-21-1-38 15-39 36-1 20 16 36 35 37 21 2 37-13 38-35z m-36-16c8 0 15 7 15 16 0 8-7 15-15 15-9 0-16-7-16-15 0-10 7-16 16-16z"/>
|
||||
<glyph glyph-name="docker-exec" unicode="k" d="M256 0c-141 0-256 115-256 256 0 141 115 256 256 256 141 0 256-115 256-256 0-141-115-256-256-256z m0 488c-128 0-232-104-232-232 0-128 104-232 232-232 128 0 232 104 232 232 0 128-104 232-232 232z m98-306l-110 0c-8 0-12 5-12 12 0 7 4 12 12 12l110 0c7 0 12-5 12-12 0-7-5-12-12-12z m-220 1c-2 0-6 1-8 4-5 4-5 12-2 17l54 58-54 59c-5 4-3 12 2 17 4 5 12 3 17-2l68-75-68-76c-3-1-5-2-9-2z"/>
|
||||
<glyph glyph-name="user" unicode="n" d="M245 512c7 0 15 0 23 0 0 0 1 0 1 0 11-1 20-1 31-4 36-6 69-19 100-40 37-25 66-57 85-97 15-32 25-65 27-101 1-22 0-45-5-68-7-32-20-63-38-90-25-36-57-64-96-85-32-16-66-25-102-27-23-1-47 0-71 6-51 12-95 37-131 76-25 28-43 57-55 93-7 20-10 42-12 63 0 3 0 5-1 7 0 7 0 15 0 23 0 0 0 1 0 1 1 13 3 26 5 39 11 49 33 92 69 128 21 21 45 38 71 51 31 14 64 23 98 25 0-1 1 0 1 0z m-62-319c-19 19-28 42-28 69 0 27 11 50 30 68 34 33 88 34 126 5 19-16 30-36 33-60 5-30-3-56-23-79 49-29 73-72 72-129 67 46 113 140 88 243-25 103-121 181-235 176-108-5-198-84-219-191-9-52-2-103 24-151 17-31 39-57 68-79-1 56 20 98 64 128z m48-4c-6-2-12-6-18-8-18-7-32-18-44-33-21-27-28-58-24-91 1-6 1-6 7-9 43-22 90-29 137-23 27 4 53 12 77 25 1 0 1 1 2 2 5 22 3 42-4 62-10 29-29 50-57 65-8 3-16 6-24 9-2 1-4 1-7 3 3 1 4 2 6 3 7 6 16 11 22 17 15 16 21 35 19 57-3 17-10 32-22 44-16 15-35 21-57 19-17-2-32-10-44-21-15-17-23-37-19-61 4-22 14-38 33-50 5-1 11-6 17-10z"/>
|
||||
<glyph glyph-name="open-external" unicode="b" d="M4 436c1 0 1 0 3 0 78 0 157 0 236 0 1 0 1 0 2 0 0-9 0-17 0-26-72 0-143 0-215 0 0-126 0-254 0-380 126 0 254 0 380 0 0 67 0 135 0 202 9 0 17 0 26 0 0-1 0-1 0-2 0-75 0-150 0-225 0-1 0-1 0-2-145 0-289 0-432 0 0 144 0 288 0 433z m508-116c0-1 0-2-1-4-3-5-8-9-15-7-6 1-10 6-10 13 0 47 0 95 0 143 0 1 0 1 0 2-2-1-2-1-3-1-80-80-161-161-241-242-7-6-18-5-21 3-3 5-2 11 2 15 0 0 1 1 1 1 81 80 161 160 241 240 0 0 1 1 1 1-1 0-1 0-3 0-47 0-94 0-141 0-7 0-12 3-13 10-3 6 1 14 7 17 0 0 2 0 2 1 60 0 122 0 182 0 4-1 7-3 9-7 2-1 2-4 2-5 1-60 1-121 1-180z m0 179c0 1-1 4-1 5-2 4-6 5-10 7 4 0 8 0 11 0 0-3 0-7 0-12z"/>
|
||||
<glyph glyph-name="edit" unicode="o" d="M11 436c1 0 1 0 2 0 78 0 155 0 232 0 2 0 2 0 3 0 0-9 0-17 0-26-71 0-142 0-211 0 0-125 0-250 0-375 124 0 249 0 374 0 0 71 0 142 0 212 9 0 17 0 26 0 0-2 0-2 0-3 0-79 0-156 0-235 0 0 0-1 0-1-142 0-285 0-426 0 0 144 0 286 0 428z m501 0c-1-4-4-7-7-9-53-54-107-108-162-162-2-1-4-4-7-4-31-12-64-25-96-37-5-2-10-1-14 3-4 4-5 9-3 15 12 31 25 64 37 95 1 3 3 6 4 7 54 54 108 108 163 163 2 2 5 5 9 6 1 0 2 0 4 0 4-1 6-4 9-6 18-19 37-37 55-55 3-3 5-6 7-10 1-4 1-5 1-6z m-177-142c35 36 71 71 106 106-13 14-27 28-41 41-35-35-70-71-106-106 13-15 28-28 41-41z m126 125c6 6 13 13 19 19-13 14-27 28-40 41-7-6-13-13-20-20 13-13 26-27 41-40z m-150-141c-10 11-21 21-33 33-6-17-13-34-19-52 18 6 35 13 52 19z"/>
|
||||
<glyph glyph-name="download" unicode="p" d="M256 512c-39 0-70-32-70-71l0-236 20 9-59 59c-23 23-60 23-83 0-23-24-23-61 0-84l184-186c4-4 12-4 16 0l184 186c23 23 23 60 0 84-23 23-60 23-83 0l-59-59 20-9 0 236c0 39-31 71-70 71z m0-23c26 0 47-21 47-48l0-236c0-10 12-15 20-8l58 59c14 14 37 14 51 0 14-14 14-37 0-51l-184-185 16 0-184 185c-14 14-14 37 0 51 14 14 37 14 51 0l58-59c8-7 20-2 20 8l0 236c0 27 21 48 47 48z"/>
|
||||
</font></defs></svg>
|
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 46 KiB |
BIN
images/close.png
Before Width: | Height: | Size: 209 B |
Before Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 206 KiB |
Before Width: | Height: | Size: 568 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 163 B |
Before Width: | Height: | Size: 215 B |
Before Width: | Height: | Size: 158 B |
Before Width: | Height: | Size: 228 B |
Before Width: | Height: | Size: 208 B |
Before Width: | Height: | Size: 412 B |
Before Width: | Height: | Size: 272 B |
Before Width: | Height: | Size: 563 B |
Before Width: | Height: | Size: 410 B |
Before Width: | Height: | Size: 852 B |
Before Width: | Height: | Size: 618 B |
Before Width: | Height: | Size: 1.3 KiB |
BIN
images/error.png
Before Width: | Height: | Size: 584 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 899 B |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 734 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 196 B |
Before Width: | Height: | Size: 261 B |
Before Width: | Height: | Size: 193 B |
Before Width: | Height: | Size: 322 B |
Before Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 243 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 530 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 807 B |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 597 B |
Before Width: | Height: | Size: 667 B |
BIN
images/logo.png
Before Width: | Height: | Size: 593 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 101 B |
Before Width: | Height: | Size: 117 B |
Before Width: | Height: | Size: 609 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 705 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 456 B |
Before Width: | Height: | Size: 824 B |
Before Width: | Height: | Size: 641 B |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 359 B |
Before Width: | Height: | Size: 731 B |
Before Width: | Height: | Size: 555 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 252 B |
Before Width: | Height: | Size: 461 B |
Before Width: | Height: | Size: 356 B |
Before Width: | Height: | Size: 657 B |
Before Width: | Height: | Size: 349 B |
Before Width: | Height: | Size: 729 B |