diff --git a/CHANGELOG b/CHANGELOG deleted file mode 100644 index d231c24b45..0000000000 --- a/CHANGELOG +++ /dev/null @@ -1,1130 +0,0 @@ -### 1.12.1-beta27 "Beta27" (unreleased) - -* Upgrades - - Docker 1.12.2-rc1 - - Docker Machine 0.8.2 - - Docker compose 1.8.1 - - Kernel vsock driver v7 - - Kernel 4.4.21 - - aufs 20160912 - -* Bug fixes and minor changes - - Fix an issue where some windows did not claim focus correctly (#5221,#5314) - - Add UI when switching channel to prevent user losing containers and settings (#5253) - - Check disk capacity before toolbox import (#5165) - - Import certificates in etc/ssl/certs/ca-certificates.crt (#5239) - - DNS: reduce the number of UDP sockets consumed on the host - - VPNkit: improve the connection-limiting code to avoid running out of sockets on the host - - UDP: handle diagrams bigger than 2035, up to the configured macOS kernel limit - - UDP: make the forwarding more robust; drop packets and continue rather than stopping - - disk: make the "flush" behaviour configurable for database-like workloads. This works around a performance regression in 1.12.1. - -### 1.12.1-beta26 "Beta26" - -* New - - Improved support for macOS 10.12 Sierra - -* Upgrades - - Linux kernel 4.4.20 - - aufs 20160905 - -* Bug fixes and minor changes - - Fix communications glitch when UI talks to com.docker.vmnetd (#5115) - Fixes https://github.com/docker/for-mac/issues/90 - - UI fix for macOs 10.12 (#5152) - - Windows open on top of full screen app are available in all spaces (#5136) - - Reporting a bug, while not previously logged into github now works. (#5110) - - When a diagnostic upload fails, the error is properly reported (#5116) - - docker-diagnose: display and record the time the diagnosis was captured (#5075) - - Allow ports to be bound on host addresses other than 0.0.0.0 and 127.0.0.1 (moby/#482) - Fixes issue reported in https://github.com/docker/for-mac/issues/68 - - Don't compute the container folder in com.docker.vmnetd (#5066) - Fixes https://github.com/docker/for-mac/issues/47 - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - - There are a number of issues with the performance of - directories bind-mounted with `osxfs`. In particular, writes of - small blocks and traversals of large directories are currently - slow. Additionally, containers that perform large numbers of - directory operations, such as repeated scans of large directory - trees, may suffer from poor performance. More information is - available in the Known Issues section of the documentation at - https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues - - Under some unhandled error conditions, inotify event delivery can - fail and become permanently disabled. - The workaround is to restart Docker.app (#2181) - -### 2016-09-07 1.12.1-beta25 "Beta25" - -* Upgrades - - Experimental support for OSX 10.12 Sierra (beta) - -* Bug fixes and minor changes - - VPNKit supports search domains (#4974) - - Entries from /etc/hosts should now resolve from within containers - - osxfs: fix thread leak (#4933) - -* Known issues - - Several problems have been reported on macOS 10.12 Sierra and are being - investigated. This includes failure to launch the app and being unable - to upgrade to a new version. - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - - There are a number of issues with the performance of - directories bind-mounted with `osxfs`. In particular, writes of - small blocks and traversals of large directories are currently - slow. Additionally, containers that perform large numbers of - directory operations, such as repeated scans of large directory - trees, may suffer from poor performance. More information is - available in the Known Issues section of the documentation at - https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues - - Under some unhandled error conditions, inotify event delivery can - fail and become permanently disabled. - The workaround is to restart Docker.app (#2181) - -### 2016-08-31 1.12.1-beta24.1 "Beta24.1" - -* Hotfixes - - Fix regression in UI when changing memory/cpu settings - -### 2016-08-30 1.12.1-beta24 "Beta24" - -* Upgrades - - Docker 1.12.1 - - Docker machine 0.8.1 - - Linux kernel 4.4.19 - - aufs 20160822 - -* Bug fixes and minor changes - - osxfs: fixed a malfunction of new directories that have the same - name as an old directory that is still open (#4532) - - osxfs: rename events now trigger DELETE and/or MODIFY inotify - events (saving with TextEdit works now) (#4498) - - slirp: support up to 8 external DNS servers - - slirp: reduce the number of sockets used by UDP NAT, reduce the - probability that NAT rules will time out earlier than expected (#4826) - - Warn the user if BlueStacks is installed (potential kernel panic) (#4661) - -* Known issues - - Several problems have been reported on macOS 10.12 Sierra and are being - investigated. This includes failure to launch the app and being unable - to upgrade to a new version. - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - - There are a number of issues with the performance of - directories bind-mounted with `osxfs`. In particular, writes of - small blocks and traversals of large directories are currently - slow. Additionally, containers that perform large numbers of - directory operations, such as repeated scans of large directory - trees, may suffer from poor performance. More information is - available in the Known Issues section of the documentation at - https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues - - Under some unhandled error conditions, inotify event delivery can - fail and become permanently disabled. - The workaround is to restart Docker.app (#2181) - -### 2016-08-16 1.12.1-rc1-beta23 "Beta23" - -* Upgrades - - Docker 1.12.1-rc1 - - Linux kernel 4.4.17 - - aufs 20160808 - -* Bug fixes and minor changes - - Automatic update interval changed from 1 hour to 24 hours (#4822) - - Moby: use default sysfs settings, transparent huge pages disabled (#4815) - - Moby: cgroup mount to support systemd in containers (#4789) - - osxfs: fix an issue that caused inotify failure and crashes (#4799) - - osxfs: fix a directory fd leak (#4533) - - Zsh completions (#4785) - -* Known issues - - Several problems have been reported on macOS 10.12 Sierra and are being - investigated. This includes failure to launch the app and being unable - to upgrade to a new version. - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart Docker.app (#1224) - - There are a number of issues with the performance of - directories bind-mounted with `osxfs`. In particular, writes of - small blocks and traversals of large directories are currently - slow. Additionally, containers that perform large numbers of - directory operations, such as repeated scans of large directory - trees, may suffer from poor performance. More information is - available in the Known Issues section of the documentation at - https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues - - Under some unhandled error conditions, inotify event delivery can - fail and become permanently disabled. - The workaround is to restart Docker.app (#2181) - -### 2015-08-11 1.12.0-beta22 "Beta22" - -* New - -* Upgrades - - Linux kernel to 4.4.16 - -* Bug fixes and minor changes - - Increase Moby fs.file-max to 524288 - - Increase Moby fs.file-max to 524288 - - Use Mac System Configuration database to detect DNS (#4649) - - HyperKit updated with dtrace support and lock fixes - - Fix Moby Diagnostics and Update Kernel (#4636) - - UI Fixes (#4538) - - osxfs: fix socket chowns (#4743) - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart Docker.app (#1224) - - There are a number of issues with the performance of - directories bind-mounted with `osxfs`. In particular, writes of - small blocks and traversals of large directories are currently - slow. Additionally, containers that perform large numbers of - directory operations, such as repeated scans of large directory - trees, may suffer from poor performance. More information is - available in the Known Issues section of the documentation at - https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues - - - Under some unhandled error conditions, inotify event delivery can - fail and become permanently disabled. - The workaround is to restart Docker.app (#2181) - -### 2016-08-03 1.12.0-beta21.1 "Beta21.1" - -* Hotfixes - - osxfs: fixed an issue causing access to children of renamed - directories to fail (symptoms: npm failures, apt-get failures) - (docker/for-mac#53 #74 #76) - - osxfs: fixed an issue causing some ATTRIB and CREATE inotify - events to fail delivery and other inotify events to stop (#4650 #4652) - - osxfs: fixed an issue causing all inotify events to stop when an - ancestor directory of a mounted directory was mounted (#4635) - - osxfs: fixed an issue causing volumes mounted under other mounts - to spontaneously unmount (docker/docker#24503) - -### 2016-07-28 1.12.0-beta21 "Beta21" - -* New - - Docker for Mac is now available from 2 channels - stable and beta. - New features and bug fixes will go out first in auto-updates to users - in the beta channel. Updates to the stable channel are much less - frequent and happen in sync with major and minor releases of the Docker - engine. Only features that are well-tested and ready for production are - added to the stable channel releases. You can download Docker for Mac - stable at https://download.docker.com/mac/stable/Docker.dmg - -* Upgrades - - docker 1.12.0 with experimental features - - docker machine 0.8.0 - - docker compose 1.8.0 - -* Bug fixes and minor changes - - Check for updates, auto-update and diagnose can be run by non-admin users (#4441) - - osxfs: fixed an issue causing occasional incorrect short reads (#3876) - - osxfs: fixed an issue causing occasional EIO errors (#3876) - - osxfs: fixed an issue causing inotify creation events to fail (#3876) - - osxfs: increased the fs.inotify.max_user_watches limit in Moby to 524288 - - The UI shows documentation link for sharing volumes (#4482) - - Improved error when running with outdated Virtualbox version (#4450) - - Added link to sources for qemu-img (#4503) - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart Docker.app (#1224) - - There are a number of issues with the performance of - directories bind-mounted with `osxfs`. In particular, writes of - small blocks and traversals of large directories are currently - slow. Additionally, containers that perform large numbers of - directory operations, such as repeated scans of large directory - trees, may suffer from poor performance. More information is - available in the Known Issues section of the documentation at - https://docs.docker.com/docker-for-mac/troubleshoot/#known-issues - - - Under some unhandled error conditions, inotify event delivery can - fail and become permanently disabled. - The workaround is to restart Docker.app (#2181) - -### 2016-07-19 1.12.0-rc4-beta20 "Beta20" - -* New - -* Upgrades - -* Bug fixes and minor changes - - Fix docker.sock permission issues (#3919) - - Don't check for update when the settings panel opens (#4431) - - Remove obsolete DNS workaround (#4432) - - Use the secondary DNS server in more circumstances (#4429) - - Limit the number of concurrent port forwards to avoid running out of resources (#4429) - - Store the database as a "bare" git repo to avoid corruption problems (#4236) - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart Docker.app (#1224) - -### 2016-07-14 1.12.0-rc4-beta19 "Beta19" - -* New - - Add privacy tab in settings (#4190) - - Allow the definition of HTTP proxy overrides in the UI (#3517, #4303) - -* Upgrades - - Docker 1.12.0 RC4 - - Docker Compose 1.8.0 RC2 - - Docker Machine 0.8.0 RC2 - - Linux kernel 4.4.15 - -* Bug fixes and minor changes - - filesystem sharing permissions can only be configured in the UI (no more `/Mac` in moby) (#4312) - - com.docker.osx.xhyve.hyperkit: increase max number of fds to 10240 (#4232) - - Improve Moby syslog facilities (#4261) - - Improve file-sharing tab (#4252) - - com.docker.slirp: include the DNS TCP fallback fix, required when UDP responses are truncated (docker/vpnkit#72) - - docker build/events/logs/stats... won't leak when iterrupted with Ctrl-C (#3628) - -### 2016-07-07 1.12.0-rc3-beta18.1 "Beta-18.1" - -NOTE: Docker 1.12.0 RC3 release introduces a backward incompatible change from RC2, -See https://github.com/docker/docker/issues/24343#issuecomment-230623542 for more details. - -Fix for the above can be found at: https://docs.docker.com/docker-for-mac/troubleshoot/#/recreate-or-update-your-containers-after-beta-18-upgrade - -* Hotfix - - Fix issue resulting in error "Hijack is incompatible with use of CloseNotifier", reverts previous fix for "Ctrl-C" during build. - -* New - - New host/container file sharing UI (#4193, #4191) - - /Mac bind mount prefix is deprecated and will be removed soon - -* Upgrades - - Docker 1.12.0 RC3 (#4199, #4177) - -* Bug fixes and minor changes - - VPNKit: Improved scalability as number of network connections increases (#4173) - - The docker API proxy was failing to deal with some 1.12 features (e.g. health check) - -* Known issues - - See https://docs.docker.com/docker-for-mac/troubleshoot/ - -### 2016-07-06 1.12.0-rc3-beta18 "Beta-18" - -* New - - New host/container file sharing UI (#4193, #4191) - - /Mac bind mount prefix is deprecated and will be removed soon - -* Upgrades - - Docker 1.12.0 RC3 (#4199, #4177) - -* Bug fixes and minor changes - - VPNKit: Improved scalability as number of network connections increases (#4173) - - Interrupting a `docker build` with Ctrl-C will actually stop the build - - The docker API proxy was failing to deal with some 1.12 features (e.g. health check) - -* Known issues - - See https://docs.docker.com/docker-for-mac/troubleshoot/ - -### 2016-06-29 1.12.0-rc2-beta17 "Beta-17" - -* Upgrades - - Linux kernel 4.4.14, aufs 20160627 (#4133) - -* Bug fixes and minor changes - - Documentation moved to https://docs.docker.com/docker-for-mac/ - - Allow non-admin users to launch the app for the first time (using admin creds) (#4060) - - Prompt non-admin users for admin password when needed in Settings (#4046) - - Fixed download links, documentation links (#4059, #4013) - - Fixed "failure: No error" message in diagnostic panel (#4010) - - Improved diagnostics for networking and logs for the service port openers (#4116) - -* Known issues - - See https://docs.docker.com/docker-for-mac/troubleshoot/ - -### 2016-06-17 1.12.0-rc2-beta16 "Beta-16" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - -* Upgrades - - Docker 1.12.0 RC2 - - docker-compose 1.8.0 RC1 - - docker-machine 0.8.0 RC1 - - notary 0.3 - - Alpine 3.4 - -* Bug fixes and minor changes - - VPNKit: fix a regressed error message when a port is in use (#3904) - - Fix UI crashing with 'NSInternalInconsistencyException' / fd leak (#3883) - - HyperKit API: Improved error reporting (#3888) - - osxfs: fix sporadic EBADF due to fd access/release races (#3683) - -* Known issues - - See https://beta.docker.com/docs/mac/troubleshoot/#known-issues - -### 2016-06-10 1.11.2-beta15 "Beta-15" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - - Registry mirror and insecure registries can now be configure from Settings - - VM can now be restarted from Settings - - sysctl.conf can be edited from Settings - -* Upgrades - - Docker 1.11.2 - - Linux 4.4.12, aufs 20160530 - -* Bug fixes and minor changes - - Number of concurrent TCP/UDP connections increased in VPNKit - - Hyperkit: vsock stability improvements - - Fixed crash when admin user group does not exit - -* Known issues - - See https://beta.docker.com/docs/mac/troubleshoot/#known-issues - -### 2016-06-06 1.11.1-beta14.1 "Beta-14" - -* Hotfix - - Updated Linux kernel to avoid falsely triggering an alarm in a common antivirus scanner - -### 2016-06-06 1.11.1-beta14 "Beta-14" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - - New menu item "Diagnose & Feedback" can now be used to run diagnostics and upload logs to Docker - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart Docker.app (#1224) - -* Bug fixes and minor changes - - osxfs: support statfs (#3536) - - settings: updated toolbar icons (#3476) - - Fall back to secondary DNS server if primary fails (#3458) - - Link to documentation from menu - -### 2016-05-28 1.11.1-beta13.1 "Beta-13.1" - -* Hotfixes - – osxfs: Fix sporadic EBADF errors and End_of_file crashes due to a race corrupting node table invariants (#3454) - – osxfs: Fix a crash after accessing a sibling of a file moved to another directory caused by a node table invariant violation (#3474) - – Proxy settings were applied on network change, causing docker daemon to restart too often - – Log file sizes doubled on docker daemon restart - -### 2016-05-25 1.11.1-beta13 "Beta-13" - -* New - - osxfs: enabled 10ms dcache for 3x speedup on a go list ./... test against docker/machine. Workloads - heavy in file system path resolution (common among dynamic languages and build systems) will have - those resolutions performed in amortized constant time rather than time linear in the depth of the - path so speedups of 2-10x will be common - - Support multiple users on the same machine, non-admin users can use the app as long as vmnetd has been installed. Currently - only one user can be logged in at the same time. - - Basic support for using system HTTP/HTTPS proxy in docker daemon - - Docs have been updated! See https://beta.docker.com/docs/ - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - -* Bug fixes and minor changes - - osxfs: setting atime and mtime of nodes is now supported (#2174) - - osxfs: fixed major regression in Beta 12 with ENOENT, ENOTEMPY, and other spurious errors after - a directory rename. This manifested as `npm install` failure and other directory traversal issues. (#3229) - - osxfs: fixed temporary file ENOENT errors (#3220, #1794) - - osxfs: fixed in-place editing file truncation error (e.g. perl -i) (#3219) - - improve time synchronisation after sleep (#3240) - -### 2016-05-17 1.11.1-beta12 "Beta-12" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - -* Bug fixes and minor changes - - UI improvements (#3138, #3107) - - osxfs: fixed mkdir returns EBUSY but directory is created (#3131) - - osxfs: FUSE 7.23 (#3130) - -### 2016-05-10 1.11.1-beta11 "Beta-11" - -* New - - osxfs now persists ownership changes in an extended attribute, see - https://beta.docker.com/docs/mac/osxfs/ (#823) - -* Upgrades - - docker-compose 1.7.1 - - Kernel 4.4.9 - -* Bug fixes and minor changes - - desktop notifications after successful update (#2947) - - no "update available" popup during install process (#2973) - - fix repeated bind of privileged ports (#3015) - - osxfs: fix the block count reported by stat (#2978) - - Moby: Fix vsock half closed issue (#2961) - - Moby: Add NFS support (#2961) - - Moby: Hostname is now Moby, not Docker (#2961) - - Moby: Fixes to disk formatting scripts (#2961) - -### 2016-05-03 1.11.1-beta10 "Beta-10" - -* New - - Token validation is now done over an actual SSL tunnel (HTTPS). - (should fix issues with antivirus software) - - Docs have been updated! See https://beta.docker.com/docs/ - -* Upgrades - - docker 1.11.1 (#2858, 2808) - -* Bug fixes and minor changes - - UCP now starts again (#2854) - - include debugging symbols in xhyve (#2837) - - vsock stability improvements (#2831) - - addressing glitches in Settings panel - - fix issues impacting the "whale menu" - - fix uninstall process - - xhyve vcpu state machine improvements, may improve suspend/resume (#2798) - -### 2016-04-28 1.11.0-beta9 "Beta-9" - -* New - - `localhost` is now used for port forwarding by default. - `docker.local` will no longer work as of Beta 9. See documentation - for details. - - Docs have been updated! See https://beta.docker.com/docs/ - - New settings window - memory and vCPUs now adjustable (#2634) - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - -* Bug fixes and minor changes - - Fix loopback device naming (#2734) - - Improve docker socket download and osxfs sequential write by ~20% (#2653) - - osxfs: improve sequential read throughput by up to 20% (#2654) - - osxfs: improve readdir performance by up to 6x (#2695) - - osxfs: log all fatal exceptions (#2732) - - more reliable DNS forwarding over UDP and TCP (#2721, #2786) - - UDP ports can be proxied over vsock (#2711) - - fix EADDRINUSE (manifesting as errno 526) when ports are re-used (#2818) - - send ICMP when asked to not fragment and we can't guarantee it (#2780) - - fix parsing of UDP datagrams with IP socket options (#2780) - - drop abnormally large ethernet frames (#2793) - - Improve xhyve logging (#2719) - - Record VM start and stop events (#2698) - -### 2016-04-19 1.11.0-beta8 "Beta-8" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - - Networking mode switched to VPN compatible by default (#2091), - and as part of this change the overall experience has been improved: - - `docker.local` now works in VPN compatibility mode (#2603) - - exposing ports on the Mac is available in both networking modes (#2621) - - port forwarding of privileged ports now works in both networking modes (#2557) - - traffic to external DNS servers is no longer dropped in VPN mode (#2625) - - `osxfs` now uses `AF_VSOCK` for transport (#2531, #2584) giving ~1.8x - speedup for large sequential read/write workloads but increasing - latency by ~1.3x. `osxfs` performance engineering work continues. - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - -* Bug fixes and minor changes - - Apple System Log now used for most logs instead of direct filesystem logging (#2543, #2587) - - docker_proxy fixes (#2539) - - Merge Xhyve upstream patches (#2551) - - Improve error reporting in `nat` network mode (#2606) - - `osxfs` `transfused` client now logs over `AF_VSOCK` (#2602) - - Fixed a com.docker.osx.xhyve.linux supervisor deadlock if processes exit - during a controlled shutdown (#2602) - - Fixed VPN mode malformed DNS query bug preventing some resolutions (#2607) - -### 2016-04-14 1.11.0-beta7 "Beta-7" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - - Use `AF_VSOCK` for Docker socket transport (#2469, #2438, #2410) - -* Upgrades - - docker 1.11.0 - - docker-machine 0.7.0 - - docker-compose 1.7.0 - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - - If VPN mode is enabled and then disabled and then re-enabled again, - `docker ps` will block for 90s (#2337) - -* Bug fixes and minor changes - - Logging improvements (#2455, #2427, #2409, #2380, #2379) - - Improve process management (#2454, #2451, #2456) - -### 2016-04-05 1.11.0-beta6 "Beta-6" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - - Add uninstall option in user interface (#2198) - -* Upgrades - - docker 1.11.0-rc3 (#2255) - - docker-compose 1.7.0-rc2 (#2301) - - docker-machine 0.7.0-rc1 - - Linux 4.4.6 - -* Known issues - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - - If VPN mode is enabled and then disabled and then re-enabled again, - `docker ps` will block for 90s (#2337) - -* Bug fixes and minor changes - - Fix osxfs multiple same directory bind mounts stopping inotify (#2258) - - Fix osxfs setattr on mode 0 files (sed failures) (#2171) - - Fix osxfs blocking all operations during `readdir` (#2141) - - Fix osxfs mishandled errors which crashed the file system and VM (#2166) - - Remove outdated lofs/9p support (#2256) - - Add more debugging info to logs uploaded by `pinata diagnose` (#2175) - - Improve diagnostics from within VM (#2183) - - Virtualbox version check now also works without VBoxManage in path (#2152) - - VPN mode now uses same IP range as NAT mode (#2151) - - Tokens are now verified on port 443 (#2117) - - Remove outdated uninstall scripts (#2198) - - Increase default ulimits (#2253) - - Port forwarding with `-p` and `-P` should work in VPN mode (#2190) - - Fix a memory leak in com.docker.db (#2289) - - Fix a race on startup between docker and networking which can - lead to Docker.app not starting on reboot (#1808) - -### 2016-03-29 1.10.3-beta5 "Beta-5" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - -* Known issues - - There is a race on startup between docker and networking which can - lead to Docker.app not starting on reboot. The workaround is to - restart the application manually. (#1808). - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - - In VPN mode, the `-p` option needs to be explicitly of the form - `-p :`. `-p ` and `-P` will not - work yet. (#1520) - -* Bug fixes and minor changes - - Update DMG background image (#2098) - - Show correct VM memory in Settings (#2067) - - Feedback opens forum, not email (#2066) - - Fix RAM amount error message (#2026) - - Fix wording of CPU error dialog (#1940) - - Remove status from settings (#2058) - - Check for incompatible versions of Virtualbox (#2056) - - -### 2016-03.22 1.10.3-beta4 "Beta-4" - -* New features - - File-sharing: support inotify events so that filesystem events on the - Mac will trigger filesystem activations inside Linux containers (#822) - - Install docker-machine in `/usr/local` (#1703) - - Add an animated popover window to help first-time users get started (#1848) - - Add `pinata doctor` to diagnose common setup issues such as stray environment variables (#1809) - - New Beta icon (#1780) - -* Known issues - - There is a race on startup between docker and networking which can - lead to Docker.app not starting on reboot. The workaround is to - restart the application manually. (#1808). - - Docker.app sometimes uses 200% CPU after OS X wakes up from sleep mode. - The issue is being investigated. The workaround is to restart - Docker.app (#1224) - - In VPN mode, the `-p` option needs to be explicitly of the form - `-p :`. `-p ` and `-P` will not - work yet. (#1520) - -* Bug fixes and minor changes - - Hostnet: fix Moby DNS resolver failures by proxying the - Recursion Available flag (#1698) - - `docker ps` shows IP address rather than `docker.local` (#1841) - - Re-enable support for OS X 10.10 (#1748) - - Fix "Notification Center"-related crash on startup (#1167) - - Fix watchdog crash on startup (#1558) - - Ensure binaries are built for 10.10 rather than 10.11 (#1748) - - `pinata diagnose`: work around bugsnag upload limits (#1845) - and add more diagnostic tests (#1852) - - `pinata diagnose`: remove false positives if old launchd plists - are still present (#1662) - -### 2016-03-15 1.10.3-beta3 "Beta-3" - -* New - - Docs have been updated! See https://beta.docker.com/docs/ - - 6x speedup for sequential write throughput with osxfs (#1607) - - Rename `bridged` mode to `nat` mode (#1621) - - Docker runs in debug mode by default for new installs (#1546) - - Add `pinata diagnose` command to help diagnose problems and upload logs (#1664) - -* Upgrades - - Docker 1.10.3 (#1586) - -* Bug fixes and minor changes - - Add more verbose logging on errors in `nat` mode (#1620, #1522) - - Fix HockeyApp crash reporting (#1587) - - Fix get/set VPN mode in settings (#1583) - - Fix osxfs chmod on sockets (#1570) - - Fix osxfs EINVAL from `open` using O_NOFOLLOW (#1511) - - Show correct forwarding details in `docker ps/inspect/port` in `nat` mode (#1564) - - Auto update automatically checks for new versions again (#1536) - - Hypervisor stability fixes, resynced with upstream repository (#1531, #1514) - - Fatal GUI errors now correctly terminate the app again (#1524,#1528) - - New lines ignored in token entry field (#1498) - - Fix proxy panics on EOF when decoding JSON (#1489) - - Clarify open source licenses (#1604, #1677, #1636) - - Fix long delay/crash when switching from `hostnet` to `nat` mode (#1675) - - Moby logs included in diagnose upload (#1664) - - Feedback mail has app-version in subject field (#1653) - - App version included in logs on startup (#1645) - -### 2016-03-08 1.10.2-beta2 "Beta-2" - -* New features - - Docs have been updated! See https://beta.docker.com/docs/ - - GUI: Add VPN mode / slirp to settings (#1444) - - GUI: Add disable Time Machine backups of VM disk image to settings (#1429) - - CLI: `pinata` configuration tool for experimental settings (#1411, #1370) - - FS: Add guest-guest FIFO and socket file support (#1314) - -* Upgrades - - notary 0.2 (#1447) - -* Bug fixes - - FS: Fix data corruption bug during cp (use of sendfile/splice) (#1384) - - GUI: Fix About box to contain correct version string (#1289) - - Slirp/VPN mode: Stability fixes and tests (#1394, #1428, #1434) - - Slirp/VPN mode: Fix DNS issues when changing networks (#1455) - - Moby: Clean up Docker startup code (#1398) - - Fix various linking and dependency problems (#1426, #1378) - - Logging improvements (#1437) - -### 2016-03-01 1.10.2-b1 "Beta-1" - -* GUI - - Add dialog to explain why we need admin rights (#1284, #1207) - - Remove shutdown/quit window (#1287) - - Improve machine migration (#1255) - - Add "Help" option in menu to open docs webpage (#1237) - - Add license agreement (#1209) - - Add MixPanel support (#1206) - -* CLI - - Add `docker-configure` tool to modify experimental settings (#1304, #1293, #1286, #1280, #1266, #1229, #1222, #1311) - - Add `docker-diagnose` and `docker-configure` to path (#1254) - -* Crash reports - - Add HockeyApp crash reporting (#1260, #1251) - -* Task manager - - Improve signal handling (#1221, #1201, #1246) - -* Logging - - Use ISO timestamps with microsecond precision (#1285) - - Clean up logging format (#1285) - -* Packaging - - Create `/usr/local` if it doesn't exist (#1307) - - `docker-uninstall` improvements (#1236) - - Remove `docker-select` as it's no longer used (#1295) - -* Hypervisor - - Add pid file (#1220) - - Networking reliability improvements (#1181) - -* Bug fixes - - Slirp: fix port forwarding issue (#1218) - - Slirp: stability fixes (#1194) - - Moby: fix setting hostname (#1283) - - Fix permissions on `/usr/local` symlinks (#1261) - -### 2016-02-23 1.10.2-12 "Alpha-12" - -* Enrollment System - - A token is now required to launch the application - - How to get the token? - - Sign up on http://beta.docker.com - - Wait for validation email (or ask for it in #docker-mac channel on Slack) - - Open the application, token will be requested - - Internet access is required only once - -* API proxy - - Bug fixes for `docker inspect` (#1051) - - Stop rewriting volume paths: `/Users`, `/private`, `/tmp` and `/Volumes` - are now directly mapped into the OSX filesystem. (#1016) - - Stability fixes (#1097) - -* Docker - - Upgrade to docker 1.10.2 (#1103) - -* CLI - - bundle bash completion from docker, machine and compose (#1036) - - bundle docker-machine (and its bash completion) (#1027) - -* Moby - - Speed-up exit time: shutdown is now really fast. (#945) - - Kernel update to 4.1.18 (#1096) - -* Hypervisor (com.docker.driver.amd64-linux) - - Stability fix and more logging for new `freeze` sleep mode (#1026) - -* Packaging - - Move database to `~/Library/Containers/com.docker.docker/Data/database` - - Move disk image to `~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux` - - Move Moby logs to `~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log` - -### 2016-02-16 1.10.1-11 "Alpha-11" - -* API proxy - - Rewrite `docker inspect` to rewrite volumes and ports - - Handle start requests and adjust mounts for `docker-compose` (#918, #924) - - Add disabled, experimental flag to expose `/var/run/docker.sock` (#953) - -* Networking - - In `slirp` mode, if no IP is specified bind to 0.0.0.0 (#939) - - `docker ps` will show where the port is really bound, i.e. on - `docker.local` (#939) - - New experimental key `native/port-forwarding=false`: if true this will - perform port forwarding from IP addresses on the host, like regular - Linux. (#939) - -* UI - - Logs: Remove the log dashboard and link to the log folder instead - - Buttons: Fix the "Acknowledgements" button (#984) - -* Hypervisor (com.docker.driver.amd64-linux) - - Freeze VM while OSX sleeps (workaround for Apple ACPI bug, issue #147) (#967) - - Prevent spinning if the tty is disconnected (#869, #996) - -* Moby - - Fix fd leaks inside 9p daemon (#954) - - Initial user namespace support (#933) - - New kernel, switch to C transfused (#966) - -* Upgrades - - docker-engine 1.10.1 (#946) - - notary 1.10-5 (#964) - - link to latest Kitematic which works out-of-the-box with Docker.app (#957) - -* Windows - - Initial code integration. Now the OSX and Windows apps are built from - the same source tree. - -### 2016-02-09 1.10.0-10 "Alpha-10" - -* File system sharing - - osxfs read corruption fix (#896) - - osxfs sequential read performance 50% faster (now 75MiB/s) - - lofs sequential read performance 13x faster (now 60MiB/s) - - lofs sequential write performance 11x faster (now 50MiB/s) - -* Docker socket - - Socket upload into a container 70% faster (now 17MiB/s) - - Socket download from a container 30% faster (now 21MiB/s) - -* Upgrades - - docker-engine 1.10.0 (#888) - - docker-compose 1.6.0 (#890) - - docker-machine 0.6.0 (#894) - -* Networking - - experimental slirp mode (#903, #902, #901, #887) - - the internal IP address can be set in the database (keys slirp/docker and slirp/host) - - the internal IP now defaults to 169.254.0.1,2 - - when port forwarding, binding to 0.0.0.0 works as on Linux (see documentation for limitations) - -* Bugfixes - - Improve proxy stability (#910, #898) - -### 2016-02-02 1.10.0-9 "Alpha-9" - -NOTE: If you have manually changed the database keys they will be reset to default values after upgrading to this alpha. - -* File system sharing - - osxfs now enabled by default for all users - - osxfs sequential read throughput is now 10x higher (50MiB/s) (#833, #818, #817) - - osxfs stability improvements (#816, #787, #785) - -* Migration - - experimental support for migrating containers from Virtualbox on first launch (#842, #725) - -* Upgrades - - docker-engine 1.10.0-rc2 - - docker-compose 1.6.0rc2 - -* Networking - - New experimental mode ("slirp") added as a workaround for VPN/firewall issues. This mode is not enabled by default (#843, #838, #836, #815, #809) - -* Proxy - - Stability and logging improvements (#814, #781) - -* User interface - - Logs now displayed under "Logs..." - - Dashboard links to Kitematic download - -* Moby - - Reduced boot time (#moby/18) - -* Database - - Add initial support for schema upgrades (#846) - - -### 2016-01-26 1.10.0-8 "Alpha-8" - -* Dashboard - - Include output from docker.log (#728) - -* Hypervisor (com.docker.driver.amd64-linux) - - Shutdown VM while OSX sleeps (workaround for Apple ACPI bug, issue #147) (#711, #694) - -* Configuration - - Linux: Database file to configure hostname, restarts VM on commit - - Docker: Database file to configure Docker daemon, restarts docker on commit - -* Upgrades - - docker-compose 1.6.0rc1 - -* File system sharing (experimental) - - `osxfs`, an experimental shared file system has been integrated (#707) - which fixes UID/GID mapping (#123) and atomic rename (#668) and has - twice the sequential write throughput. It is disabled by default - but can be enabled by writing "osxfs" to the `filesystem` database - key. Please see the documentation for further details. - -### 2016-01-19 1.10.0-7 "Alpha-7" - -* Docker - - upgrade to 1.10.0-rc1 (#650) - - logs available at ~/Library/Group Containers/group.com.docker/ - com.docker.driver.amd64-linux/docker.log - -* Installer - - symlinks in /usr/local/bin are automatically created on first launch (#674) - -* Menubar - - add a simple dashboard which currently displays logs (#679) - -* Packaging - - Include even more of the open-source component LICENSE text (in - previous alphas we missed a few packages) - - Future automatic upgrades will only prompt for admin password if - the vmnetd protocol has changed, not on every version (#645) - - New and updated graphic assets (#652) - -* Hypervisor (com.docker.driver.amd64-linux) - - bundle an experimental qemu x86_64 binary (#453) - -### 2016-01-12 1.9.1-6 "Alpha-6" - -* Packaging - - Distributed as a .dmg, with cute whale picture! - - Auto update re-enabled - -* Moby - - Add support for running containers for other architectures (arm, arm64, ppc64le, mips64, mips64le) (#545, #557, #559) - - Kernel 4.1.15 and aufs fixes (#589) - -* Networking (com.docker.vmnetd) - - Improve performance from host to container (~350 mbit/sec vs ~1.2 gbit/sec) (#566) - - Add support for rx batching to reduce packet overhead under high load (#566) - -* Menubar (Docker.app) - - Improve process management and logging (#570, #543, #568) - -* Hypervisor (com.docker.driver.amd64-linux) - - Add support for switching between hypervisors (xhyve, qemu) by writing to the db (#562) - - Proxy: handle old-style protocol upgrades to fix compose and terminal issues (#569) - - -### 2016-01-05 1.9.1-5 "Alpha-5" - -Note: This version requires a manual uninstall of earlier alpha versions. See documentation for details. - -* Main Window (former Kitematic) - - main Window removed from this alpha, waiting for new mockups and decision about JS (+ smooth transition from Kitematic) versus Swift implementation (#477) - -* Docker Terminal - - "Open Terminal" removed. See documentation for CLI tool installation instructions. (#513) - -* Settings - - login autostart checkbox (ON by default) (#477) - -* Moby - - faster boot time - - upgrade to Alpine 3.3 final - - diagnostics tool - - installer for docker-x - -* Hypervisor - - support more than 3GiB of RAM (`git commit` new value to ~/Library/Application Support/Docker/database/com.docker.driver.amd64-linux/memory) (#473, #474) - - bundle `qcow-tool` for manual creation of larger `Docker.qcow2` files (#501) - - enable ACPI support (#525) - -* Installer - - launchd socket activation is removed; services (including hypervisor and containers) run while the whale menu is running. (#477) - - the app is not automatically copied in /Applications anymore (#477) - - the app can run from any location (#477) - - uninstall dragging application's icon to the trash (may not work for vmnetd) (#477) - -* Packaging - - OSS Licenses of software running on the Host in Docker.app/Contents/Resources/OSS-LICENSES (#495, #491, #483) - - -### 2015-12-21 1.9.1-4 "Alpha-4" - -* moby - - use AUFS instead of OverlayFS - -* network: - - vmnetd: improve performance. disabling verbose logging improve perfs - from ~2MB/s to ~30-40MB/s (#443) - -* in-app support - - docker-diagnose: add capability to upload to bugsnag, upload sysctl and - logs to bugsnag and add a JSON output (#428, #429, #430) - - xhyve: log fatal errors to bugsnag (#425) - -* toolbox - - compose: bundle and install docker-compose (#423, by @justincormack) - - notary: bundle notary but do not install it yet because the generated - binary has some signing issue (#445) - -* DB - - bundle and install com.docker.db, an Irmin DB exposing a 9p interface - (#403, #415) - - update the Go API to use the new FS interface (#90) - -* installer - - docker-select now creates `/usr/local/bin` if it doesn't exists and force - install docker CLI and docker-compose if they are not properly installed - yet (#446) - - -### 2015-12-15 1.9.1-3 "Alpha-3" - -* Critical fix to 1.9.1-2 regarding auto-update - - Alpha-2 use the `master` channels instead of the `alpha` channel - -### 2015-12-14 1.9.1-2 "Alpha-2" - -* hypervisor - - process renamed to com.docker.driver.amd64-linux - -* distro (dom0) - - first release of moby, our own OS distro - -* network - - privileged daemon renamed to com.docker.vmnetd - - network daemon can now auto-update - -* storage (file-sharing) - - file-sharing daemon renamed to com.docker.lofs - -* installer - - install a proof-of-concept preference-panel - - report installation bug to bugsnag - - Docker.app is now properly signed - - The installer gives more feedback to the user - - need to run /Applications/Docker.app/Contents/Resources/docker-select - to install CLI tools - - configuration files are in ~/Library/Application Support/Docker - -* kitematic - - volumes works - - image pull works - - port forwarding works - -* preference-pane - - basic proof-of-concept - -* menubar - - allow to open a terminal - - allow to start the GUI - - allow to open the preference pane - - allow to check for upgrades and upgrade to a new version 2015-12-04 1.9.1-1 "Alpha-1" - -### 2015-12-04 1.9.1-1 "Alpha-1" - -* hypervisor - - more stable - - extensible storage (qcow2) for guests can now grow to 64 gB - - fixed amount of RAM extended to 2GB - -* installer - - install and start kitematic - - smaller: ~450MB - - auto-updates - -* Kitematic - - modified version of Kitematic which do not requires VirtualBox - -* menubar - - show HockeyApp version - - allow to upgrade to new version - - persisted on reboot - - appears whenever the hypervisor is started - -* user-feedback - - docker-diagnose - - use bugsnag - -### 2015-11-30 1.9.1-0 "Alpha-0" - - * hypervisor - - stable enough to boot a few times - - use qcow2 for extensible copy-on-write storage for guests (can grow to 1gB) - - fixed amount of RAM (1GB) - - * distro (dom0) - - heavily trimmed-down version of boot2docker - - still >100 MB - - * network - - network daemon runs as root - - blocker for integration in the App Store - - docker.local points to the distro VM - - * storage (file-sharing) - - basic file-sharing works over 9p - - not POSIX (issues with symlink, …) - - all files have the same user/group - - file timestamps can be wrong - - * installer - - install hypervisor, network daemon, storage daemon, docker CLI and menu-bar - - install docker in /usr/local/bin - - very big: 1GB - - report installation stats to mixpanel - - * docker - - upstream docker CLI 1.9.1 on OSX - - upstream docker daemon running in boot2docker - - simple proxy to rewrite volumes API running in OSX - - symlink /var/tmp/docker.sock to /var/run/docker.sock - - need root privileges on every reboot: blocker for App Store - - not very secure - -* menubar - - doesn’t do anything useful - - Not persisted on reboot diff --git a/MAINTAINERS b/MAINTAINERS deleted file mode 100644 index 0a55ce60fa..0000000000 --- a/MAINTAINERS +++ /dev/null @@ -1,21 +0,0 @@ -Jeffrey Morgan -Sean Li -Michael Chiang -Adrien Duermael -Gaetan Devillelle -Solomon Hykes -Dave Scott -Michel Courtine -Thomas Gazagnaire -Emmanuel Briney -Justin Cormack -David Sheets -Stephen Day -Magnus Skjegstad -Patrick Chanezon -Thomas Leonard -David Gageot -Rolf Neugebauer -Richard Mortier -Jean-Laurent de Morlhon -Ben Bonnefoy diff --git a/Makefile b/Makefile deleted file mode 100644 index 17c8ee1fad..0000000000 --- a/Makefile +++ /dev/null @@ -1,254 +0,0 @@ -MACOSX_DEPLOYMENT_TARGET?=10.10 -REPO_ROOT=$(shell git rev-parse --show-toplevel) -OUTPUT?=$(REPO_ROOT)/v1/mac/build/Docker.app -PROJECT_ROOT?=$(GOPATH)/src/github.com/docker/pinata -CACHE_DIR?=$(REPO_ROOT)/_cache - -# Getting version from Info.plist file -# NOTE(aduermael): this won't work on Windows -# It will be updated soon to support both platform -# with tags of the form: "win-.*" and "mac-.*" -plistPath=$(PROJECT_ROOT)/v1/mac/src/docker-app/docker/docker/Info.plist -versionFromPlist=$(shell /usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$(plistPath)" 2> /dev/null) -PARTS=$(subst -, ,$(versionFromPlist)) -VERSION=v$(word 1, $(PARTS))-$(word 2, $(PARTS)) - -# hockeyapp read-only tokens -HA_MAC_TOKEN=bf3c4239192a4511ab54ff5e963d51b1 -HA_WIN_TOKEN=64336e7527dc477da596bedfa2804540 - -# opam flags -OPAMROOT=$(CACHE_DIR)/opam -OPAMDIR=$(REPO_ROOT)/v1/opam -OPAMFLAGS=MACOSX_DEPLOYMENT_TARGET=$(MACOSX_DEPLOYMENT_TARGET) OPAMROOT=$(OPAMROOT) OPAMYES=1 OPAMCOLORS=1 OPAMDIR=$(OPAMDIR) GO15VENDOREXPERIMENT=1 -OPAMLIBS=mirage-block-c docker-diagnose osx-daemon osx-hyperkit -OPAMCMDS=osxfs -OPAMSUPPORT=nurse - -# TODO: this needs a cleaner solution -BACKENDCMDS=driver.amd64-linux vmnetd osx.hyperkit.linux hyperkit frontend shell #driver.amd64-qemu - -LICENSEDIRS=\ - $(PROJECT_ROOT)/v1/opam \ - $(PROJECT_ROOT)/v1/vendor \ - $(PROJECT_ROOT)/v1/uefi \ - $(OPAMROOT) \ - $(PROJECT_ROOT)/v1/cmd/com.docker.hyperkit \ - $(PROJECT_ROOT)/v1/docker_proxy/vendor \ - $(PROJECT_ROOT)/v1/mac/src/docker-app/docker/Carthage/Checkouts \ - $(PROJECT_ROOT)/v1/mac/dependencies/qemu - -.PHONY: all depends opam perf OSS-LICENSES dmg dsym-zip clean cacheclean versions go-fmt go-lint go-vet go-test go-depends - -all: opam mac - @ - -depends: mac-depends qemu-depends opam-depends go-depends moby-depends - @ - -clean: opam-clean backend-clean moby-clean - $(MAKE) -C $(PROJECT_ROOT)/v1/mac clean - -cacheclean: - rm -rf "$(HOME)/.docker-ci-cache/opam" - rm -rf "$(OPAMROOT)" - -OSS-LICENSES: - $(OPAMFLAGS) v1/opam/opam-licenses $(OPAMCMDS) - $(MAKE) -C $(PROJECT_ROOT)/v1/cmd/com.docker.hyperkit LICENSE - $(foreach dir, $(LICENSEDIRS), mkdir -p $(dir);) - $(PROJECT_ROOT)/v1/mac/scripts/list-licenses $(LICENSEDIRS) > OSS-LICENSES - -# opam applications - -UPSTREAM=$(shell ls $(OPAMDIR)/repo/packages/upstream | awk -F. '{ print $$1 }') -DEV=$(shell ls $(OPAMDIR)/repo/packages/dev) - -opam-depends: - @brew install opam || true &> /dev/null - @brew install dylibbundler || true &> /dev/null - @$(OPAMFLAGS) $(OPAMDIR)/opam-boot - @$(OPAMFLAGS) opam update -u - @$(OPAMFLAGS) opam install depext - @$(OPAMFLAGS) opam depext $(UPSTREAM) $(DEV) &> /dev/null - @$(OPAMFLAGS) opam install $(UPSTREAM) $(DEV) - -opam-lib-clean-%s: - $(OPAMFLAGS) $(MAKE) -C $(PROJECT_ROOT)/v1/$* clean - -opam-cmd-clean-%s: - $(OPAMFLAGS) $(MAKE) -C $(PROJECT_ROOT)/v1/cmd/com.docker.$* clean - -opam-support-clean-%: - $(OPAMFLAGS) $(MAKE) -C $(PROJECT_ROOT)/support/$* clean - -opam-clean: $(OPAMLIBS:%=opam-lib-clean-%s) $(OPAMCMDS:%=opam-cmd-clean-%s) $(OPAMSUPPORT:%=opam-support-clean-%) - @ - -opam-lib-%: - cd $(PROJECT_ROOT)/v1/$* && $(OPAMFLAGS) ./build.sh - -opam-cmd-%: - cd $(PROJECT_ROOT)/v1/cmd/com.docker.$* && $(OPAMFLAGS) ./build.sh - -opam-support-%: - cd $(PROJECT_ROOT)/support/$* && $(OPAMFLAGS) ./build.sh - -opam: $(OPAMLIBS:%=opam-lib-%) $(OPAMCMDS:%=opam-cmd-%) $(OPAMSUPPORT:%=opam-support-%) OSS-LICENSES - @ - -# backend - -backend-cmd-clean-%: - cd $(PROJECT_ROOT)/v1/cmd/com.docker.$* && $(OPAMFLAGS) $(MAKE) clean - -backend-lib-clean-%: - cd $(PROJECT_ROOT)/v1/$* && $(OPAMFLAGS) $(MAKE) clean - -backend-clean: $(BACKENDCMDS:%=backend-cmd-clean-%) - @ - -backend-cmd-%: - cd $(PROJECT_ROOT)/v1/cmd/com.docker.$* && $(OPAMFLAGS) $(MAKE) CACHE_DIR=$(CACHE_DIR) - -backend-cmd-vmnetd: opam -backend-cmd-hyperkit: backend-cmd-vmnetd - -backend: $(BACKENDCMDS:%=backend-cmd-%) - @ - -# moby -moby-depends: - go get -u github.com/justincormack/regextract - -moby: - cd $(PROJECT_ROOT)/v1/moby && make - -moby-clean: - cd $(PROJECT_ROOT)/v1/moby && make clean - -# mac app - -mac-depends: - cd $(PROJECT_ROOT)/v1/mac/scripts && ./make.bash -dy - -mac: opam backend moby docker-release - cd $(PROJECT_ROOT)/v1/mac/scripts && ./make.bash -cby - -dmg: - cd $(PROJECT_ROOT)/v1/mac/scripts && ./make-dmg - -dsym-zip: - cd $(PROJECT_ROOT)/v1/mac/scripts && ./make-dsym-zip - -# run Docker.app - -dev: opam mac - rm -rf "$(PROJECT_ROOT)/v1/mac/build" - rm -rf "$(PROJECT_ROOT)/v1/mac/src/docker-app/build" - cd $(PROJECT_ROOT)/v1/mac/src/docker-app && make dev - -# open Docker.app .xcodeproj - -run: - $(PROJECT_ROOT)/v1/mac/build/Docker.app/Contents/MacOS/Docker - -backend-run: - @$(PROJECT_ROOT)/v1/cmd/com.docker.shell/com.docker.shell -debug -bundle $(PROJECT_ROOT)/v1/mac/build/Docker.app - -# tests -lint: go-fmt go-lint go-vet - # lint test scripts - brew install shellcheck - find tests/cases -type f | xargs -L1 file -I | grep 'text/x-shellscript' | cut -f1 -d":" | xargs -L1 shellcheck -e SC2129,SC1090,SC2039 - -GOPACKAGES = $(eval GOPACKAGES := $(shell cd $(PROJECT_ROOT)/v1 && go list -e ./... | grep -v vendor | grep -v moby))$(GOPACKAGES) - - -go-depends: - go get -u github.com/golang/lint/golint - -go-fmt: - @for pkg in $(GOPACKAGES) ; do \ - echo "gofmt $${pkg##*pinata/} ..." ;\ - cd $(PROJECT_ROOT)/$${pkg##*pinata/} ;\ - test -z "$$(gofmt -s -l . 2>&1 | grep -v ^vendor/ | tee /dev/stderr)" || exit 1 ;\ - done - -go-lint: - @for pkg in $(GOPACKAGES) ; do \ - echo "golint $${pkg##*pinata/} ..." ;\ - cd $(PROJECT_ROOT)/$${pkg##*pinata/} ;\ - test -z "$$(golint . 2>&1 | grep -v ^vendor/ | tee /dev/stderr)" || exit 1 ;\ - done - -go-vet: - @cd $(PROJECT_ROOT) && go vet $(GOPACKAGES) - -go-test: - @cd $(PROJECT_ROOT) && for pkg in $(GOPACKAGES) ; do \ - echo "testing $$pkg ..." ;\ - go test -race -v $$pkg ;\ - done - -test-depends: opam - cd $(PROJECT_ROOT)/v1/tests && $(OPAMFLAGS) ./build.sh - -test: lint test-depends go-test - (cd $(PROJECT_ROOT)/tests && ./rt-local -l nostart,checkout -v -x run) - -# test-dmg also tests the dmg - it's assumed that `make dmg` was performed first first -test-dmg: lint test-depends go-test - (cd $(PROJECT_ROOT)/tests && ./rt-local -l installer,checkout -v -x run) - -fulltest: - (cd $(PROJECT_ROOT)/tests && ./rt-local -l nostart,release,checkout -v -x run) - PINATA_APP_PATH=$(OUTPUT) $(PROJECT_ROOT)/v1/tests/pinata-rt test -e - -perf: - make -C $(PROJECT_ROOT)/v1/perf - -# qemu -QEMUV = 2.4.1 -export QEMUV -qemu-depends: - @mkdir -p $(CACHE_DIR) - @cd $(PROJECT_ROOT)/v1/cmd/com.docker.driver.amd64-qemu && make depends CACHE_DIR=$(CACHE_DIR) - -# upload to HockeyApp - -upload: - @cd $(PROJECT_ROOT)/v1/mac/scripts && ./make.bash -uy - -release: - rm -rf "$(PROJECT_ROOT)/v1/mac/build" - rm -rf "$(HOME)/.docker-ci-cache" - rm -rf "$(CACHE_DIR)" - make depends - make - make test - git tag $(VERSION) -a -m "Release $(VERSION)" - git push upstream $(VERSION) - -versions: - @echo git tag name: $(VERSION) - @echo Xcode project version \(Info.plist\): $(versionFromPlist) - @echo Changelog: $(shell head -n 1 CHANGELOG | cut -f 3 -d" ") - @echo docker-diagnose: $(shell cat v1/docker-diagnose/src/dockerCli.ml | grep check_version) - -release-to-rc: - @echo "Releasing latest builds to RC (the newest unreleased build will also be downloaded)" - docker-release --channel rc --arch mac --build latest publish - docker-release --channel rc --arch win --build latest publish - -# docker-release build -docker-release: - cd $(PROJECT_ROOT)/v1/docker-release && make - -# helpful targets for development -logwatch: - syslog -w -F '$$Time $$Host $$(Sender)[$$(Facility)][$$(PID)]\n<$$((Level)(str))>: $$Message' \ - -k Sender Seq Docker -o \ - -k Sender Seq docker -o \ - -k Message Seq Docker -o \ - -k Message Seq docker diff --git a/README.md b/README.md deleted file mode 100644 index adaf4bca89..0000000000 --- a/README.md +++ /dev/null @@ -1,163 +0,0 @@ -# Pinata: an experimental standalone Docker client - -| | pr | master | rc | beta | stable | -|---|---|---|---|---|---| -| macOS | [latest](https://download-stage.docker.com/mac/pr/Docker.dmg) | [latest](https://download-stage.docker.com/mac/master/Docker.dmg) | [latest](https://download-stage.docker.com/mac/rc/Docker.dmg) | [latest](https://download.docker.com/mac/beta/Docker.dmg) | [latest](https://download.docker.com/mac/stable/Docker.dmg) | -| Windows | [latest](https://download-stage.docker.com/win/pr/InstallDocker.msi) | [latest](https://download-stage.docker.com/win/master/InstallDocker.msi) | [latest](https://download-stage.docker.com/win/test/InstallDocker.msi) | [latest](https://download.docker.com/win/beta/InstallDocker.msi) | [latest](https://download.docker.com/win/stable/InstallDocker.msi) | -*( if you get Access Denied errors, it means nothing has been published to this channel yet )* - -To list all the versions: http://omakase.omakase.e57b9b5b.svc.dockerapp.io/ - -This is an experimental project to develop a new client for Docker, -separately from the daemon or any other backend component. - -By maintaining a standalone client, the goal is to: - -1. Allow for more rapid iteration on client functionality. -2. Improve compatibility between different versions of the client and daemon. -3. Add more features to the client without bloating the daemon-side components. -4. Pave the way to simplifying the daemon code base, improving its -quality and making its maintenance easier. - -## Versioning - -The release cycle respects the following convention: `X-Y[-Z]` where: - -- `X` is the version of the docker engine used as a base for the build. The build can be modified during the build process to fit better into the use-case of `Docker.app` (ie. it won't usually be a drop-in replacement, but we will try to upstream our patches as quickly as possible). - -- `Y` is an arbitrary string that we can use to define a version of `Docker.app`, independently of the release cycle of docker engine. - -- `Z` indicates the build channel (dev, test, master, release). `Z` is empty for releases. - -For instance the first beta release of pinata has the version: `1.9.1-beta1`. While on master channel (one build for each PR merged), it has the version: `1.9.1-beta1-master`. - -On OS X, the version is defined in XCode project's Info.plist file (key: `CFBundleShortVersionString`). There's also a build number, associated with `CFBundleVersion` key (set by CI). - -In Xcode project, the version should use a suffix like `-dev` (`1.9.1-beta1-dev`). That suffix will be replaced/removed by CI. - -## INSTALL - -### Through HockeyApp - -For Docker for Mac see the [Docker.app installation guide](https://github.com/docker/pinata/blob/master/v1/docs/content/mackit/getting-started.md) and for Docker for Windows see the [Docker installation guide](https://github.com/docker/pinata/blob/master/v1/docs/content/winkit/getting-started.md) - -### OSX Build - -Check that your `GOPATH` is correctly set-up and clone this repository in -`$GOPATH/src/github.com/docker/pinata`. - -#### Dependencies - -As prerequisites, you need to have `Xcode`, `homebrew` and `go` installed. - -To minimize build times, the dependencies are cached with this command - -You only need to run it once or when an external dependency was updated - -At the root of this repository, type: - -``` -make depends -``` - -When you add a new go dependency, add it in the `GO_DEPS` variable of the toplevel -`Makefile`. - -#### Build - -After a successful `make depends`, type: - -``` -make -``` - -If you are asked for the password to the `dockerbuilder` keychain, it is -`docker4all`. - -#### Run - -After a successful `make depends` and `make`, type: - -``` -make run -``` - -You will see the logs on stdout - -#### Install - -First, make sure you have uninstalled any previous installation of -pinata with: - -``` -v1/mac/uninstall -``` - -Then, install with: - -``` -v1/mac/build/Docker.app/Contents/MacOS/docker-installer -``` - -#### Tests - -You can run the tests by running: - -``` -make test -``` -This is currently Mac only. - - - -### Windows Build - -[![Build status](https://ci.appveyor.com/api/projects/status/fpa7neeotor31bdh/branch/master?svg=true)](https://ci.appveyor.com/project/Pinata/pinata/branch/master) - -Latest msi builds : - * On [Master](https://download-stage.docker.com/win/master/InstallDocker.msi) channel. - * On [Test](https://download-stage.docker.com/win/test/InstallDocker.msi) channel. - -Check that your `GOPATH` is correctly set-up and clone this repository in -`$GOPATH/src/github.com/docker/pinata`. - -#### Dependencies - -Install: - -- Go 1.6 -- [Visual Studio 2015](https://www.visualstudio.com/en-us/products/vs-2015-product-editions.aspx). The app builds with the free Community edition but the licensing for that edition doesn't allow its use for commercial, closed source work. - -Once you installed the above, open a powershell. - -#### Build - -The main build is driven by the `please.ps1` powershell script in the `win` -sub-directory. - -``` -cd /win -./please.ps1 package -``` - -will clean the build directory and build a new package (installer) in -the `build` sub-directory. - - -``` -cd /win -./please.ps1 build -``` - -will build a new `Docker.exe` file but not the installer. - -### Troubleshooting - -If you have an issue, please report it to the -[bugtracker](https://github.com/docker/pinata/issues) with the output -of: - -``` -pinata diagnose -``` -This is currently Mac only. diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 74506a7ff0..0000000000 --- a/appveyor.yml +++ /dev/null @@ -1,54 +0,0 @@ -environment: - GOPATH: c:\gopath - SIGNTOOLPATH: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin - -clone_folder: c:\gopath\src\github.com\docker\pinata - -before_build: - - cd win/ - -build_script: - - ps: ./please.ps1 AppVeyor - -after_build: - - cd .. - - ps: > - copy .\win\build\InstallDocker.msi InstallDocker.msi - -artifacts: - - path: win/build/InstallDocker.msi - - path: win/TestResults/*.xml - - path: InstallDocker.msi - -test: off - -configuration: Release - -before_deploy: - - ps: > - if ($env:appveyor_pull_request_number -gt 0) { - git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/head - $env:commit=(git rev-parse FETCH_HEAD) - } else { - $env:commit=$env:appveyor_repo_commit - } - true; - -deploy: - - provider: S3 - bucket: pinata-ci - access_key_id: $(pinata_aws_key) - secret_access_key: $(pinata_aws_secret) - folder: $(commit) - artifact: InstallDocker.msi - on: - appveyor_repo_tag: false - - provider: S3 - bucket: pinata-ci - access_key_id: $(pinata_aws_key) - secret_access_key: $(pinata_aws_secret) - folder: $(appveyor_repo_tag_name) - artifact: InstallDocker.msi - on: - appveyor_repo_tag: true - diff --git a/circle-linux.yml b/circle-linux.yml deleted file mode 100644 index 837d719160..0000000000 --- a/circle-linux.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Linux specific circleci.yml -# This build process only build the docs. -# A process mirrors this repo in another repo for every commit, and cp circle-linux.yml to circle.yml. -# This ensures that a Linux build happens in circleci for every commit. - -general: - build_dir: v1 - artifacts: - - "docs/public" - - "mac/build" -machine: - services: - - docker -dependencies: - cache_directories: - - "~/docker" - override: - - make -C docs DOCS_EXPORT=public docs-deploy - - if [[ -e ~/docker/image.tar ]]; then docker load -i ~/docker/image.tar; fi - - mac/make -cblvy - - mkdir -p ~/docker; mkdir -p ~/pinata/v1/mac/build - - docker save pinata/docker-builder > ~/docker/image.tar -deployment: - master: - branch: master - commands: - - make -C docs DOCS_EXPORT=public docs-deploy diff --git a/circle.yml b/circle.yml deleted file mode 100644 index afda8e63e2..0000000000 --- a/circle.yml +++ /dev/null @@ -1,105 +0,0 @@ -# Mac specific circleci.yml -# This build process will download and bundle the build artifacts from the linux ci. -# Checkout the same file on the linux branch to edit the linux version of the circleci configuration - -general: - artifacts: - - v1/mac/build/Docker.dmg - - tests/_results - - ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log - - ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring -machine: - xcode: - version: "8.0" - environment: - GOVERSION: 1.7.1 - GOPATH: "$HOME/go" - GOROOT: "${HOME}/.gimme/versions/go${GOVERSION}.darwin.amd64" - PATH: "${GOROOT}/bin:${GOPATH}/bin:${PATH}" - PROJECT_ROOT: "$GOPATH/src/github.com/docker/pinata" - CI: "1" - post: - - brew unpin go - - brew update - - brew -v install git-lfs - # something forces /usr/loca/bin to the front of the path. - # we'll remove the existing go to be sure - - rm /usr/local/bin/go - - brew -v install gimme - - gimme $GOVERSION - # display homebrew config - - brew config -checkout: - post: - - brew unpin go - - git lfs install --local - - git lfs pull - # Check disk space - - df -h - # check consistency of v1/opam/repo - - v1/opam/repo/check.sh - # v1/cmd/com.docker.hyperkit/hyperkit/ is a git subtree merge from - # http://github.com/docker/hyperkit and no code should be - # committed directly to it. To do this we need to unshallow and to - # have the hyperkit history available. - # - # Mistakes were made prior to - # 5e58d3e47a592e9235c4d03a099bc52ccd7a47ae which were repaired in - # that commit. Start checking from then onwards. - - if [ -s .git/shallow ] ; then git fetch --unshallow git@github.com:docker/pinata master ; fi - - git fetch https://github.com/docker/hyperkit +master:hyperkit/master - - > - if ! git log --no-merges --stat 5e58d3e47a592e9235c4d03a099bc52ccd7a47ae..HEAD --not hyperkit/master -- v1/cmd/com.docker.hyperkit/hyperkit/ | - awk 'BEGIN { rc=0 }; // { rc=1; print }; END { exit $rc }' ; then - echo ""; - echo "Direct commit to hyperkit vendored code detected. Please see:"; - echo "https://github.com/docker/pinata/blob/master/v1/cmd/com.docker.hyperkit/README.md"; - exit 1 - fi -dependencies: - override: - - which go - - go version - - rm -rf "$PROJECT_ROOT" - - mkdir -p $(dirname "$PROJECT_ROOT") - - ln -s $(pwd) "$PROJECT_ROOT" - - make cacheclean - - make mac-depends - - make opam-depends - - make moby-depends - - make go-depends - cache_directories: - - ~/.docker-ci-cache -test: - override: - - make clean - - make opam - - make mac - - make dmg - - make dsym-zip - - make test-dmg - - > - syslog -F "\$Time \$Host \$(Sender)[\$(Facility)][\$(PID)]<\$((Level)(str))>: \$Message" \ - -k Sender Seq Docker -o \ - -k Sender Seq docker -o \ - -k Message Seq Docker -o \ - -k Message Seq docker -deployment: - release: - branch: master - owner: docker - commands: - - aws s3 cp v1/mac/build/Docker.dmg s3://pinata-ci/$CIRCLE_SHA1/Docker.dmg - - make upload - tags: - tag: /.*/ - owner: docker - commands: - - aws s3 cp v1/mac/build/Docker.dmg s3://pinata-ci/$CIRCLE_TAG/Docker.dmg - - make upload - pr: - branch: /.*/ - owner: docker - commands: - - aws s3 cp v1/mac/build/Docker.dmg s3://pinata-ci/$CIRCLE_SHA1/Docker.dmg - - make upload diff --git a/docs/docker-for-mac/docker-toolbox.md b/docker-for-mac/docker-toolbox.md similarity index 100% rename from docs/docker-for-mac/docker-toolbox.md rename to docker-for-mac/docker-toolbox.md diff --git a/docs/docker-for-mac/examples.md b/docker-for-mac/examples.md similarity index 100% rename from docs/docker-for-mac/examples.md rename to docker-for-mac/examples.md diff --git a/docs/docker-for-mac/faqs.md b/docker-for-mac/faqs.md similarity index 100% rename from docs/docker-for-mac/faqs.md rename to docker-for-mac/faqs.md diff --git a/docs/docker-for-mac/images/About.png b/docker-for-mac/images/About.png similarity index 100% rename from docs/docker-for-mac/images/About.png rename to docker-for-mac/images/About.png diff --git a/docs/docker-for-mac/images/changelog-placeholder.png b/docker-for-mac/images/changelog-placeholder.png similarity index 100% rename from docs/docker-for-mac/images/changelog-placeholder.png rename to docker-for-mac/images/changelog-placeholder.png diff --git a/docs/docker-for-mac/images/chat.png b/docker-for-mac/images/chat.png similarity index 100% rename from docs/docker-for-mac/images/chat.png rename to docker-for-mac/images/chat.png diff --git a/docs/docker-for-mac/images/console_logs.png b/docker-for-mac/images/console_logs.png similarity index 100% rename from docs/docker-for-mac/images/console_logs.png rename to docker-for-mac/images/console_logs.png diff --git a/docs/docker-for-mac/images/console_logs_search.png b/docker-for-mac/images/console_logs_search.png similarity index 100% rename from docs/docker-for-mac/images/console_logs_search.png rename to docker-for-mac/images/console_logs_search.png diff --git a/docs/docker-for-mac/images/diagnose-d4mac-issues-template.png b/docker-for-mac/images/diagnose-d4mac-issues-template.png similarity index 100% rename from docs/docker-for-mac/images/diagnose-d4mac-issues-template.png rename to docker-for-mac/images/diagnose-d4mac-issues-template.png diff --git a/docs/docker-for-mac/images/diagnose-id-forums.png b/docker-for-mac/images/diagnose-id-forums.png similarity index 100% rename from docs/docker-for-mac/images/diagnose-id-forums.png rename to docker-for-mac/images/diagnose-id-forums.png diff --git a/docs/docker-for-mac/images/diagnose-issue.png b/docker-for-mac/images/diagnose-issue.png similarity index 100% rename from docs/docker-for-mac/images/diagnose-issue.png rename to docker-for-mac/images/diagnose-issue.png diff --git a/docs/docker-for-mac/images/diagnose.png b/docker-for-mac/images/diagnose.png similarity index 100% rename from docs/docker-for-mac/images/diagnose.png rename to docker-for-mac/images/diagnose.png diff --git a/docs/docker-for-mac/images/diagnostic-forums-topic.png b/docker-for-mac/images/diagnostic-forums-topic.png similarity index 100% rename from docs/docker-for-mac/images/diagnostic-forums-topic.png rename to docker-for-mac/images/diagnostic-forums-topic.png diff --git a/docs/docker-for-mac/images/docker-app-drag-old.png b/docker-for-mac/images/docker-app-drag-old.png similarity index 100% rename from docs/docker-for-mac/images/docker-app-drag-old.png rename to docker-for-mac/images/docker-app-drag-old.png diff --git a/docs/docker-for-mac/images/docker-app-drag.png b/docker-for-mac/images/docker-app-drag.png similarity index 100% rename from docs/docker-for-mac/images/docker-app-drag.png rename to docker-for-mac/images/docker-app-drag.png diff --git a/docs/docker-for-mac/images/docker-app-in-apps-no-annotation.png b/docker-for-mac/images/docker-app-in-apps-no-annotation.png similarity index 100% rename from docs/docker-for-mac/images/docker-app-in-apps-no-annotation.png rename to docker-for-mac/images/docker-app-in-apps-no-annotation.png diff --git a/docs/docker-for-mac/images/docker-app-in-apps.png b/docker-for-mac/images/docker-app-in-apps.png similarity index 100% rename from docs/docker-for-mac/images/docker-app-in-apps.png rename to docker-for-mac/images/docker-app-in-apps.png diff --git a/docs/docker-for-mac/images/docker-app-log.png b/docker-for-mac/images/docker-app-log.png similarity index 100% rename from docs/docker-for-mac/images/docker-app-log.png rename to docker-for-mac/images/docker-app-log.png diff --git a/docs/docker-for-mac/images/docker-app.png b/docker-for-mac/images/docker-app.png similarity index 100% rename from docs/docker-for-mac/images/docker-app.png rename to docker-for-mac/images/docker-app.png diff --git a/docs/docker-for-mac/images/docker-for-mac-and-toolbox.png b/docker-for-mac/images/docker-for-mac-and-toolbox.png similarity index 100% rename from docs/docker-for-mac/images/docker-for-mac-and-toolbox.png rename to docker-for-mac/images/docker-for-mac-and-toolbox.png diff --git a/docs/docker-for-mac/images/docker-for-mac-install.png b/docker-for-mac/images/docker-for-mac-install.png similarity index 100% rename from docs/docker-for-mac/images/docker-for-mac-install.png rename to docker-for-mac/images/docker-for-mac-install.png diff --git a/docs/docker-for-mac/images/download.png b/docker-for-mac/images/download.png similarity index 100% rename from docs/docker-for-mac/images/download.png rename to docker-for-mac/images/download.png diff --git a/docs/docker-for-mac/images/hello-world-nginx.png b/docker-for-mac/images/hello-world-nginx.png similarity index 100% rename from docs/docker-for-mac/images/hello-world-nginx.png rename to docker-for-mac/images/hello-world-nginx.png diff --git a/docs/docker-for-mac/images/hello-world.png b/docker-for-mac/images/hello-world.png similarity index 100% rename from docs/docker-for-mac/images/hello-world.png rename to docker-for-mac/images/hello-world.png diff --git a/docs/docker-for-mac/images/hockeyapp-docker.png b/docker-for-mac/images/hockeyapp-docker.png similarity index 100% rename from docs/docker-for-mac/images/hockeyapp-docker.png rename to docker-for-mac/images/hockeyapp-docker.png diff --git a/docs/docker-for-mac/images/log-files-finder.png b/docker-for-mac/images/log-files-finder.png similarity index 100% rename from docs/docker-for-mac/images/log-files-finder.png rename to docker-for-mac/images/log-files-finder.png diff --git a/docs/docker-for-mac/images/logs.png b/docker-for-mac/images/logs.png similarity index 100% rename from docs/docker-for-mac/images/logs.png rename to docker-for-mac/images/logs.png diff --git a/docs/docker-for-mac/images/mac-activity-monitor-docker-app.png b/docker-for-mac/images/mac-activity-monitor-docker-app.png similarity index 100% rename from docs/docker-for-mac/images/mac-activity-monitor-docker-app.png rename to docker-for-mac/images/mac-activity-monitor-docker-app.png diff --git a/docs/docker-for-mac/images/mac-install-success-docker-ps.png b/docker-for-mac/images/mac-install-success-docker-ps.png similarity index 100% rename from docs/docker-for-mac/images/mac-install-success-docker-ps.png rename to docker-for-mac/images/mac-install-success-docker-ps.png diff --git a/docs/docker-for-mac/images/mac-install-success-docker-wait.png b/docker-for-mac/images/mac-install-success-docker-wait.png similarity index 100% rename from docs/docker-for-mac/images/mac-install-success-docker-wait.png rename to docker-for-mac/images/mac-install-success-docker-wait.png diff --git a/docs/docker-for-mac/images/menu.png b/docker-for-mac/images/menu.png similarity index 100% rename from docs/docker-for-mac/images/menu.png rename to docker-for-mac/images/menu.png diff --git a/docs/docker-for-mac/images/privacy.png b/docker-for-mac/images/privacy.png similarity index 100% rename from docs/docker-for-mac/images/privacy.png rename to docker-for-mac/images/privacy.png diff --git a/docs/docker-for-mac/images/proxy-settings.png b/docker-for-mac/images/proxy-settings.png similarity index 100% rename from docs/docker-for-mac/images/proxy-settings.png rename to docker-for-mac/images/proxy-settings.png diff --git a/docs/docker-for-mac/images/remove-app-instances.png b/docker-for-mac/images/remove-app-instances.png similarity index 100% rename from docs/docker-for-mac/images/remove-app-instances.png rename to docker-for-mac/images/remove-app-instances.png diff --git a/docs/docker-for-mac/images/settings-advanced.png b/docker-for-mac/images/settings-advanced.png similarity index 100% rename from docs/docker-for-mac/images/settings-advanced.png rename to docker-for-mac/images/settings-advanced.png diff --git a/docs/docker-for-mac/images/settings-diagnose-id.png b/docker-for-mac/images/settings-diagnose-id.png similarity index 100% rename from docs/docker-for-mac/images/settings-diagnose-id.png rename to docker-for-mac/images/settings-diagnose-id.png diff --git a/docs/docker-for-mac/images/settings-diagnose.png b/docker-for-mac/images/settings-diagnose.png similarity index 100% rename from docs/docker-for-mac/images/settings-diagnose.png rename to docker-for-mac/images/settings-diagnose.png diff --git a/docs/docker-for-mac/images/settings-diagnostic-results-only.png b/docker-for-mac/images/settings-diagnostic-results-only.png similarity index 100% rename from docs/docker-for-mac/images/settings-diagnostic-results-only.png rename to docker-for-mac/images/settings-diagnostic-results-only.png diff --git a/docs/docker-for-mac/images/settings-file-share-choose.png b/docker-for-mac/images/settings-file-share-choose.png similarity index 100% rename from docs/docker-for-mac/images/settings-file-share-choose.png rename to docker-for-mac/images/settings-file-share-choose.png diff --git a/docs/docker-for-mac/images/settings-file-share.png b/docker-for-mac/images/settings-file-share.png similarity index 100% rename from docs/docker-for-mac/images/settings-file-share.png rename to docker-for-mac/images/settings-file-share.png diff --git a/docs/docker-for-mac/images/settings-uninstall.png b/docker-for-mac/images/settings-uninstall.png similarity index 100% rename from docs/docker-for-mac/images/settings-uninstall.png rename to docker-for-mac/images/settings-uninstall.png diff --git a/docs/docker-for-mac/images/settings.png b/docker-for-mac/images/settings.png similarity index 100% rename from docs/docker-for-mac/images/settings.png rename to docker-for-mac/images/settings.png diff --git a/docs/docker-for-mac/images/startup-help.png b/docker-for-mac/images/startup-help.png similarity index 100% rename from docs/docker-for-mac/images/startup-help.png rename to docker-for-mac/images/startup-help.png diff --git a/docs/docker-for-mac/images/toolbox-install.png b/docker-for-mac/images/toolbox-install.png similarity index 100% rename from docs/docker-for-mac/images/toolbox-install.png rename to docker-for-mac/images/toolbox-install.png diff --git a/docs/docker-for-mac/images/whale-in-menu-bar.png b/docker-for-mac/images/whale-in-menu-bar.png similarity index 100% rename from docs/docker-for-mac/images/whale-in-menu-bar.png rename to docker-for-mac/images/whale-in-menu-bar.png diff --git a/docs/docker-for-mac/images/whale-x.png b/docker-for-mac/images/whale-x.png similarity index 100% rename from docs/docker-for-mac/images/whale-x.png rename to docker-for-mac/images/whale-x.png diff --git a/docs/docker-for-mac/images/whale.png b/docker-for-mac/images/whale.png similarity index 100% rename from docs/docker-for-mac/images/whale.png rename to docker-for-mac/images/whale.png diff --git a/docs/docker-for-mac/index.md b/docker-for-mac/index.md similarity index 100% rename from docs/docker-for-mac/index.md rename to docker-for-mac/index.md diff --git a/docs/docker-for-mac/menu.md b/docker-for-mac/menu.md similarity index 100% rename from docs/docker-for-mac/menu.md rename to docker-for-mac/menu.md diff --git a/docs/docker-for-mac/multi-arch.md b/docker-for-mac/multi-arch.md similarity index 100% rename from docs/docker-for-mac/multi-arch.md rename to docker-for-mac/multi-arch.md diff --git a/docs/docker-for-mac/networking.md b/docker-for-mac/networking.md similarity index 100% rename from docs/docker-for-mac/networking.md rename to docker-for-mac/networking.md diff --git a/docs/docker-for-mac/opensource.md b/docker-for-mac/opensource.md similarity index 100% rename from docs/docker-for-mac/opensource.md rename to docker-for-mac/opensource.md diff --git a/docs/docker-for-mac/osxfs.md b/docker-for-mac/osxfs.md similarity index 100% rename from docs/docker-for-mac/osxfs.md rename to docker-for-mac/osxfs.md diff --git a/docs/docker-for-mac/release-notes.md b/docker-for-mac/release-notes.md similarity index 100% rename from docs/docker-for-mac/release-notes.md rename to docker-for-mac/release-notes.md diff --git a/docs/docker-for-mac/troubleshoot.md b/docker-for-mac/troubleshoot.md similarity index 100% rename from docs/docker-for-mac/troubleshoot.md rename to docker-for-mac/troubleshoot.md diff --git a/docs/docker-for-windows/examples.md b/docker-for-windows/examples.md similarity index 100% rename from docs/docker-for-windows/examples.md rename to docker-for-windows/examples.md diff --git a/docs/docker-for-windows/faqs.md b/docker-for-windows/faqs.md similarity index 100% rename from docs/docker-for-windows/faqs.md rename to docker-for-windows/faqs.md diff --git a/docs/docker-for-windows/images/Config-popup.png b/docker-for-windows/images/Config-popup.png similarity index 100% rename from docs/docker-for-windows/images/Config-popup.png rename to docker-for-windows/images/Config-popup.png diff --git a/docs/docker-for-windows/images/Docker-win-settings.png b/docker-for-windows/images/Docker-win-settings.png similarity index 100% rename from docs/docker-for-windows/images/Docker-win-settings.png rename to docker-for-windows/images/Docker-win-settings.png diff --git a/docs/docker-for-windows/images/Start-Authorize.png b/docker-for-windows/images/Start-Authorize.png similarity index 100% rename from docs/docker-for-windows/images/Start-Authorize.png rename to docker-for-windows/images/Start-Authorize.png diff --git a/docs/docker-for-windows/images/Start-init.png b/docker-for-windows/images/Start-init.png similarity index 100% rename from docs/docker-for-windows/images/Start-init.png rename to docker-for-windows/images/Start-init.png diff --git a/docs/docker-for-windows/images/about-docker-win.png b/docker-for-windows/images/about-docker-win.png similarity index 100% rename from docs/docker-for-windows/images/about-docker-win.png rename to docker-for-windows/images/about-docker-win.png diff --git a/docs/docker-for-windows/images/chat.png b/docker-for-windows/images/chat.png similarity index 100% rename from docs/docker-for-windows/images/chat.png rename to docker-for-windows/images/chat.png diff --git a/docs/docker-for-windows/images/config-popup-menu-win-switch-containers.png b/docker-for-windows/images/config-popup-menu-win-switch-containers.png similarity index 100% rename from docs/docker-for-windows/images/config-popup-menu-win-switch-containers.png rename to docker-for-windows/images/config-popup-menu-win-switch-containers.png diff --git a/docs/docker-for-windows/images/config-popup-menu-win.png b/docker-for-windows/images/config-popup-menu-win.png similarity index 100% rename from docs/docker-for-windows/images/config-popup-menu-win.png rename to docker-for-windows/images/config-popup-menu-win.png diff --git a/docs/docker-for-windows/images/desktop-whale-icon.png b/docker-for-windows/images/desktop-whale-icon.png similarity index 100% rename from docs/docker-for-windows/images/desktop-whale-icon.png rename to docker-for-windows/images/desktop-whale-icon.png diff --git a/docs/docker-for-windows/images/diagnose-d4win-issues-template.png b/docker-for-windows/images/diagnose-d4win-issues-template.png similarity index 100% rename from docs/docker-for-windows/images/diagnose-d4win-issues-template.png rename to docker-for-windows/images/diagnose-d4win-issues-template.png diff --git a/docs/docker-for-windows/images/diagnose-feedback-id-win.png b/docker-for-windows/images/diagnose-feedback-id-win.png similarity index 100% rename from docs/docker-for-windows/images/diagnose-feedback-id-win.png rename to docker-for-windows/images/diagnose-feedback-id-win.png diff --git a/docs/docker-for-windows/images/diagnose-feedback-win.png b/docker-for-windows/images/diagnose-feedback-win.png similarity index 100% rename from docs/docker-for-windows/images/diagnose-feedback-win.png rename to docker-for-windows/images/diagnose-feedback-win.png diff --git a/docs/docker-for-windows/images/docker-daemon.png b/docker-for-windows/images/docker-daemon.png similarity index 100% rename from docs/docker-for-windows/images/docker-daemon.png rename to docker-for-windows/images/docker-daemon.png diff --git a/docs/docker-for-windows/images/docker-is-running.png b/docker-for-windows/images/docker-is-running.png similarity index 100% rename from docs/docker-for-windows/images/docker-is-running.png rename to docker-for-windows/images/docker-is-running.png diff --git a/docs/docker-for-windows/images/download.png b/docker-for-windows/images/download.png similarity index 100% rename from docs/docker-for-windows/images/download.png rename to docker-for-windows/images/download.png diff --git a/docs/docker-for-windows/images/hyper-v-message.png b/docker-for-windows/images/hyper-v-message.png similarity index 100% rename from docs/docker-for-windows/images/hyper-v-message.png rename to docker-for-windows/images/hyper-v-message.png diff --git a/docs/docker-for-windows/images/import-docker-content.png b/docker-for-windows/images/import-docker-content.png similarity index 100% rename from docs/docker-for-windows/images/import-docker-content.png rename to docker-for-windows/images/import-docker-content.png diff --git a/docs/docker-for-windows/images/installer-allow.png b/docker-for-windows/images/installer-allow.png similarity index 100% rename from docs/docker-for-windows/images/installer-allow.png rename to docker-for-windows/images/installer-allow.png diff --git a/docs/docker-for-windows/images/installer-finishes.png b/docker-for-windows/images/installer-finishes.png similarity index 100% rename from docs/docker-for-windows/images/installer-finishes.png rename to docker-for-windows/images/installer-finishes.png diff --git a/docs/docker-for-windows/images/installer-in-downloads.png b/docker-for-windows/images/installer-in-downloads.png similarity index 100% rename from docs/docker-for-windows/images/installer-in-downloads.png rename to docker-for-windows/images/installer-in-downloads.png diff --git a/docs/docker-for-windows/images/installer-license-ok.png b/docker-for-windows/images/installer-license-ok.png similarity index 100% rename from docs/docker-for-windows/images/installer-license-ok.png rename to docker-for-windows/images/installer-license-ok.png diff --git a/docs/docker-for-windows/images/installer-license-show.png b/docker-for-windows/images/installer-license-show.png similarity index 100% rename from docs/docker-for-windows/images/installer-license-show.png rename to docker-for-windows/images/installer-license-show.png diff --git a/docs/docker-for-windows/images/installer-progress-bar.png b/docker-for-windows/images/installer-progress-bar.png similarity index 100% rename from docs/docker-for-windows/images/installer-progress-bar.png rename to docker-for-windows/images/installer-progress-bar.png diff --git a/docs/docker-for-windows/images/proxies.png b/docker-for-windows/images/proxies.png similarity index 100% rename from docs/docker-for-windows/images/proxies.png rename to docker-for-windows/images/proxies.png diff --git a/docs/docker-for-windows/images/run-nginx.png b/docker-for-windows/images/run-nginx.png similarity index 100% rename from docs/docker-for-windows/images/run-nginx.png rename to docker-for-windows/images/run-nginx.png diff --git a/docs/docker-for-windows/images/settings-cpu-ram.png b/docker-for-windows/images/settings-cpu-ram.png similarity index 100% rename from docs/docker-for-windows/images/settings-cpu-ram.png rename to docker-for-windows/images/settings-cpu-ram.png diff --git a/docs/docker-for-windows/images/settings-docker-win.png b/docker-for-windows/images/settings-docker-win.png similarity index 100% rename from docs/docker-for-windows/images/settings-docker-win.png rename to docker-for-windows/images/settings-docker-win.png diff --git a/docs/docker-for-windows/images/settings-general.png b/docker-for-windows/images/settings-general.png similarity index 100% rename from docs/docker-for-windows/images/settings-general.png rename to docker-for-windows/images/settings-general.png diff --git a/docs/docker-for-windows/images/settings-kernel.png b/docker-for-windows/images/settings-kernel.png similarity index 100% rename from docs/docker-for-windows/images/settings-kernel.png rename to docker-for-windows/images/settings-kernel.png diff --git a/docs/docker-for-windows/images/settings-network.png b/docker-for-windows/images/settings-network.png similarity index 100% rename from docs/docker-for-windows/images/settings-network.png rename to docker-for-windows/images/settings-network.png diff --git a/docs/docker-for-windows/images/settings-reset.png b/docker-for-windows/images/settings-reset.png similarity index 100% rename from docs/docker-for-windows/images/settings-reset.png rename to docker-for-windows/images/settings-reset.png diff --git a/docs/docker-for-windows/images/settings-shared-drives.png b/docker-for-windows/images/settings-shared-drives.png similarity index 100% rename from docs/docker-for-windows/images/settings-shared-drives.png rename to docker-for-windows/images/settings-shared-drives.png diff --git a/docs/docker-for-windows/images/settings-toolbox-import.png b/docker-for-windows/images/settings-toolbox-import.png similarity index 100% rename from docs/docker-for-windows/images/settings-toolbox-import.png rename to docker-for-windows/images/settings-toolbox-import.png diff --git a/docs/docker-for-windows/images/submit-token.png b/docker-for-windows/images/submit-token.png similarity index 100% rename from docs/docker-for-windows/images/submit-token.png rename to docker-for-windows/images/submit-token.png diff --git a/docs/docker-for-windows/images/whale-systray.png b/docker-for-windows/images/whale-systray.png similarity index 100% rename from docs/docker-for-windows/images/whale-systray.png rename to docker-for-windows/images/whale-systray.png diff --git a/docs/docker-for-windows/images/whale-x.png b/docker-for-windows/images/whale-x.png similarity index 100% rename from docs/docker-for-windows/images/whale-x.png rename to docker-for-windows/images/whale-x.png diff --git a/docs/docker-for-windows/images/win-file-and-printer-sharing.png b/docker-for-windows/images/win-file-and-printer-sharing.png similarity index 100% rename from docs/docker-for-windows/images/win-file-and-printer-sharing.png rename to docker-for-windows/images/win-file-and-printer-sharing.png diff --git a/docs/docker-for-windows/images/win-install-success-hello-world.png b/docker-for-windows/images/win-install-success-hello-world.png similarity index 100% rename from docs/docker-for-windows/images/win-install-success-hello-world.png rename to docker-for-windows/images/win-install-success-hello-world.png diff --git a/docs/docker-for-windows/images/win-install-success-popup.png b/docker-for-windows/images/win-install-success-popup.png similarity index 100% rename from docs/docker-for-windows/images/win-install-success-popup.png rename to docker-for-windows/images/win-install-success-popup.png diff --git a/docs/docker-for-windows/images/win-install-success.png b/docker-for-windows/images/win-install-success.png similarity index 100% rename from docs/docker-for-windows/images/win-install-success.png rename to docker-for-windows/images/win-install-success.png diff --git a/docs/docker-for-windows/index.md b/docker-for-windows/index.md similarity index 100% rename from docs/docker-for-windows/index.md rename to docker-for-windows/index.md diff --git a/docs/docker-for-windows/menu.md b/docker-for-windows/menu.md similarity index 100% rename from docs/docker-for-windows/menu.md rename to docker-for-windows/menu.md diff --git a/docs/docker-for-windows/opensource.md b/docker-for-windows/opensource.md similarity index 100% rename from docs/docker-for-windows/opensource.md rename to docker-for-windows/opensource.md diff --git a/docs/docker-for-windows/release-notes.md b/docker-for-windows/release-notes.md similarity index 100% rename from docs/docker-for-windows/release-notes.md rename to docker-for-windows/release-notes.md diff --git a/docs/docker-for-windows/troubleshoot.md b/docker-for-windows/troubleshoot.md similarity index 100% rename from docs/docker-for-windows/troubleshoot.md rename to docker-for-windows/troubleshoot.md diff --git a/docs/Dockerfile b/docs/Dockerfile deleted file mode 100644 index 6ccd6b2d3a..0000000000 --- a/docs/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM docs/base:oss -MAINTAINER Docker Docs - -# because both the 2 dir's are going into the root -env PROJECT= - -# To get the git info for this repo -COPY . /src -#RUN rm -rf /docs/content/$PROJECT/ -COPY . /docs/content/$PROJECT/ diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index 72fb4bf9c8..0000000000 --- a/docs/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -.PHONY: all default docs docs-build docs-shell shell test - -# to allow `make DOCSDIR=docs docs-shell` (to create a bind mount in docs) -DOCS_MOUNT := $(if $(DOCSDIR),-v $(CURDIR)/$(DOCSDIR):/$(DOCSDIR)) - -# to allow `make DOCSPORT=9000 docs` -DOCSPORT := 8000 - -# 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 - -GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null) -DOCKER_IMAGE := docker$(if $(GIT_BRANCH),:$(GIT_BRANCH)) -DOCKER_DOCS_IMAGE := docs-base$(if $(GIT_BRANCH),:$(GIT_BRANCH)) - - -DOCKER_RUN_DOCS := docker run --rm -it $(DOCS_MOUNT) -e AWS_S3_BUCKET -e NOCACHE - -# for some docs workarounds (see below in "docs-build" target) -GITCOMMIT := $(shell git rev-parse --short HEAD 2>/dev/null) - -default: docs - -docs: docs-build - $(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 -e DOCKERHOST "$(DOCKER_DOCS_IMAGE)" hugo server --port=$(DOCSPORT) --baseUrl=$(HUGO_BASE_URL) --bind=$(HUGO_BIND_IP) - -docs-draft: docs-build - $(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 -e DOCKERHOST "$(DOCKER_DOCS_IMAGE)" hugo server --buildDrafts="true" --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 - -test: docs-build - $(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" - -docs-build: - docker build -t "$(DOCKER_DOCS_IMAGE)" . diff --git a/docs/images/chat.png b/images/chat.png similarity index 100% rename from docs/images/chat.png rename to images/chat.png diff --git a/docs/images/download-mac.png b/images/download-mac.png similarity index 100% rename from docs/images/download-mac.png rename to images/download-mac.png diff --git a/docs/images/download-win.png b/images/download-win.png similarity index 100% rename from docs/images/download-win.png rename to images/download-win.png diff --git a/docs/images/download.png b/images/download.png similarity index 100% rename from docs/images/download.png rename to images/download.png diff --git a/docs/images/whale-x.png b/images/whale-x.png similarity index 100% rename from docs/images/whale-x.png rename to images/whale-x.png diff --git a/project/DOCS.md b/project/DOCS.md deleted file mode 100644 index 79b7b02ec5..0000000000 --- a/project/DOCS.md +++ /dev/null @@ -1,3 +0,0 @@ -## documentation - -Documentation is now maintained and deployed by the documentation team. diff --git a/project/ISSUE-TRIAGE.md b/project/ISSUE-TRIAGE.md deleted file mode 100644 index e7b72a9924..0000000000 --- a/project/ISSUE-TRIAGE.md +++ /dev/null @@ -1,161 +0,0 @@ -Triaging of issues ------------------- - -Triage provides an important way to contribute to an open source -project. Triage helps ensure issues resolve quickly by: - -- Describing the issue's intent and purpose is conveyed - precisely. This is necessary because it can be difficult for an - issue to explain how an end user experiences a problem and what - actions they took. -- Giving a contributor the information they need before they commit to - resolving an issue. -- Lowering the issue count by preventing duplicate issues. -- Streamlining the development process by preventing duplicate discussions. - -If you don't have time to code, consider helping with triage. The -community will thank you for saving them time by spending some of -yours. - -### 1. Ensure the issue contains basic information - -Before triaging an issue very far, make sure that the issue's author -provided the standard issue information. This will help you make an -educated recommendation on how this to categorize the issue. Standard -information that *must* be included in most issues are things such as: - -- the output of: - - `pinata diagnose -u` on OSX - - `DockerDebugInfo.ps1` using Powershell on Windows -- a reproducible case if this is a bug, Dockerfiles FTW -- page URL if this is a docs issue or the name of a man page - -Depending on the issue, you might not feel all this information is -needed. Use your best judgement. If you cannot triage an issue using -what its author provided, explain kindly to the author that they must -provide the above information to clarify the problem. - -If the author provides the standard information but you are still -unable to triage the issue, request additional information. Do this -kindly and politely because you are asking for more of the author's -time. - -If the author does not respond requested information within the -timespan of a week, close the issue with a kind note stating that the -author can request for the issue to be reopened when the necessary -information is provided. - -### 2. Classify the Issue - -An issue can have multiple of the following labels. - -#### Issue kind - -| Kind | Description | -|------------------|---------------------------------------------------------------------------------------------------------------------------------| -| kind/bug | Bugs are bugs. The cause may or may not be known at triage time so debugging should be taken account into the time estimate. | -| kind/docs | Writing documentation, man pages, articles, blogs, or other significant word-driven task. | -| kind/enhancement | Enhancement are not bugs or new features but can drastically improve usability or performance of a project component. | -| kind/feature | Functionality or other elements that the project does not currently support. Features are new and shiny. | -| kind/performance | Performance-related issues | -| kind/question | Contains a user or contributor question requiring a response. | -| kind/roadmap | Issue to track large items that need to be delivered. See [roadmap docs](ROADMAP.md) for more details. | -| kind/tracking | High-level issue to keep track of other issues. Tracking issues can be closed when all child issues are resolved. | -| kind/tracking/users | High-level issue to keep track of user feedback. | - -#### Functional area - -| Area Common | Description | -|---------------------------|------------------------------------------------------------------------------------------------------------------------| -| area/qa | Issue related to code quality and infrasture-related tasks to deal with automated QA | -| area/logging | Ensure consistent logging accross all the components | -| area/support | The built-in features for supporting users and reporting defects to the engineering team | -| area/tokens | Token mechanism to control the growth of beta users | -| area/sdk | | -| area/agent | | -| area/proxy | | -| area/upstream | Upstream bugs which needs to be reported | -| area/tools | Issues about the integration of open-source Docker tools (machine, toolbox, notary, etc.) in Pinata | - -| Area Windows | Description | -|---------------------------|------------------------------------------------------------------------------------------------------------------------| -| area/windows | | -| area/windows/build | | -| area/windows/installer | | -| area/windows/menubar | | -| area/windows/cli | | - -| Area OSX | Description | -|---------------------------|------------------------------------------------------------------------------------------------------------------------| -| area/osx | | -| area/osx/build | | -| area/osx/menubar | | -| area/osx/prefpane | | -| area/osx/installer | | -| area/osx/watchdog | | -| area/osx/cli | | - -| Area Backend | Description | -|------------------------------|---------------------------------------------------------------------------------------------------------------------| -| area/backend | General issues about the backend. If possible backend issues should have a more specific labels than this one. | -| area/backend/build | Build issues related to the backend components (OPAM packages, etc.) | -| area/backend/storage/volumes | Host/container file-sharing issues | -| area/backend/network/nat | NAT networking issues | -| area/backend/network/hostnet | Hostnet networking issues | -| area/backend/network/mdns | mDNS issues | -| area/backend/run/qemu | Issues related to the QEMU execution driver | -| area/backend/run/xhyve | Issues related with the Xhyve hypervisor | -| area/backend/run/hyper-v | Issues related with the Hype-V hypervisor | -| area/backend/moby/linux | Issues with the OS distribution for running Linux containers | -| area/backend/moby/windows | Issues with the OS distribution for running Windows containers | - -### 3. Prioritizing issues - -Issues with a known resolution date should be given a priority and attached to a milestone. -Issues that do not have a known resolution date should have a priority attached as this will assist with planning. - -The following labels are used to indicate the degree of priority (from more urgent to less urgent). - -| Priority | Description | -|-------------|-----------------------------------------------------------------------------------------------------------------------------------| -| priority/P0 | Urgent: Security, critical bugs, blocking issues. P0 basically means drop everything you are doing until this issue is addressed. | -| prority/unknown | The resolution date and/or the priority of that issue unclear. That issue should be discussed in a weekly meeting. | -| priority/P1 | Important: P1 issues are a top priority and a must-have for the next release. | -| priority/P2 | Normal priority: default priority applied. | -| priority/P3 | Best effort: those are nice to have / minor issues. | - -The release manager (or the maintainer if they know what they are -doing) is responsible for prioritizing issues. - -### 4. Handling User Reported Issues - -Issues that have been reported by a user via email to beta-feedback@docker.com, on the Docker Forums or by other means MUST have the `kind/tracking/user` label attached. - -A user reported issue is prioritized in accordance with the following table: - -| Priority | Descrtiption | -|----------|-------------------------------------------------------------------------------------------------------------------| -| P0 | As P1 but effects a large portion of the user base. Please consult the release manager before applying this label | -| P1 | I can't install/use the app at all - it's totally broken! | -| P2 | The app doesn't work and it severely impacts my workflow | -| P3 | I have a problem that effects my workflow but it doesn't stop me getting work done | - -If multiple reports of the same issue are provided, this will enable the release manager or PM to bump the priority of the issue. -Links to the source of the reports should be added to the GitHub issue. - -### 4. Milestone - -There should be a milestone per planned release. The release managers are -reponsible for assigning issues to milestones, in coordination with PM and -the rest of the engineering group. - -### 5. Status - -Status labels can be attached to issues to add more detailed status than just "open" and "closed". These are particularly useful to track the status of roadmap issues. - -| Label | Description | -|---------------------------|------------------------------------------------------------------------------------------------------------------------| -| status/at-risk | Issue may not land in the milestone specified | -| status/delayed | Issue will not land in the milestone specified | -| status/in-progress | Issue is currently being worked on | -| status/postponed | Issue is being pushed back and milestone is yet to be determined | diff --git a/project/MAC-RELEASE.md b/project/MAC-RELEASE.md deleted file mode 100644 index c20c78df0b..0000000000 --- a/project/MAC-RELEASE.md +++ /dev/null @@ -1,59 +0,0 @@ -### Preparing a Mac release - -This document describes the Mac-specific part of the release process. See -[RELEASE.md](RELEASE.md) for the overall process. - -### Update metadata - -- Run `make versions` to verify that all version strings are - correct. Manual check: - - - Verify that the version up to date, of the form - `--dev` (see - `README.md > Versioning `). (like "1.9.1-beta2-dev"). The version is - stored in `CFBundleShortVersionString` in - `v1/mac/src/docker-app/docker/docker/Info.plist` and the xcode - project can be opened with `make dev`. - - - Verify that the right version is in - [docker-diagnose](../v1/docker-diagnose/src/diagnose.ml) - - - Verify that the right version is in the [CHANGELOG](../CHANGELOG) - -- Update the date and add final entries in the CHANGELOG. - - -### Run tests - -Verify that the tests pass: - -``` -make test -``` - -If brave enough, verify that the long-running tests also work: - -``` -make fulltest -``` - -Additional manual tests (optional): - -1. Verify that both auto-update and download from dmg works by - - uninstalling current version (use button in settings) - - download previous master build from hockeyapp and install from dmg - - auto update to latest master - -2. Verify that Docker.app is still running after a reboot. - -3. Build and run some test containers to see that everything works as expected. - -See also [MAC-TESTING.md](MAC-TESTING.md) - -### Tag the release - -See [RELEASE.md](RELEASE.md) for details. - -### Verify and test build - -See [MAC-TESTING.md](MAC-TESTING.md) for pre-release test plan. diff --git a/project/MAC-TESTING.md b/project/MAC-TESTING.md deleted file mode 100644 index b609143813..0000000000 --- a/project/MAC-TESTING.md +++ /dev/null @@ -1,54 +0,0 @@ -### Mac test plan - -- [ ] Basic installation: Uninstall any running Docker.app's and then install the build - -Run release tests on the build, e.g. by replacing BUILD with the correct version in the following bash script: - -``` -# make sure v1/mac/build is empty first, otherwise that build will be tested -export BUILD="1.12.xx.xx" -export URL="https://download-stage.docker.com/mac/rc/$BUILD/Docker.dmg" -./rt-local -l release,installer -vv -e "D4X_INSTALLER_URL=${URL}" -x run -``` - -VMs can now be created easily with `./rt-vm` from `tests/` (requires access to Cambridge office network). - -Pinata-CI builds for tags will appear here: https://rod.cam.docker.com:8443 - -- [ ] OS X 10.10 release tests -- [ ] OS X 10.11 release tests -- [ ] OS X 10.12 release tests - -- [ ] Auto update: Uninstall build, then install previous test build and auto update to the current one. If a test build is not available, pick a master build close to previous release and auto update to current release. -- [ ] Auto update on 10.12: Install previous master build on OSX 10.12 and upgrade to latest version to verify that auto updater works -- [ ] Check that events appear in Mixpanel - -- [ ] Verify that experimental features are enabled/disabled (beta=enabled, stable=disabled) - -UI tests (optional, but should be tested if there is a relevant change) - -- [ ] Test that migration from Toolbox works as expected -- [ ] Test that filesharing UI works -- [ ] Test that insecure registries and registry mirrors work - -On release binary: -- [ ] Verify that Info.plist auto updates from the correct appcast endpoint. -- [ ] Run `./rt-local -l release -v -x run` a last time to check that tests are still green -- [ ] Verify that `docker-diagnose` works on release build (after #4869) -- [ ] Test moving between channels, see below - -#### Channel tests - -If releasing beta: - -1. install current stable then attempt beta installation over top -2. install current stable over top of testing beta - -Both should result in warnings/errors and a functional installation of the new install afterward. - -If releasing stable: - -1. install current beta then attempt stable installation over top -2. install current beta over top of testing stable - -Both should result in warnings/errors and a functional installation of the new install afterward. diff --git a/project/RELEASE-CHECKLIST.md b/project/RELEASE-CHECKLIST.md deleted file mode 100644 index ed888eebe8..0000000000 --- a/project/RELEASE-CHECKLIST.md +++ /dev/null @@ -1,43 +0,0 @@ -This issue tracks progress of the upcoming release of Docker for Mac/Windows. - -### Release plan - -- [ ] Reschedule tickets that will not be fixed for this release (@djs55, @dgageot and all) - -#### Release preparations on Monday - -- [ ] Announce release plans in #pinata-dev (@magnuss) -- [ ] Pre-release meeting Monday (@magnuss): [Agenda](https://docs.google.com/a/docker.com/document/d/1b_Mfe3XjW8OOCoUfyy4luY9yZOSakJvXy3Ooz4JjK5A/edit?usp=sharing) -- Mac (@djs55) - - [ ] Prepare Mac [CHANGELOG](https://github.com/docker/pinata/blob/master/CHANGELOG) - - [ ] Build Mac UI complete binary (master build is UI complete) -- Windows (@dgageot) - - [ ] Prepare Windows [CHANGELOG](https://github.com/docker/pinata/blob/master/win/CHANGELOG) - - [ ] Build Windows UI complete binary -- Docs (@londoncalling) (may be delayed) - - [ ] Prepare release notes based on [Mac CHANGELOG](https://github.com/docker/pinata/blob/master/CHANGELOG) - - [ ] Prepare release notes based on [Windows CHANGELOG](https://github.com/docker/pinata/blob/master/win/CHANGELOG) - - [ ] Update docs based Windows release binary when ready - - [ ] Update docs based on Mac release binary when read - -#### Release preparations on Tuesday - -- [ ] Windows binaries (@dgageot) - - [ ] Build RC and announce in #pinata-dev - - [ ] Test RC (see TODO for test plan) -- [ ] Mac binaries (@magnuss) - - [ ] Build RC - announce in #pinata-dev - - [ ] Test RC (see TODO for test plan) -- [ ] If RCs works fine, tag release binaries (@magnuss, @dgageot) -- [ ] Update License.tar.gz (@frenchben) - -#### Synchronised release of binaries - -- [ ] Release Win/Mac binaries with release notes (@magnuss) -- [ ] Announce in #ship-it, #pinata and #pinata-dev (@magnuss) - -#### Post-release - -- [ ] Deploy docs to docs.docker.com (@londoncalling) -- [ ] Bump Mac version (@jeanlaurent) -- [ ] Bump Win version (@dgageot) \ No newline at end of file diff --git a/project/RELEASE.md b/project/RELEASE.md deleted file mode 100644 index f6dac44743..0000000000 --- a/project/RELEASE.md +++ /dev/null @@ -1,325 +0,0 @@ -# Project Pinata release process - -The Pinata release process currently takes two days to allow the teams in each time zone to prepare for the release. The first day is for planning and merging final PRs and freezing the UI. The second day is for creating and testing final binaries before the actual release in the afternoon/evening. If the release is to be synchronised with a documentation release, the documentation team also needs time to prepare final changes after the binaries have been built. - -This document describes the release process as of July 5th 2016. - -Jump to - - - [Summary: Release preparations day 1 ](#release-preparations-day-1) - - [Issue triaging](#issue-triaging) - - [Release meeting](#release-meeting) - - [Github tracking issue](#github-tracking-issues) - - [Updating CHANGELOGs](#changelogs) - - [Summary: Release preparations day 2](#release-preparations-day-2) - - [Tagging releases](#tagging-releases) - - [Synchronised release](#synchronised-release) - - [Troubleshooting](#troubleshooting) - - [Web UI](#web-ui) - - [Rollback Release](#rollback-release) - - [Update release notes with docker-release](#update-release-notes-with-docker-release) - - [Surgically updating the CHANGELOG](#surgically-updating-the-changelog) - - [Hotfixes and updates on stable channel](#hotfixes-and-updates-on-stable-channel) - - [Processes for PRs](#processes-for-prs) - - [Releasing a beta hotfix](#releasing-a-beta-hotfix) - - [Releasing a stable hotfix](#releasing-a-stable-hotfix) - -## Release preparations day 1 - -Summary: - -- Triage issues before release meeting ([see details below](#issue-triaging)) -- Prepare tracking issues on Github ([see details below](#github-tracking-issues)) -- Publish release plans in #pinata-dev which should contain: - - When next release is scheduled - - Link to agenda for the [release meeting](#release-meeting) - - Link to Github tracking issue - - Links to open Github issues for this milestone and remaining P0 issues. If there are many open issues it may also be useful with a reminder to triage them, as they will all be discussed in the release meeting. -- Prepare CHANGELOGs for Windows/Mac ([see details below](#changelogs)) -- Release meeting @ 5pm UK time ([see details below](#release-meeting)) -- When UI complete binaries are ready, send binary links and initial CHANGELOGs to documentation team - -#### Github tracking issues - -Each release is tracked by a tracking issue on Github. The tracking issue should include the tasks that should be completed per day and the person assigned to it, if relevant. The issue should be tagged `kind/tracking/release`, `area/osx` and `area/windows`. - -[List of earlier tracking issues](https://github.com/docker/pinata/issues?utf8=✓&q=is%3Aissue%20label%3Akind%2Ftracking%2Frelease%20) - -In addition, create a tracking issues for the test plans and link them from the main tracking issue. - -The Windows testing issue template is in `WIN-TESTING.md`, and the new issue should be called: `win: Release testing checklist` and be tagged with `kind/tracking/release` and `area/windows`. - -The Mac testing issue template is in `MAC-TESTING.md`, and the new issue should be called: `mac: Release testing checklist` and be tagged with `kind/tracking/release` and `area/osx`. - -#### Issue triaging - -Triage bugs on Github with the DRIs using the latest milestones defined on -https://github.com/docker/pinata/milestones - -See ISSUE-TRIAGE.md for details about the triaging process. - -#### CHANGELOGs - -Update the CHANGELOG files for Mac and Windows, with user-facing updates since the last release. - - add issue/PR number if available - - do not put names - - the "compare" feature of GitHub is helpful: - `https://github.com/docker/pinata/compare/...master` - -An initial CHANGELOG should be prepared prior to the release meeting so it can be discussed in the meeting and be ready for the documentation team. The final CHANGELOG will not be ready until actual release. Sync with docs team if there are large changes from the initial version. - -Remember to include docs in the list of changes if the release is synchronised with the binaries. - -The Windows and Mac CHANGELOGs are currently stored separately in [CHANGELOG](../CHANGELOG) and [win/CHANGELOG](../win/CHANGELOG). - -#### Release meeting - -The release meeting is held by the release manager on Mondays @ 5pm UK time. The agenda is posted in `#pinata-dev` Monday morning. - -Bluejeans link: https://bluejeans.com/747188286 - -Agenda should include - - Summary of previous release, discuss possible improvements - - Plans for next release (expected release time, release plans for documentation, engine upgrades etc) - - Discuss any open P0s on Github, plans for fixing them and/or if release should be delayed - - Triage open issues for current release milestone, move issues that will not be fixed in time - - Discuss UI changes for the release and if there are new features/UI that require documentation updates - - Go through [CHANGELOGs](#changelogs) for Windows/Mac - - If time: go through issues without an assigned milestones, in case there are important new issues - -Some earlier agendas -- [Beta 17 agenda](https://docs.google.com/document/d/1KdyKZ4Jvl4e42QSa4h42SZZaKvYmFKhXGzt1ApvvojM/edit) -- [Beta 13 agenda with notes](https://docs.google.com/document/d/1YPgm-oH_E1A4DylIlBXPz49WQ1hLVJjMEj3LmJkmRlU/edit) - -## Release preparations day 2 - -Summary: -- If all PRs are in (check with DRIs, @pinata-team on slack) tag a test release ([see details below](#release-candidate)) -- Follow release process per platform: [Windows](WIN-RELEASE.md) / [Mac](MAC-RELEASE.md) -- Test according to test plans: [Windows](WIN-TESTING.md) / [Mac](MAC-TESTING.md)). As a minimum the release should pass all `rt-local` tests with the `release` label. -- Tag release binaries for beta or stable channel ([see details below](#tagging-releases)) -- When release binaries are ready, run final tests on them and post binary link in `#pinata-dev` -- Send release binaries to @victoria with final release notes -- If synchronised release with docs, wait for final documentation updates -- Release binaries and announce the new release ([see below for details](#synchronise-release)) - -### Tagging releases - -#### Release candidate - -Creating a test release of Beta20 with Docker 1.12.0-rc4: - -* for Mac the tag should be: `mac-rc-v1.12.0-beta20` (note that for engine versions with a suffix, such as `1.12.0-rc4`, the tag is still `mac-rc-v1.12.0-beta20` due to limitations with current regexp) -* for Windows the tag should be: `win-test-v1.12.0-rc4-beta15` - -This will upload the artifact to the following endpoint, given a CI build of `8000`, and auto-publish it: - -``` -https://download-stage.docker.com/mac/rc/1.12.0.8000/ -https://download-stage.docker.com/win/test/1.12.0.8000/ -``` - -E.g.: -Make sure on right commit/branch, then: - -``` -VERSION="mac-rc-v1.12.0-beta20" -git tag $(VERSION) -a -m "Test release $(VERSION)" -git push upstream $(VERSION) -``` - -After the tag has been built the files on each endpoint should be: -``` -NOTES -Docker.dmg.sha256sum (mac) -Docker.dmg (mac) -InstallDocker.msi (win) -InstallDocker.msi.sha256sum (win) -``` - -For more details about the uploaded artifacts, see the CI build output. - -##### Beta Release - -Creating a beta release of Beta20 with Docker 1.12.0-rc4: - -* for Mac the tag should be: `mac-v1.12.0-beta20` -* for Windows the tag should be: `win-beta-v1.12.0-rc4-beta20` - -(Note that only the engine version is used in the Mac tag with suffixes such as `-rcX` ignored. E.g. the tag for `v1.12.0-rc4` is `mac-v1.12.0-beta20`. This is due to a limitation of the regexp used in the Mac build scripts. This is not the case for the Windows tag.) - -This will upload the artifact to the following endpoint, given a CI build of `8001`: -``` -https://download.docker.com/mac/beta/1.12.0.8001/ -https://download.docker.com/win/beta/1.12.0.8001/ -``` - -The binaries are not released until the `appcast.xml` file is updated - how to release them is described [below](#release-artifacts) - -##### Stable Release - -Creating a stable release with Docker 1.12.0: - -* for Mac the tag should be: `mac-v1.12.0` -* for Windows the tag should be: `win-v1.12.0` - -This will upload the artifact to the following endpoint, given a CI build of `8002`, and hold-it to be published manually: -``` -https://download.docker.com/mac/stable/1.12.0.8002/ -https://download.docker.com/win/stable/1.12.0.8002/ -``` - -The stable channel is not used until after 1.12 GA / Pinata GA. - -### Synchronised release - -When the builds have been tested and docs are ready for deployment, add Github release details, release the artifacts with `docker-release` and announce the release. - -Verify that the release notes are correct prior to release, as these will be shown in the Auto update window. - -Check that docs are up to date (verify release notes!), S3 downloads are working and correct and that -License.tar.gz has been updated. - -#### Create GitHub releases - -Create GitHub releases for Win and Mac and update the -release notes in https://github.com/docker/pinata/releases: - -- create a new release for the value of the Mac release tag -- copy/paste the related lines from the the `CHANGELOG` file -- create a new release for the value of the Win release tag -- copy/paste the related lines from the the `win/CHANGELOG` file - -#### Release artifacts - -To release the artifacts to the public from the beta channel, given a version of `1.12.0.8002` run: - -OSX: - -`docker-release --aws-access-key xxx --aws-secret-key xxx --channel beta --build 1.12.0.8002 --human 1.12.0-beta20 --arch mac -prod publish` - -Windows: - -`docker-release --aws-access-key xxx --aws-secret-key xxx --channel beta --build 1.12.0.8002 --human 1.12.0-beta20 --arch win -prod publish` - -Replace the AWS keys, the build number and the human string with the correct values. - -All other channels than stable and beta, are published automatically upon upload of the artifacts. Publishing a certain version also promotes that version as the 'latest' downloadable artifact, which will create the following endpoint for DOCS user download purpose (new user trying to download the edition) - -OSX: - -`https://download.docker.com/mac/stable/Docker.dmg` -`https://download.docker.com/mac/beta/Docker.dmg` - -Windows: - -`https://download.docker.com/win/stable/InstallDocker.msi` -`https://download.docker.com/win/beta/InstallDocker.msi` - -#### Announce the release - -Announce the release in #pinata-dev with `@here` and post the final CHANGELOGs for Windows -and Mac. - -Announce in #ship-it: -``` -Mac and Windows Beta ... has been released! -https://download-stage.docker.com/docs/windows/release-notes/ -https://download-stage.docker.com/docs/mac/release-notes/ -``` - -Announce in #pinata: -``` -Mac and Windows Beta ... has been released! -https://download-stage.docker.com/docs/windows/release-notes/ -https://download-stage.docker.com/docs/mac/release-notes/ -``` - -The release should now be complete! - -## Troubleshooting - -### Web UI - -A basic web UI to list releases and files on the public channels is available: - -http://omakase.omakase.e57b9b5b.svc.dockerapp.io/# - -### Rollback Release - -Rolling back to a previous release is as simple as publishing the old release. -Given a current release of: `1.12.0-beta18`, rollingback to the previous version/build would be: - -Mac: - -`docker-release --channel beta --build 1.12.0.9779 --human 1.12.0-rc2-beta17 --arch mac --prod publish` - -Windows: - -`docker-release --channel beta --build 1.12.0.5022 --human 1.12.0-rc2-beta17 --arch win --prod publish` - -Note that you need to know the build number of the previous release to do this. This is usually recorded in the tracking issue, but list of releases in the [Web UI](#web ui) can also be helpful. - -### Update release notes with `docker-release` -When the release is tagged the CHANGELOG is extracted and uploaded in the `NOTES` file. This file can be re-uploaded with `docker-release`. - -To download `NOTES` for editing: - -`curl -SLO https://download.docker.com/mac/beta/1.12.0.9996/NOTES` - -To upload the updated `NOTES` file and overwrite the existing one: - -`docker-release --arch mac --channel beta --build 1.12.0.9996 --prod upload NOTES` - -### Surgically updating the CHANGELOG - -Usually `docker-release` should provide everything you need to add/update files on S3. If you should need to manually modify the files, one way of doing it is to use the widely available `s3cmd` (`awscli` should also work in a similar way) - -* configure s3cmd to point to `download.docker.com` buckets -* Note that we have two buckets one for beta/stable `s3://editions-us-east-1` another for all other channels (`s3://editions-beta-us-east-1-150610-005505`) -* The path to the proper download is : `s3:[bucket]/[os]/[channel]/` where `os` is either `mac` or `win`, and channel either `beta` or `stable`. -* list the documents in the proper channel by `s3cmd ls s3://editions-us-east-1/mac/beta/` -* find the proper version and list files there `s3cmd ls s3://editions-us-east-1/mac/beta/1.12.0.9996/` -* the changelog is the `NOTES` files -* get the remote `NOTES` file `s3cmd get s3://editions-us-east-1/mac/beta/1.12.0.9996/NOTES` -* copy over the revelant part of `docker/pinata/CHANGELOG` for mac or `docker/pinata/win/CHANGELOG` for windows -* upload the new `NOTES` file : `s3cmd put NOTES s3://editions-us-east-1/mac/beta/1.12.0.9996/ --acl-public -m "text/plain; charset=utf-8"` -* check the public bucket URL is ok : `curl http://editions-us-east-1.s3.amazonaws.com/win/beta/1.12.0.5226/NOTES` -* if something is wrong at this point, this is probably missing metadata check them with `s3cmd info s3://editions-us-east-1/mac/beta/1.12.0.9996/NOTES` -* check the public endpoint : `curl https://download.docker.com/win/beta/1.12.0.5226/NOTES` ( you may have slight delay due to cloudfront caching) - -## Hotfixes and updates on stable channel - -### Processes for PRs - -#### Non urgent, but necessary fixes in stable - -Label the PR with `process/cherry-pick` and assign it to the relevant release milestone. This will mark the PR as a candidate to be picked into that stable release from master, when that release happens. Typically this is the next minor engine release. The PR in master should be included in one of the beta releases at least one week before the stable release. - -#### Urgent stable fixes - -If the issue needs to be urgently fixed, contact the release manager to make a plan for the release and to create a hotfix milestone. Typically this will require a beta hotfix first to test the fix, then a stable hotfix a week later. - -#### Urgent beta-only fixes - -If there is an issue in the beta that does not need to be fixed in stable, a hotfix can be released on the beta channel only. Contact the release manager to make a plan for the release. The PR does not need a label. - -### Releasing a beta hotfix - -A hotfix is usually a minimal update that we send out to fix an urgent issue between planned releases. - -* Create a branch from the beta release tag called `bXX-release-fixes`, where XX is the beta number the hotfix is for. In some cases it may be necessary to create `bXX-release-fixes-mac` or `bXX-release-fixes-win` if there were important commits in master between the win/mac tags. -* Cherry-pick the relevant PRs from master into the new branch -* Update the CHANGELOG in the branch to include the list of hotfixes under a "* Hotfixes" title. This will be shown in the update dialog. -* Add the release to the CHANGELOG in master -* Create a release tag on the last commit on the branch (as on master) to build the release binary in CI. Add the suffix `.X` where `X` is the hotfix number for this release, e.g. `mac-v1.12.0-beta21.1`. -* Re-test the binary and release as normal. Additional testing may be required depending on the changes that were fixed. - -### Releasing a stable hotfix - -A stable hotfix is an urgent update on the stable channel between planned releases. The PRs included in the hotfix should previously be tested in a beta before the changes are added to the stable branch. - -* Determine the minimal set of changes that needs to be included in the update, make sure all changes have been tested on beta channel first. Merge the PR in the branch for the current stable release. -* Add a letter to the version number, e.g. "1.12.0b" for the second update to `1.12.0` -* Update CHANGELOG with a friendly message describing the reason for the update (this will be displayed in the update dialog) -* Tag and release as normal - additional testing may be required depending on the changes that were fixed diff --git a/project/ROADMAP.md b/project/ROADMAP.md deleted file mode 100644 index de52466b1e..0000000000 --- a/project/ROADMAP.md +++ /dev/null @@ -1,24 +0,0 @@ -# Roadmap process - -The roadmap is tracked with GitHub issues with the "kind/roadmap" label. These things are large pieces of work that typically need to be delivered by a certain date, and may have complex dependencies that need tracking. - -Using the "kind/roadmap" label allows us to filter out the major items of work from all the other smaller stuff on GitHub (bugs, feature requests, sub-tasks, etc). - -The text of roadmap issues can be used as a wiki to give detail on that piece of work, keep track of its status, and link off to other relevant stuff. This can also link off to other sub-tasks if more granularity is necessary. - -Issues should be given: - - - **A milestone** to define its aimed delivery date - - **An owner** to define its DRI - - **A priority** as a label to define its priority relative to other items - -## Reports - -GitHub is the source of truth for the roadmap, but GitHub also has a great API that allows us to produce reports to give visibility into what is going on both within the team and to people outside the team. - - - [Charing Cross](https://charingcross.i.dckr.io/repos/docker/pinata), a tool for viewing milestones and the status of roadmap issues within those milestones. - -The issues can also be browsed using GitHub's interface. For example: - - - [All roadmap issues](https://github.com/docker/pinata/issues?q=is%3Aopen+is%3Aissue+label%3Akind%2Froadmap) - - [All roadmap issues for "GA" milestone](https://github.com/docker/pinata/issues?q=is%3Aopen+is%3Aissue+label%3Akind%2Froadmap+milestone%3AGA) (modify milestone filter to view others) diff --git a/project/SUPPORT.md b/project/SUPPORT.md deleted file mode 100644 index 3580643981..0000000000 --- a/project/SUPPORT.md +++ /dev/null @@ -1,80 +0,0 @@ -Piñata Support -============== - -This document outlines the roles and responsibilities of the support function -of Piñata. - -# Roles and responsibilities - -## L1 Support - -The L1 Support staff are responsible for: - -- Categorising and labelling issues in `docker/for-mac` and `docker/for-win` -- De-duplicating issues in the aforementioned repositories -- Ensuring that the issues are of high quality - - They contain a `docker-diagnose` output - - The logs for the report are available and uploaded to S3 - - This can be verified with `Dockerfile.fetch` in `support/s3` - - There is sufficient information about the users environment - - Is this a new/failed installation - - An upgrade - - A channel switch - - Reproduction instructions are present. The following are acceptable: - - A sequence of UI interactions that will cause the issue - - A shell script that will trigger the issue - - A `Dockerfile` that will trigger the issue - - A `docker-compose.yml` that will trigger the issue - - The reproduction instructions are valid, and reproduce the issue - - **IF** the cause is obvious, open an issue on `docker/pinata` and ping - the right person - - This issue should contain all of the necessary information, - not just a link to the `docker/for-X` bug - - Sending a report at the end of a rotation to `pinata@docker.com` or - `@pinata-team` on Slack that includes: - - Major occurrences - - Any patterns or trends identified - - Statistics: - - Issues Opened vs Closed this week - - Issues Opened vs Close all time - - Average time to resolution - - Tickets over N days old, where N is the targeted resolution time - -## L2 Support - -The L2 Support staff are responsible for: - -- Reviewing categorised issues with reproduction cases to identify the - root cause -- Once that cause has been found, to create an issue in `docker/pinata` and - assign the right person -- They should track the open issue to make sure it is resolved within a - reasonable timeframe (SLA TBD) -- Once the issue has been fixed (or not), they should update the issue in the - upstream tracker with the appropriate label -- Once the fix has been applied to a publicly available release, the - appropriate label should be applied - -## L3 Support - -In the proposed model L3 support are engineering. -L3 support are responsible for: - -- Reviewing issues where they have been assigned by L2 support -- Either fixing the issue, or marking as `0-wont-fix` - -# Status Labels (to be documented on `docker/for-X`) - -The following labels track the progression through the support process for -ease of triage. - -| Label | Description | -|---------------------------|------------------------------------------------------------------------| -| status/0-triage | The issue needs triaging | -| status/0-wont-fix | This issue will not be fixed and therefore can be closed | -| status/0-more-info-needed | The issue needs more information before it can be triaged | -| status/1-acknowledged | The issue has been triaged and is ready for L2 | -| status/2-in-progress | The issue has been assigned to a engineer and is waiting a fix | -| status/3-fixed | The issue has been fixed in `master` | -| status/4-fix-released-beta | The fix has been released! | -| status/4-fix-released-stable | The fix has been released! | diff --git a/project/WIN-RELEASE.md b/project/WIN-RELEASE.md deleted file mode 100644 index 79c4b22144..0000000000 --- a/project/WIN-RELEASE.md +++ /dev/null @@ -1,46 +0,0 @@ -# Preparing a Windows release - -This document describes the Windows-specific part of the release process. See -[RELEASE.md](RELEASE.md) for the overall process. - -On windows, pushing a release on own s3 buckets is an automatic process. - -## Tags and Channels - -All of the process is made on AppVeyor. Each time it builds either on `master` -branch or a tag, AppVeyor will build an installer an upload it to s3 using the `docker-release` command. - -Before tagging a release, please make sure the `CHANGELOG` file is up to date. - -**WARNING**: To make sure we don't pollute OSX releases, every Windows release tag name must -start with `win-` prefix. - -The build script analyze the tag name, and determine on which channel it uploads the artifact. -the tag format is the following `win-[channel]-v[version]-[milestone]` for example `win-beta-v1.12.0-beta18`. -`[channel]` can be either `beta`, `test`. Releasing on `stable` is made by omitting the channel altogether for -instance `win-v1.12.0-beta19`. - -The channel it uploads to is chosen by those rules: -- If the commit has a tag that starts with `win-v`, then the installer is pushed to `stable` channel. -- If the commit has a tag that starts with `win-beta-v`, then the installer is pushed to `beta` channel. -- If the commit has a tag that starts with `win-test-v`, then the installer is pushed to `test` channel. -- Otherwise (either on master or malformed tag), the installer is pushed to `master` channel. - -Tagging example -``` -git tag win-test-v1.11-beta11 -git push origin win-test-v1.11-beta11 -``` - -Release to the `beta` or `stable` channels are not published right away to users, they are uploaded -and available to download but it will not trigger an automated users. You must use the `docker-release` -command to achieve this. - -## Preparing the next iteration - -After a release, the version needs to be bumped for the next release: - - - Update `src/SolutionInfo.cs` file - - Set the date on the `CHANGELOG` for the current release, replacing `unreleased` by yyyy-mm-dd - - Create a section for this release in the `CHANGELOG` file - - Commit theses changes with a commit message similar to `Bump to version X.Y.Z-dev" diff --git a/project/WIN-TESTING.md b/project/WIN-TESTING.md deleted file mode 100644 index 702e455ee5..0000000000 --- a/project/WIN-TESTING.md +++ /dev/null @@ -1,70 +0,0 @@ -This is a template for tests which have to be performed before a Windows release. - -- [ ] Run regression tests with `release,installer` labels like this: `./rt-local -vxl release,installer` -e D4X_INSTALLER_URL=https://download-stage.docker.com/win/master/InstallDocker.msi run` - - [ ] On Windows 10 Pro Build 10586 (aka 1511) - - [ ] On Windows 10 Pro Build 14363 (aka 1607 aka aka RS1 Anniversary Release) - -The quickest way to download other binaries is via: -``` -Import-Module BitsTransfer -$url = "https://download-stage.docker.com/.../InstallDocker.msi" -Start-BitsTransfer -Source $url -Destination InstallDocker.msi -``` - -The following steps currently have to be performed manually: -**Make sure you start the app from the desktop icon, and not via the CLI!!!** -- Test auto-update. - - Download a previous release from the test channel via [this page](http://omakase.omakase.e57b9b5b.svc.dockerapp.io/) - - Install it - - Wait for the update dialogue, verify the version, and update - - [ ] Verify that the version after restart - -- Verify versions - - Verify there is a whale on the Desktop. Check if it says Beta - - [ ] Until #4613 is closed, verify with `docker version` that Beta release use experimental and that stable release use non-experimental. - - [ ] Verify the version in the `About Box` - - [ ] Verify `docker-machine version` - - [ ] Verify `docker-compose version` - - [ ] Verify that the path was added to a Powershell, cmd, and bash window - -- Test settings UI (has to be executed in order): - - [ ] Shared Drive: Make sure you have a D drive. Share it, unshare it and share it. Verify with `docker run --rm -v d:/:/data alpine ls /data` that the sharing/unsharing worked. **Leave the drives shared**. - - [ ] Advanced: change the CPU and Memory settings a couple of times. Verify with `Get-VMProcessor MobyLinuxVM` and `Get-VMMemory MobyLinuxVM` that the VM has the new settings. **Leave it at a non-default value**. - - Network: Change the Subnet address to `10.0.76.0` and the mask to `255.255.255.248` and the DNS to static `8.8.4.4`. Verify: - - [ ] `ipconfig` that the ip address/netmask has changed - - [ ] `docker run --rm -v c:/:/data alpine ls /data` verifies that mounting still works - - [ ] `docker run --rm alpine wget http://www.google.com` verifies that DNS and networking still works - - **Need a test for proxy settings** - - Docker Daemon: - - [ ] Verify the URL points to the damon config file section - - [ ] Change the debug setting to `true`. Verify using `docker info` (look for `Debug Mode (server): true`) - - Diagnose and Feedback - - [ ] Verify the documentation link points to the documentation - - [ ] Verify the issue link to Github works - - [ ] Verify the `Logs` link works - - [ ] Click on `Upload diagnostics` and verify that the diagnostics can be retrieved using the `Dockerfile.fetch`. - - Exit the App and Start again. Verify that the settings are still what they were before the restart and verify that they are actually used: - - [ ] `docker images` should be empty - - [ ] `ipconfig` that the ip address/netmask - - [ ] `docker run --rm -v c:/:/data alpine ls /data` verifies that mounting still works - - [ ] `docker run --rm alpine wget http://www.google.com` verifies that DNS and networking still - - [ ] `docker info` for debug settings - - Reset: Reset to factory and check, e.g.: - - [ ] Shared Drive: Make sure they are not ticked - - [ ] Shared Drive: Verify that `docker run --rm -v c:/:/data alpine ls -/data` is empty. Make sure it pulls in alpine. - - [ ] Advanced: Check that CPUs is reset and memory set to 2GB - - [ ] Advanced: Verify with `Get-VMProcessor MobyLinuxVM` and `Get-VMMemory MobyLinuxVM` - - [ ] Network: Make sure the IP address is `10.0.75.0` and mask is `255.255.255.0` and DNS is unticked. - - [ ] Docker Daemon: Make sure `Debug` is set to `false` - - [ ] Docker Daemon: Check `docker info` for debug setting - - -- Test with a user using a Microsoft Live ID for login - - [ ] Verify sharing/unsharing via the UI works - -- Test with a user with a space in the User name - - [ ] Verify sharing and/unsharing via the UI works - -- Mixpanel: Requires logging in to mixpanel: - - [ ] verify that mixpanel events in the final release binary report the correct version string (due to #4925) diff --git a/project/designs/TRIM.md b/project/designs/TRIM.md deleted file mode 100644 index a03d0cb9c6..0000000000 --- a/project/designs/TRIM.md +++ /dev/null @@ -1,152 +0,0 @@ -# Reclaiming disk space on the Mac - -See [docker/pinata#2080] - -Engine 1.13 will include a feature allowing disk space to be reclaimed more -easily by deleting unused images. Unfortunately deleting files within the Moby VM -will not delete disk blocks stored on the host unless the block device supports -ATA TRIM / SCSI DISCARD. Note that Hyper-V supports AAT TRIM / SCSI DISCARD so this -should "just work" on Windows. - -## The datapath - -``` - docker - | - | rm unused images - V - ext4 - | - | [1] TRIM unused blocks - V - ahci-hd [2] (virtio-blk doesn't support TRIM) - | - | TRIM unused blocks - V - hyperkit [3] (needs to expose the capability, currently commented out) - | - | TRIM unused blocks - V - ocaml-qcow - | - | GC [4] - V - HFS+ -``` -where - -- [1] we need to investigate/decide whether TRIM should be run continuously - as a side-effect of an `rm` (enabled via mounting with the `discard` flag) - or whether we should have a `fstrim` running later, possibly on request? - This will likely depend on the performance of the rest of the system. - See [comments and notes on the Arch Wiki](https://wiki.archlinux.org/index.php/Solid_State_Drives). -- [2] unfortunately the virtio-blk protocol doesn't support TRIM so we have to - switch to the only other option in hyperkit: ahci-hd. Note that qemu/KVM - users would probably use virtio-scsi. We will have to investigate the - performance implications. -- [3] hyperkit's bhyve heritage includes support for exposing TRIM, but - the [capability is not exposed](https://github.com/docker/hyperkit/blob/547caeb5facb248067c529dd8c80931dbc1c56c6/src/block_if.c#L620) - and the operation [returns ENOTSUPP](https://github.com/docker/hyperkit/blob/547caeb5facb248067c529dd8c80931dbc1c56c6/src/block_if.c#L416). - This is clearly because it's not implemented by existing filesystems on - the Mac. -- [4] since the Mac doesn't support TRIM on HFS+, we will need to implement a - block GC to shrink the file. - -## The qcow block GC - -The general approach is to shrink the qcow2 file with `ftruncate` after copying -the trailing data blocks back to "holes" created by the TRIM. A shuffle operation -will be approximately: - -1. Find the pointer which is pointing to the last physical cluster. This will - require a reverse index to be created and maintained, since all the references - within the physical file point in the other direction. We can make the - simplifying assumption that the refcount is 1 since we don't support internal - snapshots. -2. Lock the last physical cluster and a TRIMed cluster, to prevent concurrent - modification from another concurrent thread. -3. Copy the last block into a TRIMed cluster. Note that reads from the TRIMed - cluster will still return zeroes because the TRIM set will be consulted before - reading the physical disk. -4. Issue a `flush` -5. Rewrite the pointer to point to the TRIMed cluster. -6. Issue a `flush` -7. Issue a `ftruncate` - -Note the `flush` calls are necessary as write barriers to prevent the pointer -update from being persisted without the data copy over a crash. - -Note the `flush` is implemented by `fcntl(F_FULLFSYNC)` on OSX, as described -by the `fsync` man page or [this email](http://lists.apple.com/archives/darwin-dev/2005/Feb/msg00072.html). -On a modern MBP, a `flush` takes about 10ms. - -### The reverse cluster index - -A qcow2 file is a tree of 64 KiB clusters where the root of the tree is -in the header at the beginning of the file. All clusters are linked either -from the header, or from other clusters. In order to shuffle a block within -the file we need to find the reference to it, so we can update the pointer -with the new location. -Unfortunately the qcow2 format only stores pointers to child blocks in the tree, -not pointers to parents, so we need to create and maintain our own reverse -cluster index. - -A table mapping clusters to their parents would need to have one entry per -cluster i.e. 3 bytes per 64 KiB of data i.e. an extra 0.005% space overhead. - -The largest possible qcow2 image is [2**63-513 bytes long](https://rwmj.wordpress.com/2011/10/03/maximum-qcow2-disk-size/). Rounding -the size up to `2**63`, the required overhead would be about 300 TiB. - -The top-of-the-range Mac Pro can be configured with 1 TiB of storage. Assuming -hard drive capacity doubles every 2 years then by 2020 we could have a 4 TiB -qcow2. The required overhead would be about 192 MiB. - -Therefore, although it's possible to construct a .qcow2 whose reverse cluster -index would need to be stored on disk, for the next couple of years at least -for our use-case we could use an in-memory table. - -### Making the TRIM asynchronous - -The block shuffling described above will be slow since it calls `flush` twice. -The `TRIM` command is supposed to be fast, and tools like `mkfs` will issue -thousands of them back-to-back. If we delete a lot of files all at once then -`ext4` could generate a lot of small `TRIM`s which could be coalesced and -executed all at once. - -We could make the TRIM asynchronous by first marking the clusters as empty -(such that reads will return zeroes) in a persistent datastructure cached -in memory. The ideal -structure would have fast lookup (since it's on the read path) and would -automatically coalesce adjacent TRIMed regions together. -Martin Erwig's paper [Diets for Fat Sets](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.26.4659) -describes a structure with fast lookup and automatic coalesce, and there is an OCaml implementation -inside the [batteries library](https://ocaml-batteries-team.github.io/batteries-included/hdoc2/BatISet.html). -To make the changes persistent we could use a simple append-only log to store -updates, and occasionally flush the whole structure to disk. The -[mirage/shared-block-ring](https://github.com/mirage/shared-block-ring) library -is designed for this use-case and was used to speed up LVM metadata operations -in the xapi-project. - -## Making the shuffling faster - -After we have coalesced a large number of TRIMs together, we can shuffle the -blocks more efficiently by batching. In the description above, one block was -moved at a time. We can extend this to an arbitrary number of blocks, with -the caveat that they must be locked against writes for the duration of the -shuffle. We can therefore amortise the cost of the `flush` over many blocks. - -## Possible development phases - -### Phase 1 - -If we expose the TRIM capability and track the TRIMed blocks, we could create -an offline tool for geneating a small qcow2 (rather than shuffling blocks). -This would allow motivated users to get their space back. - -### Phase 2 - -We could run the offline tool ourselves between reboots. - -### Phase 3 - -In this phase we could shuffle the blocks around live. diff --git a/scripts/token/main.go b/scripts/token/main.go deleted file mode 100644 index 9dce759b64..0000000000 --- a/scripts/token/main.go +++ /dev/null @@ -1,158 +0,0 @@ -package main - -import ( - "bytes" - "encoding/base64" - "fmt" - "io/ioutil" - "log" - "os" - "os/exec" - "os/user" - "path" - "path/filepath" - "strings" - - "github.com/Sirupsen/logrus" - "golang.org/x/crypto/ssh" -) - -// read bytes from private key PEM storage -const privateKey string = `-----BEGIN RSA PRIVATE KEY----- -MIIJKAIBAAKCAgEAvyhLlw5cF0T8rApKQwc/qZteZH0tVFnDW31yugy0CSJAcdMI -z8nP3gwL+Hzc6DBhNjPoajRitXxNEfoO2EwPKVXsU3V5fNl5/xqW4E7kS2UjZGJH -OOJz/ko4MA+0u60BSzQZDC8xo/NoZ08t4PiE4DjyFFb95SBUQ5+HkYlgMFPiHVGy -KqRAdX0zUiFjZbXrw9fhwPWPrgx1gweYoXbgctHWiEEiUeATNOwsYCFtrLPR9U4w -wldEp1M1Ft2Sv6nFCgkvLpK3nvqoEg4RfMlRiTX1KT1eQUBFM/owzeA5FjLZ/vBh -2/OZnll5eaU5gWH6RvDibxVbZogQScl9TJBYUuKzdT5VvLraIO29P947zuenhJs6 -VkH1gptoKLZ+z6lpuFZmkd472AyLnrK7cmYBagcCm+zMfGyqjSBJL636PpF/NHK5 -6HpjQUhuXuKeKbKYvb4JukRRfzJK60LCbBLliJ/TEI/+Qxz5XtVVsQ2EC2uLqrte -HwBDLzAIwy8wMORTIy1QZK+bJVE2gtq5xy+PIuiF0jFJPfASl1L/WsKzz0iVIN3T -KmHGpWhJjHGkPyGluBRqqQSXJWqUA4YSeuFBccLn7rAEMrh8trhx74jwFELHgNJ8 -0lCD73L/+ysKOwHHrp4hnmpAU9OTZ8fDstnKDwL8oxNK7jNw6FZ7SLYiYNECAwEA -AQKCAgAK0MDWHx3ewyx4n2xsNnDHq96/WMXDzABdoM9o72cQTTvQNNx+xTBZo9zZ -hlcJXBNj+bPgrm4XTp0ds0Q7wLHq6M2iOzdQdQ2N/Xcj4dLQ4TwLZfQZp9ZgQNrE -/V6Ab91u39e69MCeQhtaHQS/gdAiz5YCyJk86YNbAB+vgFJM6bIVbpXiC8EJ5LeO -ogz5qD1aq1A+lqY2dsX/T+K23/77ABxfQTAr6b2sdOBd4AZQiywJ8Q6ZME7WGMMc -NBUlevmHA9YDkJGLESuJOfqLUOioFsF0P+ChWH2R30n7nAAe3WmwHvGqfDHo368b -ztleFKkQcnidSFwPhQtG4XuRZWlZzh/koHZgvLpiMcopO5XNBRpkaUGjaTu4c8W+ -MGSpWJOiWgOwZiZG9OB1vD5b9oW3t+iBlU7D7HJT6DD17C2UzjQ52Y9e4bC34y1U -SZ11+7s5vV28FAJ3u1azVBDXXd7+kCvf0Eb07GhARLs66AiBCi8qszP4Lwz1EaTm -1daAwdcCqMpBQa/UtormP5Aa35dpwFsp48go/SSxs/yLCR6tqNnO8IYU+yB5RGr+ -qAXeGi0XGW9H8GZ4KPIYgojoll1Jw6uoFxwkUIjSiSQRNe1OmTmmjXRUYQUReKIb -nsvjCVR0gQB1He2hkNQSlGsfXm/4XIQ2oTxgxtcZ/0PQ4SBzAQKCAQEA6abhPSrJ -t+o9AW2jIZNZ0h2+/Js40EiwKGNwy29b6GZsxcVtSMxFZvUncKKqIc0hvIrfKGXO -fP7AFGuCh2ChT/8vP1d6Y3CT0beWCeLF1VBzR3aZcRyLP99JJKz9D8sThYbyvxsT -7f5Cm7cyGU6CF7Neacw80FVtRcm/DXvhuApCmXE+cMWgutfsW8c3OKygh4OV6bWf -Pz+JGxNqkyu+l4DJ64KDuiRuEwxNU3eJki9Zdij/i/tAfNRsXrvYklec/LpYIFIh -Lmp2dM3nMYgnQQbrjTTsvU+izUd30bY96VupOQ89mPrLxUsWaES4jMM2Vs9HjOPc -dpsojV4SbQumOQKCAQEA0XDpCYVyYf8nS0kNSh5V9CnXCrwQ0Y/8LzUv5nHrzESK -98W0nLUWtaUyuNbEECuRFbSqallWuWNsN3ByhrzlEntSZvEskQnEHbTjbkoxPq7r -sxcIZw163UOuoT9y954n1eroyGlQpIs4DKPEmNdKutaUgkQMgd6PeW/dAQZs+XzC -xCLxgMLZew5ybNWsbgclVD4Bznoo9Otv7pWRWRz/4ORNZWcxNBk2uBYYhfl5FBMj -5eTHCs6rQHDI0aGIrPRQ+tOTm9Sg0ctXmizYbZnf2j6G+NyeyPScVwtX7e+dvH7z -EVQ77Gvz3UoEA7GHlkEy8XQdA0uXLT2HAm4d6xpPWQKCAQBMAoXzqB/HPORruob/ -PThTKmofMz/gQkVMXk0rYSa9C9UG4ZsTu6A4Rjh2Y/SE2n7HH0ZJlhT+hMFn4zGr -aLwRkiqEqKigANeVueuNe8BwDKPz85knOunx9WmODNimcqH/Jk+B7AUnvzdcANTD -ds7LdwaX1GFURPYvZdpJQKvFe1D/Kd/uP9xx7BxwHvbP8Rin/R6f0P3lTX4E2OQq -zGhMURFfFC5WN9O3TqE5LgILFGw+DEhV+X6ZHWHDz8g8k1P2w4g3u4Af4XJ3vSQg -8PIULXQjk7wQOf/0V/OavXaWm8MJVPPs+Gmh3TOE6BZBdKAQzY2xP89Qplki5B+K -aefBAoIBAFbhUaojc0l3gKNYUGz4nItGd+/6B7gG1IP4ukAL7da0cDlMCBohfKQp -PRsz6+0RRYQNh8vJ95G7zn5I5RlDbnr2MT6GuQgJVxNDoDx2BmuMQDXwTgoBq3/x -vZUiLtzM/JVeduX72foHzl5f6QPF+zf6H2zSMaYF3tpvLuxn7/imalzWafwR2AmV -+p1vHbIewLtrZXBzeF3w9GOyI7Mltndh/UEdR2nnM621bMLWtAVB01hgSLkQ9jUr -FALx0TJ9vsHt1oOD9ppQkaxhAf6lIBj2ayL80dlmrxvklrsa9QHmX4pGuPzf4y9e -rr+hey83KJzEn+xoBPQ9W64EY+DM7zECggEBAIw3lgc5Ii30Hfzgf12c3ymbDivl -Bk3bxgIl5uX26Qwu12VV9t8tqTILA5YAfskc8NwcioAMfjXJ4oHU3qjZeo5r2dBE -XNDmORu9Vd/If/l+IPktSSD4rDoJuqKikiXLTI9C07d2gg/yc1zxdBa+n7y6Yz4y -4WHULNI6+4eyAtf6cdHQAKpDLGPYOyldy+MLVvHJhbfwqt6zXvP/ltqg2JjW7qdK -ihKTk8elCHK0xCLlpSnM/J2pp2+ZQeJQIVR5MFoKyNeqTvezDQLapfoW2PJn8wiL -aBif8NFXuOOz0Ke2xFHNrzthFSd8PWzDY19IAUxzRr53uYohjRa1RJHRuc8= ------END RSA PRIVATE KEY----- -` - -func main() { - var udid string - // Get UDID from CLI - if len(os.Args) > 1 { - udid = os.Args[1] - } else { - udid = detectUDID() - } - - logrus.Debugf("UDID found: ==>%s<===", udid) - signatureBase64, err := signUdid(udid) - if err != nil { - logrus.Error(err) - } - logrus.Debugf(signatureBase64) - logrus.Infof("Writing signature to %s/private-invites-signature.txt", appContainerPath()) - if err := writeSignatureInFile(signatureBase64); err != nil { - logrus.Error(err) - } -} - -// signUdid signs the user udid according to the server private key -func signUdid(udid string) (string, error) { - - // create a signer object from the private key bytes - signer, err := ssh.ParsePrivateKey([]byte(privateKey)) - // signer, err := ssh.ParsePrivateKey(privateKeyBytes) - if err != nil { - logrus.Error("unable to parse private key", err.Error()) - } - signature, err := signer.Sign(nil, []byte(udid)) - if err != nil { - logrus.Error("ERROR:", err.Error()) - return "", err - } - // encode signature into base64 - signatureBase64 := base64.StdEncoding.EncodeToString(signature.Blob) - return signatureBase64, nil -} - -func appContainerPath() string { - usr, err := user.Current() - if err != nil { - log.Fatal(err) - } - return filepath.Join(usr.HomeDir, "Library", "Containers", "com.docker.docker", "Data") -} - -// encode signature into base64 and write it in a file -func writeSignatureInFile(signatureBase64 string) error { - // get path to group container - containerPath := appContainerPath() - filepath := path.Join(containerPath, "private-invites-signature.txt") - err := ioutil.WriteFile(filepath, []byte(signatureBase64), os.ModePerm) - return err -} - -var udidPrefix = []byte("Hardware UUID:") - -func detectUDID() string { - cmd := exec.Command("/usr/sbin/system_profiler", "SPHardwareDataType") - lines := getLines(cmd) - for _, line := range lines { - line = bytes.TrimSpace(line) - if bytes.HasPrefix(line, udidPrefix) { - return string(bytes.TrimSpace(bytes.TrimPrefix(line, udidPrefix))) - } - } - logrus.Fatal("udid not found; is this a Mac OSX?") - return "" -} - -func getLines(cmd *exec.Cmd) [][]byte { - out := combinedOutput(cmd) - return bytes.Split(out, []byte("\n")) -} -func combinedOutput(cmd *exec.Cmd) []byte { - out, err := cmd.CombinedOutput() - if err != nil { - fmt.Println(strings.Join(cmd.Args, "\n")) - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - return out -} diff --git a/scripts/token/main_test.go b/scripts/token/main_test.go deleted file mode 100644 index 83fd2f3d24..0000000000 --- a/scripts/token/main_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package main - -import ( - "encoding/base64" - "fmt" - "path/filepath" - "strings" - "testing" - - "golang.org/x/crypto/ssh" -) - -const publicKeyBase64 string = "AAAAB3NzaC1yc2EAAAADAQABAAACAQC/KEuXDlwXRPysCkpDBz+pm15kfS1UWcNbfXK6DLQJIkBx0wjPyc/eDAv4fNzoMGE2M+hqNGK1fE0R+g7YTA8pVexTdXl82Xn/GpbgTuRLZSNkYkc44nP+SjgwD7S7rQFLNBkMLzGj82hnTy3g+ITgOPIUVv3lIFRDn4eRiWAwU+IdUbIqpEB1fTNSIWNltevD1+HA9Y+uDHWDB5ihduBy0daIQSJR4BM07CxgIW2ss9H1TjDCV0SnUzUW3ZK/qcUKCS8ukree+qgSDhF8yVGJNfUpPV5BQEUz+jDN4DkWMtn+8GHb85meWXl5pTmBYfpG8OJvFVtmiBBJyX1MkFhS4rN1PlW8utog7b0/3jvO56eEmzpWQfWCm2gotn7PqWm4VmaR3jvYDIuesrtyZgFqBwKb7Mx8bKqNIEkvrfo+kX80crnoemNBSG5e4p4pspi9vgm6RFF/MkrrQsJsEuWIn9MQj/5DHPle1VWxDYQLa4uqu14fAEMvMAjDLzAw5FMjLVBkr5slUTaC2rnHL48i6IXSMUk98BKXUv9awrPPSJUg3dMqYcalaEmMcaQ/IaW4FGqpBJclapQDhhJ64UFxwufusAQyuHy2uHHviPAUQseA0nzSUIPvcv/7Kwo7AceuniGeakBT05Nnx8Oy2coPAvyjE0ruM3DoVntItiJg0Q==" - -var udidTests = []struct { - in string // input - expected string // expected result -}{ - {"test-udid-1", `pKBLBUgEGYpY/UpyaQls2AeFie6kqFRUXH1prvHOowI84fgcUtFrfkZnV/xiVkV95ffFiZ4kYcEWx7ffFF18FwIg47wUSXGnfp8Xt5zHMlo+XmgXd08kUlUdQEqGhPL4VfIEIogBfURYGF+JNsXfo9k33OdaHgKgBzVNN0ZNgvvhcG1D9ACnIY0t+0BXNeIZRdVT5CE6x37JTls8x279mSXl5+BEV2czDVFbG/TgYlcTqtLRqhChtwY//HhthjjfBSV893hT03h/32mJ8udynMKn8UlD0UWvIrmFx1Z+hHoEBN6N3ybdfVoOrEFdTDhP9IQX+Uz5AT/xozR0Nq0hXEA47ZtYopsTfECcgKjCOPe3DbLD+yuOeHq9cR2U+LazubCcW8krjZEymzshiPrFFfC3nHLsZK3nlS64qtxyi8mHumJLdAh8e1UkV5q564NWjabvqIfENLIFyBDMc737xS7yhGj23pV3sqQpXI1waJIq4e8wrvmZsHvtYaQvE5vN+UsiAr9pXudMbVs0baVUi5yxqWdkoeJE7VDRPrxDkvQ8c8ygKpSlaq+4W8rVSLrOJMBlbooEAZpb0LMvl2x0rBPry5vsgFJpYtyLWTJrD0mQkuPJFXUNq+joAonMfSEEggKb2czGvWenmPwBpU4/2rj11Rgnc2eJUi9cbhZn+Ag=`}, - {"test-udid-2", `u53OcTYRuaRwE9tv3uq6ovBCaHEBnlKtx5tXEtoKDq8ntYjA4TV4xXkHEL9vOdrOUzaQe6ul6KAuYi1HBH5jdYHIKMJnLyypgcKDupVyF759WR0mHVJmj/b1RQAHDfK8BViqUN4NXhUsxgpJvEMt1gAN67b9xpWIE9VXAOwXcNnQkm/5oV7fvv2y7cxkW79N1mfnbFmpYASZlCVL4kapP8tzJcOvRlEwnsIL7O5Rv3seSVUDH1HLo5+R0iZXrar0tAG+oOnvf/O4KnvgTP8JHpxJqy+Ddqvx9XI2ZoGLXweFGEDBVRxDE8LnGGr6e/b7VNxi71kdoT8T/NJBDNA8a7w1uTcJiOO3ru2JehYLDuL7MWkNpXu109PIVdo9Yu/shYoQ/3PxzOp4GqS5MP9Ez035f1YSwhvzDguU/PJ2v/RQoEc6Xk6dT7tX1S5qyH0UZVubYPgsB/yKI5RP2RynhRylG3VStB+8gY1DgO6YQGltSfzSRHBg45ts914QqrsvMgsl1m4NDZfy9NfKSzsP1k3NzR9el7gmF85guKtytq+1/nYJARQvOI8bNZCIHACRIHWEGrfTDDV7/hsgwIAIOwbwutUWfrJidUkwcc4RTzF2JH6Yb3gx2lUbh7Ook3nCTTKtTkntOXaJmDlo1QeCumA1PDO/TqsVhE1a7Y746XI=`}, - {"test-udid-3", `sh1ezj9GVrTJxlg4kE2xtCiMkiZbHEi1XVzpybSEJ4VqYullLXcCuvJlcplypELx8eG9YItVi8RJ6Xpk6TrMKyJwZIENopAZ3VfujfYZWf/8FPTXuwSsije2qi1WY01jy4+P+QX7aoJ5wrwVYK3asuCzPCXT73i+QOwlK2gMYtdJ9CZ+gWN4q5RZqDVJHcg9j3hvxBFEVFdxlWWScgKbGdgmS/E4fHxaZSOdLy01VC4FKE3goEIStOvOJa/t972/h+zZ5rgpc/on9Xxu4NL/Q70/QSgS4pfaiQdJO5ZkCXC72Sz3DcIM2XjDDQ5ZF6o9DewC9v832/pyGjG3teuUQDujGfJF3yzBtwu7qEQqXWXZiAy3zatTgU0aAz+sFceK+Zs5ryPSEsfh7gqIDBmvtv3Zzxv71BzsLQXlO2aKRo9qhAnyI6ZlByJeDDWNVFNR+GnwolBu8Ixqru702FIxISdRyWyRiOpGDBp+PmWyb9/WK0E59NapeWRo8GC/W1K7GHHVCn0vcwC0c2QYP6ZD8Ho2AAZ3EJlZLT/Skz+Dy35rA0n4680zlQf4vEWWSWDnNMGWYw809f5k99ymbCR7mN+nAiOjnzMDJtHDutm61BU+0q+KfsxH6NLGg/lsZj3IuCGtVUEiORLsGNeP6weBY9rJf1el3m6PuWeF2SniCfU=`}, - {"test-udid-4", `XNTNeLP1Sm4sqj6zgiwcKz5h8rYSQgfNH4R49KvuT5qMPkz0+iadyZFZGLvz1J7R0IsfSOqb2YGw6hddwm+T/buR/nj7laTRe40BbqU4yElJmjiZ7xL7SGAWVEiXOu6hCDQ7gmg2a7qvP/g0AFoLtonVpIQ345GSRJtxwwt6IRV6Uh1M2sGCN7wvgMX+r4hOVSYPnLyUOBpf7l3eY3g+5K8YriBYDNooDPFEYCHymUqYxhbXUNJ7pXSRLm8OkWKS8mLf7CcSl4hLIlwluK9VdOChHQzAaXwTIvx/VaxBNwPz1e1x1VyhPS+v+EmiXHA/nSvJYTZSGhJRy+Uo84xnl38/IH5gLm8qZao7r+SlyMojEepEb0WzVpbPva8hY1uWt2ADm0P8LfZRMt0qpEDlFItzuwsOyBIU8g6AMNQ08/DGof0s0zBGvF3y+cnV8u9M3qbQ8L8AXeCgznHAL92D46uAaGDuwxx7P+oDvzohIWwTYaWwPgZW1geUR2zQyiI2t7hvn0BTPCbFesCRXxly5t2RCR7BFpimfV/O8peB7oBgzIwg9PWSBBrnJ3hW6kXPT76sgWFigbtJ7kzi/9jHJz+qyX9rQwZia4V8toUQFwDuiMs9YrC0Xb90QV2nSyi6zGt5BjfjA736SVGllNUgvJ4UXr877HXpYc4MXhWaowY=`}, - {"test-udid-5", `qj6NIOFaS4ja+2HaVEUCe25RXlZFo1Rxp7GC+92aOHki6tWtrMiM1xaDC91LixTH8WejUfE6BZgdfEzq+zR545m/o2ClE9SUihIe3FkmywxdwKe+EPVDIsgZeaTlsSM1R4zqlpvdwhVerLA8Bvf9t0Sf06wEkaIiKMfgZsQSJ6/Rw6cWkXBgY4pmAnXferWTHp1Y8twiuRTFuCIMhEhinZYlJaPulF/U9r/g1pgGA/Bn7dab5YestJUePuHwxz1TFTb/3ZfXWSGzOANEcj49nVXFFi461FtLoCbZyIcbKDttnmlVBTNd/fpGbSx0HbiIsMYN2vQYjqvy7eWSQq1fru3cKPF1VzYntrzg3G4z5veHhgPR1ZwSKc6ExpQnW36JFQwNp3+YjsSYCq0LrPsPh7OREfSldbuwmZEnRM2L5BJqh4mPOjO9lUOT7nMWMRdyMQFWkEMMAgOdChnsBxMVuttGwyhKumh/3c6LBV/apq6JajjHV69WzZONX0VJIQwEOdMR53wmH/bLGwsqVh/ycEZqWWN1Cgl9SU9Ch+T1AQJf+zi8H0CIxXkdmAx+4tNa2Cu4zP1a/K2xtEY832TPUv5lgXExfndYS833q07t1iJa2P6HM5zB22qcikeQzYHESr2uTQjcYJvTnb3PODDXLbdrBbyBxfyEbbJWWyWg0lo=`}, - {"test-udid-6", `df8fsfJI9DaOMjxO8nPIc20ULi9xX5uctfTDPu7j+nA4tCeNRaV3Pe9P1pbklZCxMGqZkg9Ba2sp9tZuPYJLZnbiyDS9w9y/eTr75CKK2TI7vPGWAIffej9dLs2sqHtsZEbttYhVldhlr4pilRGmtlOgg/mhaZUc9Hr0/GE2x8/SDwDoHTIy4oAcf64/zIOTv/rQDpc/jguqTWbG/oU2RBDsKjSFGAZQRcCq8BcxJ1yVlNfPZNUaf4elqbPVsMhpn0xFNblFKinWEW++VabsvgitXwcvyX4W+QfZF1d00bVSk6a2ZamkdT4E74/FcOYlUtgGtxVGB2usji9m1Jyrn5FHcEa5iCEjSghfJOW9837c8TlDmjmDXaqZ5S2MSaeF1eT9YxECxu6SVYlSxA5Q9Aiw+xMM2vF6IJOAnU8BhJctsJosVedojGNeSStRfhEMK3dq83OXZt7UljgHgfew7WF6oXfZp22xHAQfh7M9dykT87eOYlD5KOw6yuh+R0HU6Ev5Et7syeYZgfRYNGJwSp27QISf9Bccuo4ppPZMlmkTxYkbEA/5bDN7gB1ESITiIWgIqakgizRNriPTI6ED+bF01XwI6rJv9/8pn3z4QKKW89NzIOE0Lbhn+6SzvQ0F4ynC7vkwKWLrNEA4kGfff5e4yn8NXCg8PXX2zqP7soc=`}, - {"test-udid-7", `UNexHoNiQQ+V+Ht2nwpzH6/43o3T0qe2V9Hf5H3HPZ9ss4bHIk3Y4FIsEoGQlMWjHsV29v4SjUtgBtdZV47VS09PPnFfJxFtav4BCwyecsk3sZ3Zqkdx/RAZG4YmFddp7g01ddAKh5Xi+rV83bLu0o9Mkgi0YdVLIcCw3sxJMvUVFhSdyFDUyqXeoWAMErU434fcGVfl2wCq0hdfEmKWjOAaxQudfYWk/3dA5ZRk3Gtg55gRam3YfgHvl80KvgG4d2zvpafyGnCqHh1P1iTabnvIMw23giP+9onOlnW2H6a09gXXTlZLWT5HYlwgd7FOOYUy//2fBcGxx2IoSJXbquisY8FhSm+qKIqjYS2KbVLc9jK5QJ8Eibk0NjZz2p31UAyJicCCa0K4R/vthCcKrQn9hDk9L3JcvnZ3/LyAmQh1wph8iYmCTTmuRrUmJqaw4fdNpKIN4mPhi4X4fzddK4BoGz04Gz/pM17HV3dU8SZXxVWZkD4xq/MqeBkgkfXdHpaw4phlKCtOEsx2W5fU5ibLz19gRQoVKF/xtjpdaUnRKtkDmrTzKB5MywTy/wIoabJiO88ZnqkaUUjKxTreDqMmrc+5nKClYD6+6T0BwQqX+7lz+M4FhQ9YqU/hdg/UKsLOqEqyc+OkBJz5wMhy1SBKz/pS8nB5TDeXPg5Khz8=`}, - {"test-udid-8", `KhtESQA2i6wXkVcQqRmwlQP2ZbvyoNVupXdnYUW+x6qc5As1+LhMhpLWJxt3YWAtwiMkxAqffedz/PjBtph6rykwErts1jsHa9p76+IPegt5hK98lHFZr+SdRWuzcmfLJXJsr50uwgj1m9/1pftCXd+6E/vHQVE/31LG109iHvYV3744w3BOYOXMN6wpe9XFHDOoNCQngaZaGbXYAGuMfWo5q5wPfzG35uJMvvkuOcHTlSBq/Ys3gmlP3fx1/xrykyUIhdMwI42Pl8SAqw7LHtZdKLCOHlZr5pB+RehMAq1fYcSOJkUaYg+wsU6jJKhuHhFXufwZ34nD8ABAf8rOYwq2DpmGhhT3hAUx7+wzRYLX2Ny+conYYxygET515JwTwB+HseesmeU/SDsjweSky7TcHjO0DIkwOld/EBzuvg1ndzNDX2wc1KxcnoiWIIvPPtzWkFO6c5mmvZB+30I4QF/7zkHwGq5U0e3xztcOaZ6L0yZBfasdk+V/xqXK/bRIkmxYadOmDndfiHvLOzprTShdHNsrOjGCMv6SmtLlqDceOmfedVAeqRCiSK+7XWhBs8pDRgtf7tUy7iR/yr94204sFVeLt3OFvUxE1xIs19brntU/IUseNiwAlmvGB4Dyws86Pp6mvKkutgpemdVy5cTsiiHjuY8PtpAE7mtzzPI=`}, - {"test-udid-9", `oOVa8cX0x8HxOCx6wnOz9fAdIRGHXoIgPZBvAQnRNbKgXmN5dbHwAtyyOEoKw+M49poW98OfQDgFfHc0zLV3Y7udWhxqTzXhEokfC3/t9bmmGvM9JP2L/wJs3fHEzEdLQpGWoAMGuRNHgHKYDZBfNghFABh9nPxpFudRERbQikOpcycCLY4ppkVDj8w6w94/nJQIZah/OsDvpmi8SXu45F6CHqvGAgTc0BRp+Zb3o8vhCqgftKnG6FXAt17P7hg73q9B2zmbZcipF5sahpxyUlv+jfihYjJfnmVj7qBaZC4R3+qzfcopMLNDM6Ak+L+vIOPzQciumjXLqHC9xs0c+fcszEvQFtUNac9t0dwE3DOTAokTwmEAZNLzFRyg666ahsN0tvtwfzGu7skosv7y12PzA/KGYCUY+Ju/0tVgh7pUYMFCrAfgYgmaQgjUp5m+TiHuXmXVP+32ilgKYKXY/i0NCrSlMKar0wTrmECdFwii0DOvqReKeI/ijrGT081Fsh3X2mxTAqKRlXZs/4//rm1W/0iFvS5Rs0gFy+5NNgQxbj2hIaC0Z6LdrgZQuEeaA6GC0gl6CtM9Rk72bHLXTUgSIE8o/kzzTtFazJEcQYT0ajgxWUeDXVM6GITUWBUG4ecMhlekUFXGaNiuzzKn9EyFfUpA9uHkBkhCj/rd46Y=`}, -} - -func TestSignUdid(t *testing.T) { - t.Log("Check if UDID are as expected") - for _, udidTest := range udidTests { - signatureBase64, _ := signUdid(udidTest.in) - if signatureBase64 != udidTest.expected { - t.Error("UDID not signed properly") - } - } -} - -func TestValidSignature(t *testing.T) { - t.Log("Check if Signed UDID are valid") - - // decode public key bytes - publicKeyBytes, _ := base64.StdEncoding.DecodeString(publicKeyBase64) - // parse public key bytes to get an ssh.PublicKey object - publicKey, _ := ssh.ParsePublicKey(publicKeyBytes) - - for _, udidTest := range udidTests { - signatureBase64, _ := signUdid(udidTest.in) - // reconstruct a ssh.Signature object - blob, _ := base64.StdEncoding.DecodeString(signatureBase64) - sig := ssh.Signature{Format: "ssh-rsa", Blob: blob} - // verify signature - if err := publicKey.Verify([]byte(udidTest.in), &sig); err != nil { - fmt.Printf("Error: %q\n", err) - t.Error("Signed UDID is not valid") - } - } -} - -func TestPath(t *testing.T) { - expected := filepath.Join("Library", "Containers", "com.docker.docker", "Data") - actual := appContainerPath() - if !strings.HasSuffix(actual, expected) { - t.Errorf("Path should end with %s got %s", expected, actual) - } -} diff --git a/support/README.md b/support/README.md deleted file mode 100644 index 719b446923..0000000000 --- a/support/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Some support infrastructure to make log processing easier. - -- s3/ converts log files from the `docker-pinata` AWS S3 - bucket into easier to handle containers, organised by user - UUID. diff --git a/support/nurse/.gitignore b/support/nurse/.gitignore deleted file mode 100644 index c4da92d3a8..0000000000 --- a/support/nurse/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -### https://raw.github.com/github/gitignore/master/ocaml.gitignore - -*.annot -*.cmo -*.cma -*.cmi -*.a -*.o -*.cmx -*.cmxs -*.cmxa - -# ocamlbuild working directory -_build/ - -# ocamlbuild targets -*.byte -*.native - -# oasis generated files -setup.data -setup.log - -# Binary -nurse diff --git a/support/nurse/.merlin b/support/nurse/.merlin deleted file mode 100644 index 9c111485cf..0000000000 --- a/support/nurse/.merlin +++ /dev/null @@ -1,17 +0,0 @@ -PKG core -PKG cmdliner -PKG github -PKG github.unix -PKG lwt -PKG re -PKG logs -PKG fmt -PKG tar -PKG result -PKG astring -PKG mirage-block-unix -PKG mirage-block -PKG io-page - -S src -B _build/** diff --git a/support/nurse/Makefile b/support/nurse/Makefile deleted file mode 100644 index 2dfdcbea73..0000000000 --- a/support/nurse/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -.PHONY: all clean nurse - -all: nurse - @ - -clean: - @ocamlbuild -clean - @rm -f nurse *~ - -nurse: - @ocamlbuild -use-ocamlfind 'nurse.native' - @mv nurse.native nurse diff --git a/support/nurse/TODO.md b/support/nurse/TODO.md deleted file mode 100644 index c95b5adaf5..0000000000 --- a/support/nurse/TODO.md +++ /dev/null @@ -1,75 +0,0 @@ - -# Interesting strings to find in the logs - -Here are things we could find in the logs and highlight automatically, -with suggested tickets we could link them to. It's not guaranteed the -linked issue is a duplicate but it might still be useful as a reference. - -## transfused crash - -In docker-system.log: - -Transport endpoint is not connected - -see #5 - -## qcow2 corruption - -In docker-system.log: - -Invalid_argument("Cstruct.sub - -see #11 - -## /var/lib/docker corruption - -In /moby/var/log/docker.log: - -invalid checksum digest format -invalid mount id value -Error starting daemon: - -see #20 - -## failure to talk to vmnetd - -In docker-system.log: - -Communication with networking components faile - -see #61 - -## too many hyperkits - -In ps-ax, more than one "... hyperkit -A -m ..." - -see #71 - -## still has virtualbox - -In docker-system.log: - -Docker does not rely on Virtualbox but may not work properly on systems with VirtualBox versions prior to v4.3.30 - VirtualBox v4.3.28 is currently installed. - Please upgrade or uninstall Virtualbox. - -see #78 - -## moby failed to boot - -Check the console, look for the login prompt. - -see #84 - -## Moby kernel problems - -In docker-system.log: "BUG" or "rcu_sched self-detected stall" - -see #87 - -## Invariants - -In docker-system.log: "INVARIANT VIOLATED" - -see #89 - diff --git a/support/nurse/_tags b/support/nurse/_tags deleted file mode 100644 index 980e5e3100..0000000000 --- a/support/nurse/_tags +++ /dev/null @@ -1,5 +0,0 @@ -true: debug, strict_sequence, principal -true: warn(@5@8@10@11@12@14@23@24@26@27@29) - -"src": include - diff --git a/support/nurse/build.sh b/support/nurse/build.sh deleted file mode 100755 index 66ac649f42..0000000000 --- a/support/nurse/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -ex - -eval `opam config env` -make diff --git a/support/nurse/opam b/support/nurse/opam deleted file mode 100644 index b55770823c..0000000000 --- a/support/nurse/opam +++ /dev/null @@ -1,18 +0,0 @@ -opam-version: "1.2" -name: "nurse" -version: "0.0.0" -maintainer: "pinata@docker.com" -authors: ["Dave Tucker" "David Scott"] -depends: [ - "ocamlfind" {build} - "lwt" - "cmdliner" - "re" - "github" - "result" - "mirage-block" - "mirage-block-unix" - "tar-format" - "logs" - "fmt" -] diff --git a/support/nurse/src/_tags b/support/nurse/src/_tags deleted file mode 100644 index 5a995e39fe..0000000000 --- a/support/nurse/src/_tags +++ /dev/null @@ -1,6 +0,0 @@ -true: \ - package(cmdliner github.unix re logs.fmt logs.cli fmt.tty fmt.cli) -true: \ - package(tar.lwt tar.mirage result astring mirage-block-unix mirage-block) -true: \ - package(io-page.unix, re.perl) diff --git a/support/nurse/src/archive.ml b/support/nurse/src/archive.ml deleted file mode 100644 index c6c1384987..0000000000 --- a/support/nurse/src/archive.ml +++ /dev/null @@ -1,141 +0,0 @@ -open Lwt.Infix -open Astring - -module KV_RO = Tar_mirage.Make_KV_RO(Block) - -type t = { - block: Block.t; - kv_ro: KV_RO.t; - diagnostic_id: string; - timestamp: string; -} - -module Symptom = struct - type symptom = { - problem: Problem.t; - archive: t; - contexts: string list; - } - - let to_markdown { problem; archive; contexts } = - let quote s = - let lines = String.cuts ~sep:"\n" s in - String.concat ~sep:"\n" @@ List.map (fun x -> "> " ^ x) lines in - Printf.sprintf "Detected symptom of problem '%s' in %s/%s.\n\n%s\n\nMay be related to %s\n\nThe following log matches:\n %s" - problem.Problem.label archive.diagnostic_id archive.timestamp - problem.Problem.description - (String.concat ~sep:" " @@ List.map (fun (repo, no) -> repo ^ "#" ^ (string_of_int no)) problem.Problem.link_to_issues) - (String.concat ~sep:"\nand\n" @@ List.map quote contexts) -end - -let get_diagnostic_id t = t.diagnostic_id -let get_timestamp t = t.timestamp - -type 'a error = ('a, [ `Msg of string]) Result.result - -let openarchive filename = - (* Add a `list` function to `Tar_mirage.Make_KV_RO`? *) - Lwt_unix.openfile filename [ Lwt_unix.O_RDONLY ] 0 - >>= fun fd -> - Lwt.finalize - (fun () -> - Tar_lwt_unix.Archive.list fd - ) (fun () -> - Lwt_unix.close fd - ) - >>= fun headers -> - - Block.connect filename - >>= function - | `Error e -> - Lwt.return (Result.Error (`Msg (Mirage_block.Error.string_of_error e))) - | `Ok block -> - Lwt.catch - (fun () -> - KV_RO.connect block - >>= function - | `Ok kv_ro -> - match headers with - | [] -> - Lwt.return (Result.Error (`Msg (Printf.sprintf "Archive %s has no files" filename))) - | first :: _rest -> - begin match String.cuts ~sep:"/" first.Tar_lwt_unix.Header.file_name with - | diagnostic_id :: timestamp :: _ -> - Lwt.return (Result.Ok { block; kv_ro; diagnostic_id; timestamp }) - | _ -> - Lwt.return (Result.Error (`Msg (Printf.sprintf "Archive %s file %s does not obey diagnostic_id/timestamp convention" filename first.Tar_lwt_unix.Header.file_name))) - end - ) (fun e -> - Lwt.return (Result.Error (`Msg (Printf.sprintf "Unexpected exception %s while processing %s" (Printexc.to_string e) filename))) - ) - >>= function - | Result.Error x -> - Block.disconnect block - >>= fun () -> - Lwt.return (Result.Error x) - | Result.Ok x -> - Lwt.return (Result.Ok x) - -let close t = - Block.disconnect t.block - -let analyse t = - Lwt_list.map_s - (fun problem -> - let key = t.diagnostic_id ^ "/" ^ t.timestamp ^ "/" ^ problem.Problem.in_file in - KV_RO.size t.kv_ro key - >>= function - | `Error _ -> - Logs.err (fun f -> f "Failed to find %s" key); - Lwt.return [] - | `Ok size -> - KV_RO.read t.kv_ro key 0 (Int64.to_int size) - >>= function - | `Error _ -> assert false - | `Ok buffers -> - let s = String.concat ~sep:"" (List.map Cstruct.to_string buffers) in - (* print_endline s; *) - try - let re = Re_perl.(compile @@ re ~opts:[`Multiline] problem.Problem.regexp) in - let groups = Re.exec re s in - (* At least one instance of the problem detected. Compute a context - substring for each one and then merge together (to avoid redundancy) *) - let rec loop i = match Re.Group.start groups i, Re.Group.stop groups i with - | start, stop -> (start, stop) :: (loop (i + 1)) - | exception Not_found -> [] in - let idxs = List.rev @@ loop 0 in - (* Aim to include at least [context_size] characters surrounding the match *) - let context_size = 1000 in - (* Snap to newlines and the edges of the string *) - let rec snap_to_newline delta from = - if from < 0 then 0 - else if from >= (String.length s) then String.length s - 1 - else if s.[from] = '\n' then from - else snap_to_newline delta (from + delta) in - let contexts = List.map (fun (start, stop) -> - snap_to_newline (-1) (start - context_size / 2), - snap_to_newline (+1) (stop + context_size / 2) - ) idxs in - (* Merge overlapping contexts to avoid redundant printing. *) - let merge = function - | [] -> [] - | at_least_one -> - let sorted = List.sort (fun a b -> compare (fst a) (fst b)) at_least_one in - let rec loop (a_start, a_end) = function - | [] -> [ a_start, a_end ] - | (b_start, b_end) :: next when b_start <= a_end -> loop (a_start, b_end) next - | b :: next -> (a_start, a_end) :: (loop b next) in - loop (List.hd sorted) (List.tl sorted) in - let contexts = merge contexts in - let contexts = List.map - (fun (context_start, context_end) -> - let context_length = context_end - context_start in - String.with_range ~first:context_start ~len:context_length s - ) contexts in - Lwt.return [ { Symptom.problem; archive = t; contexts } ] - with - | Not_found -> Lwt.return [] (* problem not detected *) - | Re_perl.Parse_error -> failwith (Printf.sprintf "Failed to parse perl-style regexp: %s" problem.Problem.regexp) - ) Problem.compiled_in - >>= fun x -> - Lwt.return (List.concat x) diff --git a/support/nurse/src/archive.mli b/support/nurse/src/archive.mli deleted file mode 100644 index 87eb7e73dc..0000000000 --- a/support/nurse/src/archive.mli +++ /dev/null @@ -1,32 +0,0 @@ - -type t -(** A diagnostic archive *) - -val get_diagnostic_id: t -> string -(** The unique ID which represents the software installation *) - -val get_timestamp: t -> string -(** The time the diagnostics were generated *) - -type 'a error = ('a, [ `Msg of string]) Result.result - -val openarchive: string -> t error Lwt.t -(** [openarchive filename] opens the archive and prepares it for queries. *) - -val close: t -> unit Lwt.t -(** [close t] closes the archive, releasing associated resources. *) - -module Symptom: sig - type symptom = { - problem: Problem.t; (** the problem we found *) - archive: t; (** the archive we found it in *) - contexts: string list; (** the log file context(s) *) - } - (** Symptom(s) of a specific problem in a specific archive *) - - val to_markdown: symptom -> string - (** Render a report as markdown *) -end - -val analyse: t -> Symptom.symptom list Lwt.t -(** [analyse t] looks for symptoms of known problems in the archive. *) diff --git a/support/nurse/src/cache.ml b/support/nurse/src/cache.ml deleted file mode 100644 index a5e377fa5e..0000000000 --- a/support/nurse/src/cache.ml +++ /dev/null @@ -1,107 +0,0 @@ -open Lwt.Infix - -let pinata_fetch = "pinata:fetch" (* image used to fetch from S3 *) - -type 'a error = ('a, [ `Msg of string ]) Result.result - -type diagnostic_id = string - -type timestamp = string - -let (/) = Filename.concat - -let home = - try - Unix.getenv "HOME" - with Not_found -> - Logs.err (fun f -> f "Please set the HOME environment variable"); - exit 1 - -let default_cache_dir = - let dir = home / ".nurse" in - (try Unix.mkdir dir 0o0700 with Unix.Unix_error(Unix.EEXIST, _, _) -> ()); - dir - -let errorf fmt = - Printf.ksprintf (fun s -> - Result.Error (`Msg s) - ) fmt - -let path_of diagnostic_id timestamp = - default_cache_dir / diagnostic_id / timestamp / "decompressed.tar" - -let fetch diagnostic_id = - (* Check AWS credentials have been setup *) - let credentials_path = home / ".aws" / "credentials" in - if not(Sys.file_exists credentials_path) - then Lwt.return (errorf "Failed to find AWS credentials in %s. Please follow the instructions in the README.md" credentials_path) - else begin - Docker.inspect pinata_fetch - >>= function - | Result.Error (`Msg m) -> Lwt.return (Result.Error (`Msg m)) - | Result.Error (`Exit _n) -> Lwt.return (errorf "Failed to find image %s. Please build it using the instructions in the README.md" pinata_fetch) - | Result.Ok _ -> - let log_volume = default_cache_dir ^ ":/logs" in - let cred_volume = credentials_path ^ ":/root/.aws/credentials" in - Docker.run [ "-it"; "--rm"; "-v"; log_volume; "-v"; cred_volume; pinata_fetch; "mac"; diagnostic_id ] - >>= function - | Result.Error (`Msg m) -> Lwt.return (Result.Error (`Msg m)) - | Result.Error (`Exit _n) -> Lwt.return (errorf "Failed to fetch diagnostic ID %s. Please check for typos. Perhaps the upload never completed?" diagnostic_id) - | Result.Ok _ -> - (* Find and decompress *) - let timestamps = Array.to_list @@ Sys.readdir (default_cache_dir / diagnostic_id) in - Lwt_list.iter_s - (fun timestamp -> - let dir = default_cache_dir / diagnostic_id / timestamp in - if Sys.is_directory dir then begin - (* Freshly downloaded files are compressed, so fix the name *) - ( if Sys.file_exists (dir / "report.tar") then begin - Lwt_unix.rename (dir / "report.tar") (dir / "decompressed.tar.gz") - end else Lwt.return () ) - >>= fun () -> - (* Properly-named compressed files should be decompressed *) - ( if Sys.file_exists (dir / "decompressed.tar.gz") then begin - Command.run "/usr/bin/gunzip" [ dir / "decompressed.tar.gz" ] - >>= function - | Result.Error (`Exit 1) -> - (* For some reason the archives have trailing garbage. Is - this caused by an S3 upload block size? We consider it a - success if the decompressed file is created. *) - if Sys.file_exists (dir / "decompressed.tar") - then Lwt.return () - else begin - Logs.err (fun f -> f "Failed to gunzip %s" (dir / "decompressed.tar.gz")); - Lwt.return () - end - | Result.Error (`Exit _n) -> - Logs.err (fun f -> f "Failed to gunzip %s" (dir / "decompressed.tar.gz")); - Lwt.return () - | Result.Error (`Msg m) -> - Logs.err (fun f -> f "%s" m); - Lwt.return () - | Result.Ok _ -> - Lwt.return () - end else Lwt.return () ) - end else Lwt.return () - ) timestamps - >>= fun () -> - Lwt.return (Result.Ok ()) - end - -type path = string - -let get diagnostic_id timestamp = - let path = path_of diagnostic_id timestamp in - if Sys.file_exists path - then Lwt.return (Result.Ok path) - else begin - Logs.info (fun f -> f "Archive not found in cache, asking S3"); - fetch diagnostic_id - >>= function - | Result.Error (`Msg m) -> - Lwt.return (Result.Error (`Msg m)) - | Result.Ok () -> - if Sys.file_exists path - then Lwt.return (Result.Ok path) - else Lwt.return (errorf "Failed to find archive %s/%s on S3" diagnostic_id timestamp) - end diff --git a/support/nurse/src/cache.mli b/support/nurse/src/cache.mli deleted file mode 100644 index 6c8a1aa8b6..0000000000 --- a/support/nurse/src/cache.mli +++ /dev/null @@ -1,12 +0,0 @@ - - -type 'a error = ('a, [ `Msg of string ]) Result.result - -type diagnostic_id = string - -type timestamp = string - -type path = string - -val get: diagnostic_id -> timestamp -> path error Lwt.t -(** Return a local path of a decompressed archive *) diff --git a/support/nurse/src/command.ml b/support/nurse/src/command.ml deleted file mode 100644 index acb3a9a653..0000000000 --- a/support/nurse/src/command.ml +++ /dev/null @@ -1,23 +0,0 @@ -open Lwt.Infix - -let errorf fmt = - Printf.ksprintf (fun s -> - Result.Error (`Msg s) - ) fmt - -let run path args = - let args = Filename.basename path :: args in - Logs.info (fun f -> f "%s" (String.concat " " args)); - Lwt_process.with_process_in (path, Array.of_list args) - (fun p -> - Lwt_io.read p#stdout - >>= fun output -> - p#status - >>= function - | Unix.WEXITED 0 -> - Lwt.return (Result.Ok output) - | Unix.WEXITED n -> - Lwt.return (Result.Error (`Exit n)) - | Unix.WSIGNALED n | Unix.WSTOPPED n -> - Lwt.return (errorf "Caught signal %d while running %s" n path) - ) diff --git a/support/nurse/src/command.mli b/support/nurse/src/command.mli deleted file mode 100644 index f970746704..0000000000 --- a/support/nurse/src/command.mli +++ /dev/null @@ -1,3 +0,0 @@ - -val run: string -> string list -> (string, [ `Exit of int | `Msg of string ]) Result.result Lwt.t -(** [run path args] runs a process and returns stdout *) diff --git a/support/nurse/src/docker.ml b/support/nurse/src/docker.ml deleted file mode 100644 index 71a41ca9ba..0000000000 --- a/support/nurse/src/docker.ml +++ /dev/null @@ -1,7 +0,0 @@ -open Lwt.Infix - -let docker = "/usr/local/bin/docker" - -let inspect name = Command.run docker [ "inspect"; name ] - -let run args = Command.run docker ("run" :: args) diff --git a/support/nurse/src/docker.mli b/support/nurse/src/docker.mli deleted file mode 100644 index 52306195fe..0000000000 --- a/support/nurse/src/docker.mli +++ /dev/null @@ -1,7 +0,0 @@ - - -val inspect: string -> (string, [ `Exit of int | `Msg of string ]) Result.result Lwt.t -(** Same as the output of `docker inspect` *) - -val run: string list -> (string, [ `Exit of int | `Msg of string ]) Result.result Lwt.t -(** Same as the output of `docker run ` *) diff --git a/support/nurse/src/labels.ml b/support/nurse/src/labels.ml deleted file mode 100644 index dfcc791050..0000000000 --- a/support/nurse/src/labels.ml +++ /dev/null @@ -1,139 +0,0 @@ -module ForMac = struct - type t = - | Stable1_12_0 - | Stable1_12_0_a - | Stable1_12_1 - | Beta21 - | Beta22 - | Beta23 - | Beta24 - | Beta25 - | Beta26 - | Beta26_1 - - let to_string = function - | Stable1_12_0 -> "version/1.12.0" - | Stable1_12_0_a -> "version/1.12.0-a" - | Stable1_12_1 -> "version/1.12.1" - | Beta21 -> "version/beta21" - | Beta22 -> "version/beta22" - | Beta23 -> "version/beta23" - | Beta24 -> "version/beta24" - | Beta25 -> "version/beta25" - | Beta26 -> "version/beta26" - | Beta26_1 -> "version/beta26.1" - - let of_string = function - | "1.12.0" -> Some Stable1_12_0 - | "1.12.0-a" -> Some Stable1_12_0_a - | "1.12.1" -> Some Stable1_12_1 - | "1.12.0-beta21" -> Some Beta21 - | "1.12.0-beta22" -> Some Beta22 - | "1.12.1-rc1-beta23" -> Some Beta23 - | "1.12.1-beta24" -> Some Beta24 - | "1.12.1-beta25" -> Some Beta25 - | "1.12.1-beta26" -> Some Beta26 - | "1.12.1-beta26.1" -> Some Beta26_1 - | _ -> None -end - -module Osx = struct - type t = - | Yosemite - | ElCapitan - | Sierra - - let to_string = function - | Yosemite -> "osx/10.10.x" - | ElCapitan -> "osx/10.11.x" - | Sierra -> "osx/10.12 (beta)" - - let of_string = function - | "10.10" -> Some Yosemite - | "10.11" -> Some ElCapitan - | "10.12" -> Some Sierra - | _ -> None -end - -module Status = struct - (* type t should be in Stage order (see Stage module below) *) - type t = - | NeedsTriage - | MoreInfoNeeded - | WontFix - | Acknowledged - | InProgress - | Fixed - | ReleasedBeta - | ReleasedStable - - module Set = Set.Make(struct - type nonrec t = t - - let compare = compare - end) - - module Stage = struct - type t = - | TriageStage - | WontFixStage - | AcknowledgedStage - | InProgressStage - | FixedStage - | ReleasedStage - - let of_status = function - | NeedsTriage | MoreInfoNeeded -> TriageStage - | WontFix -> WontFixStage - | Acknowledged -> AcknowledgedStage - | InProgress -> InProgressStage - | Fixed -> FixedStage - | ReleasedBeta | ReleasedStable -> ReleasedStage - - let to_string = function - | TriageStage -> "triage" - | WontFixStage -> "wontfix" - | AcknowledgedStage -> "acknowledged" - | InProgressStage -> "inprogress" - | FixedStage -> "fixed" - | ReleasedStage -> "released" - end - - let to_string = function - | NeedsTriage -> "status/0-triage" - | WontFix -> "status/0-wont-fix" - | MoreInfoNeeded -> "status/0-more-info-needed" - | Acknowledged -> "status/1-acknowledged" - | InProgress -> "status/2-in-progress" - | Fixed -> "status/3-fixed" - | ReleasedBeta -> "status/4-fix-released-beta" - | ReleasedStable -> "status/4-fix-released-stable" - - let of_string = function - | "status/0-triage" -> Some NeedsTriage - | "status/0-wont-fix" -> Some WontFix - | "status/0-more-info-needed" -> Some MoreInfoNeeded - | "status/1-acknowledged" -> Some Acknowledged - | "status/2-in-progress" -> Some InProgress - | "status/3-fixed" -> Some Fixed - | "status/4-fix-released-beta" -> Some ReleasedBeta - | "status/4-fix-released-stable" -> Some ReleasedStable - | _ -> None -end - -type t = { for_mac : ForMac.t option; osx : Osx.t option; status : Status.t } - -let to_string_list l = - let result = [Status.to_string l.status] in - let result = match l.for_mac with - | None -> result - | Some x -> result@ [ForMac.to_string x] - in - match l.osx with - | None -> result - | Some x -> result@ [Osx.to_string x] - -let to_string l = - let list_of_l = to_string_list l in - String.concat ", " list_of_l - diff --git a/support/nurse/src/nurse.ml b/support/nurse/src/nurse.ml deleted file mode 100644 index c578615152..0000000000 --- a/support/nurse/src/nurse.ml +++ /dev/null @@ -1,352 +0,0 @@ -open Labels - -(* Triage *) - -let get_token t = - match t with - | None -> Github.Token.of_string "" - | Some t -> Github.Token.of_string t - -let version_number = Re.(seq [ - rep digit; - str "."; - rep digit; - group( seq [ - opt (str "."); - opt (rep digit); - ]; - ); - ]) - -let for_mac_version_re = - Re.(compile(seq [ - str "Docker for Mac: "; - opt (str "version: "); - group ( seq [ - version_number; - opt (str "-"); - opt (rep alnum); - opt (str "-"); - opt (rep alnum); - ]); - ])) - -let get_for_mac_label body = - let for_mac_matches = Re.exec_opt for_mac_version_re body in - match for_mac_matches with - | None -> None - | Some for_mac_matches -> begin - match - try Some (Re.get for_mac_matches 1) - with _ -> None - with - | None -> None; - | Some s -> ForMac.of_string s - end - -let osx_version_re = - Re.(compile(seq [ - alt [ - str "macOS: Version "; - str "OS X: version "; - ]; - group ( - version_number; - ); - ])) - -let get_osx_label body = - let osx_matches = Re.exec_opt osx_version_re body in - match osx_matches with - | None -> None - | Some osx_matches -> begin - match - try Some (Re.get osx_matches 1) - with _ -> None - with - | None -> None; - | Some version -> begin - (* Check if there is a patch version, if yes, strip it *) - match - try Some (Re.get osx_matches 2) - with _ -> None - with - | None -> Osx.of_string version - | Some patch -> begin - let stop = (String.length version) - (String.length patch) in - Osx.of_string @@ String.sub version 0 stop - end - end - end - -let should_skip l = - let lst = List.map (fun l -> - let name = Labels.Status.of_string l.Github_t.label_name in - match name with - | None -> false - | Some _status -> true - ) l in - List.fold_left (||) false lst - -module IntMap = Map.Make(struct type t = int let compare = compare end) - -let triage_issue acc issue = - let open Github_t in - (* Check for existing status labels *) - let labels = issue.issue_labels in - if should_skip labels - then Github.Monad.return acc - else - (* Check reported version *) - let for_mac_label = get_for_mac_label issue.issue_body in - let osx_label = get_osx_label issue.issue_body in - let computed_labels = { - for_mac = for_mac_label; - osx = osx_label; - (* Initial status is always NeedsTriage *) - status = Labels.Status.NeedsTriage; - } in - Logs.app (fun m -> - m "Issue %d: %s" issue.issue_number (to_string computed_labels)); - Github.Monad.return (IntMap.add issue.issue_number computed_labels acc) - -module Prompt = struct - type yes_no = [ - | `Yes - | `No - ] - - type response = [ - | yes_no - | `Other of string - ] - - let yes_no_of_input ~default = function - | "y" | "yes" -> Some `Yes - | "n" | "no" -> Some `No - | "" -> Some default - | _other -> None - - let rec yes_no ?(default=`Yes) s = - let options = match default with - | `Yes -> " [Y/n]" - | `No -> " [y/N]" - in - Printf.printf "%s%s %!" s options; - let r = String.(trim (lowercase (input_line stdin))) in - match yes_no_of_input ~default r with - | Some yes_no -> yes_no - | None -> - Printf.printf "I didn't understand that. Please enter 'y' or 'n'.\n%!"; - yes_no ~default s - -end - -let triage () token user repo = - let t = Github.(Monad.(run ( - API.set_token (get_token token) - >>= fun () -> - let issues = Issue.for_repo ~user ~repo () in - Stream.fold triage_issue IntMap.empty issues - >>= fun labels_to_apply -> - if IntMap.is_empty labels_to_apply - then embed Lwt.return_unit - else - match Prompt.yes_no "Would you like to apply these labels?" with - | `No -> embed Lwt.return_unit - | `Yes -> - IntMap.fold (fun num l m -> - m >>= fun () -> - let labels = Labels.to_string_list l in - Github.Issue.add_labels ~user ~repo ~num ~labels () - >>~ fun _labels -> embed Lwt.return_unit - ) labels_to_apply (embed Lwt.return_unit) - ))) in - Lwt_main.run t - -let clean () token user repo = - let t = Github.(Monad.(run ( - API.set_token (get_token token) - >>= fun () -> - let issues = Issue.for_repo ~user ~repo () in - Stream.fold Nurse_clean.compute_actions [] issues - >>= List.fold_left Nurse_clean.(fun m action -> - let open Github_t in - m >>= fun () -> - let issue = action.issue in - Printf.printf "Issue %d: %s\n%s\n" - issue.issue_number issue.issue_title issue.issue_html_url; - List.iter (fun change -> - Printf.printf "%s\n%!" (Nurse_clean.string_of_change change) - ) action.changes; - match Prompt.yes_no "Perform these changes?" with - | `No -> Printf.printf "Not this time\n%!"; return () - | `Yes -> clean_issue ~user ~repo action - ) (embed Lwt.return_unit) - ))) in - Lwt_main.run t - -let notify () token user repo label filename = - let t = - let open Lwt.Infix in - Lwt_unix.openfile filename [ Lwt_unix.O_RDONLY ] 0 - >>= fun fd -> - let ic = - Lwt_io.of_fd ~close:(fun () -> Lwt_unix.close fd) ~mode:Lwt_io.input fd - in - Lwt_io.read ic - >>= fun body -> - Lwt_io.close ic - >>= fun () -> - Printf.printf - "For issues with label '%s' I will append the following comment:\n%!" - label; - Printf.printf "\n%s\n%!" body; - - Github.(Monad.(run ( - let open Github_t in - API.set_token (get_token token) - >>= fun () -> - Stream.iter (fun issue -> - (* Check for existing status labels *) - let labels = - List.map (fun l -> l.Github_t.label_name) issue.issue_labels - in - if List.mem label labels then begin - Printf.printf "Issue %d: %s\n%s\n" - issue.issue_number issue.issue_title issue.issue_html_url; - match Prompt.yes_no "Append comment?" with - | `Yes -> - Printf.printf "OK, commenting\n%!"; - Issue.create_comment ~user ~repo ~num:issue.issue_number ~body () - >>~ fun comment -> - Printf.printf "%s\n" comment.issue_comment_html_url; - return () - | `No -> - Printf.printf "Not this time\n%!"; - return () - end else return () - ) (Issue.for_repo ~state:`All ~user ~repo ()) - ))) in - Lwt_main.run t - -let analyse () diagnostic_id timestamp = - let open Lwt.Infix in - let t = - Cache.get diagnostic_id timestamp - >>= function - | Result.Error (`Msg m) -> - Logs.err (fun f -> f "Failed to download archive from S3: %s" m); - Lwt.return () - | Result.Ok filename -> - Archive.openarchive filename - >>= function - | Result.Ok t -> - Logs.app (fun f -> f "Analysing report with diagnostic ID %s and timestamp %s" - diagnostic_id timestamp - ); - Archive.analyse t - >>= fun symptoms -> - Lwt_list.iter_s - (fun symptom -> - let md = Archive.Symptom.to_markdown symptom in - Lwt_io.write Lwt_io.stdout md - ) symptoms - >>= fun () -> - Archive.close t - | Result.Error (`Msg m) -> - Logs.err (fun f -> f "Failed to open archive: %s" m); - Lwt.return () in - Lwt_main.run t - -(* Command line interface *) - -open Cmdliner - -(* Logging *) - -let setup_log style_renderer level = - Fmt_tty.setup_std_outputs ?style_renderer (); - Logs.set_level level; - Logs.set_reporter (Logs_fmt.reporter ()); - () - -let setup_log = - Term.(const setup_log $ Fmt_cli.style_renderer () $ Logs_cli.level ()) - -(* Commands *) - -let github_token = - let doc = "Github API Token." in - Arg.(value & opt (some string) None & info ["token"] ~docv:"TOKEN" ~doc) - -let github_owner = - let doc = "Github Repository Owner." in - Arg.(required & pos 0 (some string) None & info [] ~docv:"OWNER" ~doc) - -let github_repo = - let doc = "Github Repository Name." in - Arg.(required & pos 1 (some string) None & info [] ~docv:"REPO" ~doc) - -let triage_cmd = - let doc = "Triage bugs" in - let man = [`S "DESCRIPTION"; `P "Triages bugs";] in - Term.(const triage $ setup_log $ github_token $ github_owner $ github_repo), - Term.info "triage" ~doc ~man - -let notify_cmd = - let label = - let doc = "Issue label" in - Arg.(required & pos 2 (some string) None & info [] ~docv:"LABEL" ~doc) in - let filename = - let doc = "File containing comment to add" in - Arg.(required & pos 3 (some file) None & info [] ~docv:"FILENAME" ~doc) in - let doc = "Append a comment to all issues with a specific tag" in - let man = [ - `S "DESCRIPTION"; - `P "Given a label and a filename, iterate over every issue (open and closed)\ - containing the tag and append the file's contents as a new comment."; - `P "You will br prompted to confirm every comment."; - ] in - Term.(const notify $ setup_log $ github_token $ github_owner $ github_repo $ label $ filename), - Term.info "notify" ~doc ~man - -let analyse_cmd = - let diagnostic_id = - let doc = "Diagnostic ID recorded in the tracker" in - Arg.(value & pos 0 string "F4466F9B-150B-4082-A6F5-6BA8FA0F085B" & info [] ~docv:"ID" ~doc) in - let timestamp = - let doc = "Timestamp of the report" in - Arg.(value & pos 1 string "20160802-140735" & info [] ~docv:"TIMESTAMP" ~doc) in - let doc = "Look for well-known errors in diagnostic tarballs" in - let man = [ - `S "DESCRIPTION"; - `P "This is a temporary command which should be merged with triage later" - ] in - Term.(const analyse $ setup_log $ diagnostic_id $ timestamp), - Term.info "analyse" ~doc ~man - -let clean_cmd = - let doc = "Clean bugs" in - let man = [`S "DESCRIPTION"; `P "Fixes labels and closes stale issues";] in - Term.(const clean $ setup_log $ github_token $ github_owner $ github_repo), - Term.info "clean" ~doc ~man - -let default_cmd = - let doc = "assists in the triaging and care of bugs" in - let man = [ `S "BUGS"; `P "Open an issue on GitHub";] in - Term.(ret (const (fun _ -> `Help (`Plain, None)) $ const ())), - Term.info "nurse" ~version:"0.0.1" ~doc ~man - -let cmds = [ - triage_cmd; - analyse_cmd; - notify_cmd; - clean_cmd; -] - -(* Entrypoint *) - -let () = match Term.eval_choice default_cmd cmds with - | `Error _ -> exit 1 - | _ -> exit (if Logs.err_count () > 0 then 1 else 0) diff --git a/support/nurse/src/nurse_clean.ml b/support/nurse/src/nurse_clean.ml deleted file mode 100644 index 262a8e2437..0000000000 --- a/support/nurse/src/nurse_clean.ml +++ /dev/null @@ -1,94 +0,0 @@ -type change = - | Close of string - | Remove_labels of string * string list - -type action = { - issue : Github_t.issue; - changes : change list; -} - -let string_of_change = function - | Close descr -> "Close because "^descr - | Remove_labels (descr, labels) -> - Printf.sprintf "Remove labels [%s] because %s" - (String.concat ", " labels) descr - -(* TODO: Offer to close issues (with a note) that are very old or - otherwise outdated. *) -let compute_actions list issue = - let open Github_t in - let open Labels in - - let statuses = List.fold_left (fun set label -> - match Status.of_string label.label_name with - | Some Status.MoreInfoNeeded (* MoreInfoNeeded is always allowed *) - | None -> set - | Some status -> Status.Set.add status set - ) Status.Set.empty issue.issue_labels in - - (* Compute status labels to remove due to later stage *) - let latest_status = - try Status.Set.max_elt statuses with Not_found -> Status.NeedsTriage - in - let latest_stage = Status.Stage.of_status latest_status in - let _to_keep, to_remove = Status.Set.partition (fun status -> - latest_stage = Status.Stage.of_status status - ) statuses in - let changes = - if Status.Set.is_empty to_remove then [] - else - let message = Printf.sprintf "issue is at stage %s" - (Status.Stage.to_string latest_stage) - in - let labels = - List.map Status.to_string (Status.Set.elements to_remove) - in - [ Remove_labels (message, labels) ] - in - - (* Decide whether to close issue due to completion *) - let changes = - if Status.(Set.mem ReleasedBeta) statuses - && Status.(Set.mem ReleasedStable) statuses - then - let message = "a fix has been released on beta and stable channels" in - (Close message)::changes - else changes - in - - (* Decide whether to close issue due to WontFix *) - let changes = - if Status.(Set.mem WontFix) statuses - then (Close "the issue has been marked WontFix")::changes - else changes - in - - Github.Monad.return (match changes with - | [] -> list - | changes -> { issue; changes; }::list - ) - -let clean_issue ~user ~repo action = - let open Github.Monad in - let num = action.issue.Github_t.issue_number in - List.fold_left (fun m -> function - | Close _ -> - m >>= fun () -> - let issue = Github_t.{ - update_issue_title = None; - update_issue_body = None; - update_issue_state = Some `Closed; - update_issue_assignee = None; - update_issue_milestone = None; - update_issue_labels = None; - } in - Github.Issue.update ~user ~repo ~num ~issue () - >>~ fun _updated_issue -> - return () - | Remove_labels (_, labels) -> List.fold_left (fun m name -> - m >>= fun () -> - Github.Issue.remove_label ~user ~repo ~num ~name () - >>~ fun _labels -> - return () - ) m labels - ) (return ()) action.changes diff --git a/support/nurse/src/problem.ml b/support/nurse/src/problem.ml deleted file mode 100644 index 127112cb7a..0000000000 --- a/support/nurse/src/problem.ml +++ /dev/null @@ -1,117 +0,0 @@ -open Sexplib.Std - -type t = { - in_file: string; - regexp: string; - label: string; - description: string; - link_to_issues: (string * int) list; - link_from_issues: (string * int) list; -} [@@deriving sexp] - -let for_mac = "docker/for-mac" - -let transfused_crash = { - in_file = "docker-system.log"; - regexp = "Transport endpoint is not connected"; - label = "transfused-crash"; - description = "This error suggests that a component of the volume sharing system failed."; - link_to_issues = [ for_mac, 5 ]; - link_from_issues = []; -} - -let qcow2_corruption = { - in_file = "docker-system.log"; - regexp = "Invalid_argument\\(\"Cstruct.sub"; - label = "qcow2-corruption"; - description = "This error suggests that the .qcow2 file is corrupt and will need to be recreated."; - link_to_issues = [ for_mac, 11 ]; - link_from_issues = []; -} - -let var_lib_docker_corruption1 = { - in_file = "moby/var/log/docker.log"; - regexp = "invalid checksum digest format"; - label = "aufs-corruption"; - description = "The daemon cannot start because some files in /var/lib/docker are corrupt. \ - This can happen if the filesystem is unmounted uncleanly. The workaround is to reset to \ - factory defaults which will unfortunately delete /var/lib/docker: all containers and \ - images will need to be rebuilt."; - link_to_issues = [ for_mac, 20 ]; - link_from_issues = []; -} - -let var_lib_docker_corruption2 = { var_lib_docker_corruption1 with regexp = "invalid mount id value" } - -let docker_didnt_start = { - in_file = "moby/var/log/docker.log"; - regexp = "Error starting daemon:"; - label = "daemon-didnt-start"; - description = "The docker daemon inside the VM failed to start."; - link_to_issues = []; - link_from_issues = []; -} - -let communication_with_networking = { - in_file = "docker-system.log"; - regexp = "Communication with networking components failed"; - label = "vmnetd-comm-failure"; - description = "The UI failed to communicate with the networking helper process."; - link_to_issues = [ for_mac, 61 ]; - link_from_issues = []; -} - -let too_many_hyperkits = { - in_file = "ps-ax.log"; - regexp = "hyperkit -A -m(.|\n)+hyperkit -A -m"; - label = "more-than-one-hyperkit"; - description = "More than one hyperkit process has started and is accessing the \ - qcow2 disk at the same time. This will lead to corruption and Docker must be \ - reset to factory defaults."; - link_to_issues = [ for_mac, 71 ]; - link_from_issues = []; -} - -let virtualbox = { - in_file = "docker-system.log"; - regexp = "Please upgrade or uninstall Virtualbox"; - label = "uninstall-virtualbox"; - description = "Some parts of Virtualbox may still be installed. Please follow \ - https://www.virtualbox.org/manual/ch02.html#idm871 to completely uninstall \ - Virtualbox. Please note that dragging the application to the trash is not enough:\ - there are kernel modules installed as well."; - link_to_issues = [ for_mac, 78 ]; - link_from_issues = []; -} - -let moby_kernel = { - in_file = "docker-system.log"; - regexp = "rcu_sched self-detected stall"; - label = "moby-kernel-froze"; - description = "The kernel inside the VM stalled so Docker must be restarted."; - link_to_issues = [ for_mac, 87 ]; - link_from_issues = []; -} - -let invariants = { - in_file = "docker-system.log"; - regexp = "INVARIANT VIOLATED"; - label = "invariant-violated"; - description = "An invariant within the code of one of the components was \ - not held. Docker needs to be restarted."; - link_to_issues = [ for_mac, 89 ]; - link_from_issues = []; -} - -let compiled_in = [ - transfused_crash; - qcow2_corruption; - var_lib_docker_corruption1; - var_lib_docker_corruption2; - docker_didnt_start; - communication_with_networking; - too_many_hyperkits; - virtualbox; - moby_kernel; - invariants; -] diff --git a/support/nurse/src/problem.mli b/support/nurse/src/problem.mli deleted file mode 100644 index aeda683c80..0000000000 --- a/support/nurse/src/problem.mli +++ /dev/null @@ -1,13 +0,0 @@ - -type t = { - in_file: string; (** Name of file within the diagnostic archive *) - regexp: string; (** If this regexp matches, the problem probably exists *) - label: string; (** A short label (e.g. "qcow2-corruption") *) - description: string; (** Description suitable for posting as a github comment *) - link_to_issues: (string * int) list; (** (repo, issue) we should link this to *) - link_from_issues: (string * int) list; (** (repo, issue) we should link to this *) -} [@@deriving sexp] -(** A well-known problem *) - -val compiled_in: t list -(** Problems compiled into this binary (as opposed to downloaded) *) diff --git a/support/s3/.dockerignore b/support/s3/.dockerignore deleted file mode 100644 index 428006820e..0000000000 --- a/support/s3/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -data/ -html/ diff --git a/support/s3/.gitignore b/support/s3/.gitignore deleted file mode 100644 index 5a86f45b31..0000000000 --- a/support/s3/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -data/ -html/ -.s3cfg -s3creds.env diff --git a/support/s3/Dockerfile.awscli b/support/s3/Dockerfile.awscli deleted file mode 100644 index e1e043db53..0000000000 --- a/support/s3/Dockerfile.awscli +++ /dev/null @@ -1,10 +0,0 @@ -FROM alpine:latest -MAINTAINER Anil Madhavapeddy -RUN \ - mkdir -p /aws && \ - apk -Uuv add groff less python py-pip && \ - pip install awscli && \ - apk --purge -v del py-pip && \ - rm /var/cache/apk/* -WORKDIR /aws -ENTRYPOINT ["aws"] diff --git a/support/s3/Dockerfile.fetch b/support/s3/Dockerfile.fetch deleted file mode 100644 index 0a1266e63a..0000000000 --- a/support/s3/Dockerfile.fetch +++ /dev/null @@ -1,10 +0,0 @@ -FROM python:2-alpine -MAINTAINER Dave Tucker - -RUN pip install awscli -ADD fetch.sh /usr/local/bin/fetch - -VOLUME /logs -VOLUME /root/.aws - -ENTRYPOINT ["fetch"] diff --git a/support/s3/Dockerfile.tohtml b/support/s3/Dockerfile.tohtml deleted file mode 100644 index 18c0e93efc..0000000000 --- a/support/s3/Dockerfile.tohtml +++ /dev/null @@ -1,4 +0,0 @@ -FROM alpine -RUN apk update && apk add py-pygments py-pip bash tar coreutils -VOLUME /logs -VOLUME /html diff --git a/support/s3/README.md b/support/s3/README.md deleted file mode 100644 index 869b031472..0000000000 --- a/support/s3/README.md +++ /dev/null @@ -1,63 +0,0 @@ -Log formatter from S3 -===================== - -- `sync.sh` will populate the `data/` directory with the latest support logs -- `tohtml.sh` will process them into HTML in the `html/` directory. - -TODO: - -- classify log files so they can be processed with different containers (E.g. fuse) -- better index page -- add file sizes -- add infra for grep scripts to do autotriage -- plumb through a docker push to our private repo with the results - - -## Requesting Access To AWS - -To get the necessary account, please ask @dave-tucker, @balrajs, @ijc25 or anyone else who has admin access on AWS... - -- Your account needs to be created -- You need to be added to the `pinata` group. -- The `docker-pinata-support` bucket policy needs to have your username added to the whitelist - -## Using AWS - -You will be given a CSV with your username, password and login URL -Please login and change your password. You may also take this opportunity to set up 2FA. - -Once logged in, follow [these instructions](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey) to create an Access Key. This will let you use the AWS API and CLI tools. - -To create the `~/.aws/credentials` file, your best bet is to first install the AWS CLI. - -``` -# brew install pip if you don't have it already. -pip install awscli -``` - -Then you can `aws configure` and follow the instructions. - -If you have more than one set of AWS credentials, you may want to consider creating a different "profile" for each one. In this case: - -``` -aws configure --profile pinata -``` - -In order for your file to be bind-mountable as a `~/.aws/credentials` file, you may want to maintain a copy at `~/.aws/pinata-credentials` with your Pinata credentials as the `default` profile. - -# Fetch - -Fetch is a tool that fetches the logs for a provided platform/uuid and optionally a report -It connects to S3 and outputs the logs to the mounted `/logs` directory - -Example Usage: - -```bash -$ docker build -t pinata:fetch -f Dockerfile.fetch . - -$ docker run -it --rm \ - -v /my/logs/dir:/logs \ - -v /home/me/.aws/credentials:/root/.aws/credentials \ - pinata:fetch $platform $uuid $report -``` - diff --git a/support/s3/fetch.sh b/support/s3/fetch.sh deleted file mode 100755 index a9c0955d79..0000000000 --- a/support/s3/fetch.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -set -e - -# $1 is the platform (mac|win) -# $2 is the UUID from the bug report -# $3 is the optional report ID - -path="" -dst="" -bucket="docker-pinata-support" - -if [ -z "${1}" ]; then - echo "No platform provided" - exit 1 -fi - -case "${1}" in - win) - path="incoming/w1" - ;; - mac) - path="incoming/2" - ;; - *) - echo "${1} is not a valid platform" - exit 1 -esac - -if [ -z "${2}" ]; then - echo "No UUID provided" - exit 1 -fi - -path="${path}/${2}" -dst="/logs/${2}" - -if [ -n "${3}" ]; then - path="${path}/${3}" - dst="${dst}/${3}" -fi - -aws s3 cp "s3://${bucket}/${path}" "${dst}" --recursive --quiet diff --git a/support/s3/formatter/process-all-users.sh b/support/s3/formatter/process-all-users.sh deleted file mode 100755 index 19530c1377..0000000000 --- a/support/s3/formatter/process-all-users.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -IN=$1 -OUT=$2 - -if [ ! -d "$1" ]; then - echo INDIR not found - echo Usage: $0 INDIR OUTDIR - exit 1 -fi - -if [ ! -d "$2" ]; then - echo OUTDIR not found - echo Usage: $0 INDIR OUTDIR - exit 1 -fi - -mkdir -p ${OUT} -cat >${OUT}/index.html < - -

Docker.App support logs

-

Upload By UUID

-

    -Header-fragment - -cd ${IN} -for uuid in *; do - bash /formatter/process-one-user.sh ${IN}/$uuid ${OUT}/$uuid $uuid - echo "
  • $uuid
  • " >> ${OUT}/index.html -done - -cat >>${OUT}/index.html <

    - - -Footer-fragment diff --git a/support/s3/formatter/process-one-upload.sh b/support/s3/formatter/process-one-upload.sh deleted file mode 100755 index 6b2359fd54..0000000000 --- a/support/s3/formatter/process-one-upload.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh -e - -IN=$1 -OUT=$2 - -if [ ! -d "$1" ]; then - echo Usage: $0 INDIR OUTDIR - exit 1 -fi - -if [ -z "$2" ]; then - echo Usage: $0 INDIR OUTDIR - exit 1 -fi - -d=$3 -dt=`echo $d | awk -F- '{print $1}'` -tm=`echo $d | awk -F- '{print $2}' | fold -w2 | paste -sd':' -` - -rm -rf ${OUT}/*.html -mkdir -p ${OUT} -cd ${OUT} - -tar --strip-components=2 -xf ${IN}/report.tar - -cat >index.html < - -

    User `cat ${OUT}/user-id`

    -

    back to date index

    -

    -Date:           $dt $tm
    -Version:        `cat ${OUT}/version`
    -`cat ${OUT}/sw_vers`
    -

    -

    Logs

    -

      -Header-fragment - -FILES=`find . -type f` -echo ${FILES} -for i in `find . -type f`; do - file=`echo $i | sed -e 's,^\./,,g'` - case $i in - *DS_Store) - echo Skipping DS_Store - ;; - *.swp) - echo Ignoring dot files - ;; - *.html) - echo Skipping $i as HTML already - ;; - *) - echo Processing $i - pygmentize -f html -O full,encoding=latin1 -l text -o $i.html $i - echo "
    • $file
    • " >> index.html - ;; - esac -done - -cat >>index.html <

      - - -Footer-fragment diff --git a/support/s3/formatter/process-one-user.sh b/support/s3/formatter/process-one-user.sh deleted file mode 100755 index e02f0d9dba..0000000000 --- a/support/s3/formatter/process-one-user.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh -e - -IN=$1 -OUT=$2 - -if [ ! -d "$1" ]; then - echo INDIR not found - echo Usage: $0 INDIR OUTDIR UUID - exit 1 -fi - -if [ -z "$2" ]; then - echo OUTDIR not specified - echo Usage: $0 INDIR OUTDIR UUID - exit 1 -fi - -if [ -z "$3" ]; then - echo UUID not specified - echo Usage: $0 INDIR OUTDIR UUID - exit 1 -fi - -user=$3 - -mkdir -p ${OUT} -cat >${OUT}/index.html < - -

      Docker.App logs for user $user

      -

      Uploads by Date

      -

        -Header-fragment - -cd ${IN} -for d in 20*; do - /formatter/process-one-upload.sh ${IN}/$d ${OUT}/$d $d - echo $d - dt=`echo $d | awk -F- '{print $1}'` - tm=`echo $d | awk -F- '{print $2}' | fold -w2 | paste -sd':' -` - echo "
      • $dt $tm
      • " >> ${OUT}/index.html -done - -cat >>${OUT}/index.html <

        - - -Footer-fragment - diff --git a/support/s3/s3creds.env.in b/support/s3/s3creds.env.in deleted file mode 100644 index 57c51ca4a5..0000000000 --- a/support/s3/s3creds.env.in +++ /dev/null @@ -1,2 +0,0 @@ -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= diff --git a/support/s3/sync.sh b/support/s3/sync.sh deleted file mode 100755 index e752fa409a..0000000000 --- a/support/s3/sync.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -ex - -VERSION=2 - -docker build -t aws -f Dockerfile.awscli . - -if [ ! -e "s3creds.env" ]; then - echo Need to initialise S3 config from s3creds.env.in - exit 1 -fi - -docker run -v `pwd`/data:/mnt --env-file s3creds.env \ - aws s3 sync --size-only s3://docker-pinata-support/incoming /mnt diff --git a/support/s3/tohtml.sh b/support/s3/tohtml.sh deleted file mode 100755 index 215ea9156f..0000000000 --- a/support/s3/tohtml.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -ex - -docker build -q -f Dockerfile.tohtml -t tohtml . -docker run -v `pwd`/html:/html tohtml sh -c "rm -rf /html/*" - -VERSION=2 -ARGS="$ARGS -v `pwd`/formatter:/formatter" -ARGS="$ARGS -v `pwd`/html:/html" - -if [ -z "$1" ]; then - echo Processing all users - docker run $ARGS \ - -v `pwd`/data/$VERSION:/logs \ - -it tohtml /formatter/process-all-users.sh /logs /html -else - docker run $ARGS \ - -v `pwd`/data/$VERSION/$1:/logs \ - -it tohtml /formatter/process-one-user.sh /logs /html $1 -fi diff --git a/tests/.gitignore b/tests/.gitignore deleted file mode 100644 index 9a48fb5167..0000000000 --- a/tests/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.pyc -/_results -vm.json diff --git a/tests/LICENSE b/tests/LICENSE deleted file mode 100644 index 616602c2f0..0000000000 --- a/tests/LICENSE +++ /dev/null @@ -1,176 +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 diff --git a/tests/README.md b/tests/README.md deleted file mode 100644 index 1942a76745..0000000000 --- a/tests/README.md +++ /dev/null @@ -1,451 +0,0 @@ -# Regression tests - -This directory contains both a generic, cross-platform regression test -framework and regression tests specific to the Docker for Mac and -Windows products. - -The generic regression test framework is implemented in Python with -the majority of the code contained in the `./lib` sub-directory. This -directory should *not* contain any Docker for Mac and Windows specific -code. - -The Docker for Mac and Windows specific code and test cases are -implemented in the `./cases` sub-directory. - - -# Prerequisites - -On a Mac, this should pretty much just work out of the box. However, -for development you might want to consider installing `flake8`, a -python style checker. -``` -brew install python -pip install flake8 -``` - -On Windows, you need to have python installed as well as some form of -`bash`. The tests must be run from a `bash` shell and `bash.exe` must -be in your path. The simplest way is to install via -[chocolatey](https://chocolatey.org/): - -``` -choco install git python -``` - -See Section on Machine setup below for more details. - - -# Quickstart - -The regression test framework allows running tests on a local host (or -inside a VM) as well as against a suitably configured remote host. - -To run tests locally, simply execute the `rt-local run` command. It -will executed all the test cases in the `./cases` sub-directory. - -To list all current tests run `rt-local list`, or to get a one line -summary for each test use `rt-local info`. - -When running tests, by default a line per test is printed on the -console with a pass/fail indication. Detailed logs, by default, are -stored in `./_results//`. In that directory, `TESTS.log` -contains detailed logs of all tests, `TESTS.csv` contains a line per -test and `SUMMARY.csv` contains a one line summary of the all tests -run. The directory also contains a log file for each tests, with the -same contents as `TESTS.log`. - -If you prefer a bit more information in the log files use: -``` -rt-local -x run -``` -This executes the tests with `-x` and thus logs all commands executed. - -For a CI system, where the output is displayed on a web page use: -``` -rt-local -x -vvv run -``` -This prints the same information logged to the log file to the console. - - -To run test on a remote host use the `rt-host`. You must specify the type of the remote host (`osx` or `win`) as well as the address. Optionally, you can supply user name and password. -``` -./rt-host -t win -r 172.16.10.131 -- -``` -This: -- copies the test framework and tests from the local host to the remote host. -- executes the test on remote host -- copies the results back to the local host - - -# User's guide - -Tests are located in the top-level project directory (default -`./cases`). Within a project tests may be grouped by placing them in a -common sub-directory (forming a _Test Group_). The order in which -tests and test groups are executed is determined by alphabetical order -and one may prefix a directory with a number to force a order. Each -test is given a unique name based on the place in the directory -hierarchy where it is located. For the naming of tests, any -prefix-numbers, used to control the order of execution, are -stripped. For example, a test located in: -``` -cases/backend/compose/010_django_example/ -``` -will be named: -``` -backend.compose.django_example -``` - -While traversing the directory tree, directories starting with `_` are -ignored. - - -## Run control - -Apart from the simple command line examples given in the Quickstart -section above, the regression test framework provides fine grained -control over which tests are run. The primary tool for this are -_labels_. - -A test may define that a specific label "foobar" must be present for -it to be run or, by prefixing the label name with a '!', that the test -should not be run if a label is defined. The labels are defined with -`test.sh` (see below). - -The regression test framework is completely agnostic to which labels -are used for a given set of test cases, though it defines a number of -labels based on the OS it is executing on. See the output of `rt-local -list` on your host. - -A good strategy for using labels is to not define any labels for tests -which should always be executed (e.g. on every CI run). Then use -labels to control execution for tests which are specific for a given -platform (e.g. `osx` or `win` for OS X and Windows installer tests). -If a particualr test is known not to run on a given platform you can -use, e.g. `!win`, to indicate it. Finally, define separate labels, -e.g., long running tests or extensive tests which should only be run -on release candidates. - -You can control labels for executing tests by using the `-l` flag. -For example, if you have some long running tests which you do not wish -to execute on every CI run and have them marked with a label `long`, -then you can execute them with: -``` -./rt-local -l long run -``` - -You can see which tests would get executed using the `-l` flag for the -`list` command as well: -``` -./rt-local -l long list -``` - -In addition to control which tests are run via labels it is also -possible to specify an individual test or a group name on the command -line to just run these test (subject to labels). Here are two -examples: -``` -./rt-local run pinata.backend.volumes.hardlink -./rt-local run pinata.backend.volumes -``` -The first runs a single test, while the second is running all tests -within the volumes group. Note, that this is currently implemented as -a simple prefix match, so, if you have tests such as `foo.bar` and -`foo.bar_baz` and use `./rt-local run foo.bar`, it will execute both -`foo.bar` and `foo.bar_baz`. - - -## Writing tests - -Tests are simple scripts which return `0` on success and a non-zero -code on failure. A special return code (`253` or `RT_TEST_CANCEL`) -can be use to indicate that the test was cancelled (for whatever -reason). Each test must be located in its own sub-directory (together -with any files it may require). - -Currently, test is a simple shell script called `test.sh`. In the -future we will also support Python and Powershell (for Windows only -tests). - -There is a template `test.sh` in `./etc/templates/test.sh` which can be -used for writing tests. It contains a number of special comments -(`SUMMARY`, `LABELS`, `REPEAT`, and, `AUTHOR`) which are used by the -regression test framework. The `SUMMARY` line should contain a *short* -summary of what the test does. The `LABEL` is a (optional) list of -labels to control when a test should be executed. `AUTHOR` should -contain name and email address of the test author. If a test is from -multiple authors, multiple `AUTHOR` lines can be used. Finally, the -`REPEAT` line may contain a single number to indicate that a test -should be executed multiple times. The `REPEAT` line may also contain -`