opendevshop / devshop Goto Github PK
View Code? Open in Web Editor NEWOpen Source DevOps Framework
Home Page: http://getdevshop.com/
License: GNU General Public License v2.0
Open Source DevOps Framework
Home Page: http://getdevshop.com/
License: GNU General Public License v2.0
hello,
Before starting a new branch for openbsd, I would like to know
What requirements do I need?
Currently I have OpenBSD 5.7
Web Server is NGINX
MySQL Server is MariaDB
php is: php-fpm
I have installed: Drush
some sites have installed in Drupal 7 and other in Drupal 8
Any advice before I start?
Thanks
We're moving to Aegir 3: Devmaster on Drupal 7. Hosting Drupal 8
It's in the 1.x branch of this repo and devmaster repo.
DevShop 1.x Pull Request: #44
DevMaster 1.x Pull Request: opendevshop/devmaster#8
I think we should not actually merge these pull requests, but keep the 0.x branch around for posterity.
The Pull Requests are good for running tests and discussing the minutiae of the development work.
If you find a problem, and can edit this issue, please add it to the list. If you can't, post it as a comment.
Please submit pull requests against the 1.x branch, (which is not the default.)
Thanks!
We now have an extremely easy way to run tests against your devshop server:
aegir@devshop:~$ devshop devmaster:test
Run this command as the aegir user to run our suite of Behat tests.
Be aware it will go through and attempt to create a project and environments on your server. If it fails, you might have to go back in and destroy the project yourself before the test will pass again.
Let's take this opportunity to write more tests against these bugs. I think it will help for the project leads to create some of the initial pull requests by writing a failing test. Then, a developer can be assigned and they can work until the test passes.
Do we have any more major issues? ๐
These two are not beta1 blockers. We can get these in before 1.0.0:
--commit
, --message
, --push
, --remote
, --branch
options already built in! Create new branches for 1.x
.
Rebuild makefiles to use drupal 7 and new module versions.
Removing obsolete drush packages.
Create new devmaster.info install profile and update hook_install. (Keeping devshop modules uninstalled for now.)
Debug it until it installs.
Upgrade all the devshop modules to drupal 7 with coder_upgrade.
Upgrade the boots theme to Drupal 7 (and then maybe convert it into a sub-theme of bootstrap.theme). UPDATE: Boots works with bootstrap theme. Some rough edges still exist due to the upgrade. I will list as many as I can below.
Refactor devshop_provision into devmaster drush files. Aegir 3 allows us to include all drush commands in devmaster.
Get tests going and write more tests to ensure everything works. UPDATE: We need more but first step for me is getting all the pieces working.
@jonpugh | Major hook node load refactoring
@arosboro | opendevshop/devmaster#7 | Getting devshop_github to work.
Missing project settings form on step 2 of "New Project Wizard". See http://devshop.site/projects/add/settings
Missing Project Settings link.
@jonpugh | Funky task issues.
@llwp | https://github.com/opendevshop/devmaster/pull/16 |Custom global tasks dropdown is missing.
Sync Data task arguments for "destination" is empty.
Drush aliases for sites are getting saved as "server" type, blocking environment creation.
"Last Task" property on environments is not saving.
Cannot deploy through web UI: "The requested page "/hosting_confirm/307/site_devshop-deploy?git_ref=development" could not be found."
Project Navigation block not loading project properly on task confirmation pages like hosting_confirm/307/site_sync
hosting_logs aegir logs path changed in 7.x: we should set variable provision_logs_file_path
to /var/aegir/logs
Run "Cache rebuild" for drupal 8 sites.
Project dashboard has a bad grid.
Platforms, Sites, and Clients should be removed from primary links.
Step 2: settings has two menu form elements.
Step 2: settings is not saving data.
Probably related - Clone Environment results in
"Run DB Updates" and "Clear caches" should be enabled by default.
Refresh branches when there were no branches in the repository links to 404 (http://devshop.docker:8000/node//project_verify?token=26E...)
"Environment name" textfields, like on Create Project: Step 3 and the "Create Environment" form are full width. Need to be made inline.
Collapsed fieldsets are displaying improperly. See http://devshop.site/projects/add/git_url
Sync tasks are not showing up in environment node page task lists.
Hosting task confirm form submit no longer redirect back to the dashboard.
Site node page does not display the last task! Makes it look like it never happened.
Backups are not initiated, tasks fail. https://www.drupal.org/node/2619074
The redirect for a project that is still being created doesn't work. Start creating a project then visit it's node page to see.
devshop version: 0.5.4
In github, I created branch with "path" in the name, e.g. features/new-theme
. Please refer to the screenshot below. Please also note that there is another branch named new-theme
which will be explained below.
In devshop, branch with "path" only shows the last component of the path, e.g. features/new-theme
is shown as new-theme, features/foo/bar
is shown as bar. When creating a new environment and selecting bar, master
branch is the one being deployed to the new environment.
The screenshot above was done after another branch: new-theme
was created. This is to circumvent the issue of devshop not detecting features/new-theme
.
This feature is a big plus for devshop but it's hidden away under an obscure label.
We should change the label in hosting_logs.module to something more like "Make error logs visible in devshop web interface."
If the project is configured to block environment-specific deploy hooks, then the "run tests" checkbox does not get disabled like the rest of the deploy hooks.
It also has no effect if you check it.
I was deploying tag to tag and I got this error:
Git pull failed in /var/aegir/projects/dkan/test. The specific errors are below: error: pathspec 'v4' did not match any file(s) known to git.
Gotta be something about the node types hooks...
Column not found: 'disabled' in 'where clause': SELECT nt.*
FROM
{node_type} nt
WHERE (disabled = :db_condition_placeholder_0)
ORDER BY nt.type ASC; Array
(
[:db_condition_placeholder_0] => 0
)
Hostin 7000 Clear cache for tasks view update.
g_task
Do you wish to run all pending updates? (y/n): y
WD php: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown[error]
column 'disabled' in 'where clause': SELECT nt.*
FROM
{node_type} nt
WHERE (disabled = :db_condition_placeholder_0)
ORDER BY nt.type ASC; Array
(
[:db_condition_placeholder_0] => 0
)
in _node_types_build() (line 739 of
/var/aegir/devmaster-1.x/modules/node/node.module).
Cannot modify header information - headers already sent by (output [warning]
started at
/usr/share/composer/vendor/drush/drush/includes/output.inc:38)
bootstrap.inc:1232
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'disabled' in 'where clause': SELECT nt.*
FROM
{node_type} nt
WHERE (disabled = :db_condition_placeholder_0)
ORDER BY nt.type ASC; Array
(
[:db_condition_placeholder_0] => 0
)
in _node_types_build() (line 739 of /var/aegir/devmaster-1.x/modules/node/node.module).
What is this file for? In the Vagrantfile there is on line 6:
PATH_TO_ATTRIBUTES = File.dirname(FILE) + "/attributes.json
but no file exists somewhere or even the documentation about it.
Hi team Devshop! We've been using devshop since June 2015 for testing features of pull requests for our team. The github pr integration is awesome! However, one issue we've had over time is that deleted environments staying on the dashboard page, and with more than 70 PR's over the course of the past year, the page became really cluttered.
Recently, we reinstalled with devshop 0.8.1 and started fresh. However, we're still having a couple of issues with environments. I'll describe both here, but please let me know if I should create a separate issue for each.
Here's an example of a deleted environment that is still on the page.
Looking at line 111 of nodes.inc, I see
// Don't load the environment if the site and/or platform is deleted.
if ($environment->site_status == HOSTING_SITE_DELETED && $environment->platform_status == HOSTING_PLATFORM_DELETED) {
continue;
}
I'm guessing that is the culprit. Digging a bit, I see the node status is 1 for that platform in the nodes table, and the status for that row in the hosting_platform table is also 1. That sits right above another row in the hosting_platform table which is -2. Which may be related to our 2nd issue.
Platforms fail to automatically delete successfully when a PR is merged or closed. I tried to reproduce this issue, but ran into another (possibly related) issue with the clone task. The message is something akin to "There are still active sites on this platform". I'm guessing that could be because our git repo master branch (and all subsequent pull requests) include a couple of site folders for our Acquia dev and test environments. The Acquia-specific settings.php files have been force added there, because it enables us to deploy any branch to dev or test on Acquia by just pushing a branch to our Acquia remote. Before devshop, we were testing pull requests on Acquia, but found it too limiting to have only 2 environments.
If I ssh into the devshop server and delete those site folders (dev.acqui-domain.com), I am able to retry the failed delete task and it succeeds. This is the exact scenario which led to the screenshot above. Is the intention that any settings.php file should trigger a failure of environment deletion, or should it just check the settings.php file related to the current domain (ie. branch-[prname].project.devshophost.com)?
The issue linked from the UI has been closed as a duplicate, and the original has been closed fixed.
Is the patch still necessary for this setting?
There are many ways to use devshop. We should thoroughly document them in the help files.
I've just rebuilt my laptop with Trusty host and am trying to vagrant up devshop
it fails
==> default: TASK: [Clear the drush cache.] ************************************************
==> default: changed: [devshop.local]
==> default:
==> default: TASK: [debug msg="$ {{ drush_path }} devshop-install {{ server_hostname }} --version={{ devmaster_version }} --aegir_db_pass={{ mysql_root_password }} --aegir_db_user=root --makefile={{ devshop_makefile }} --profile=devmaster --aegir_host={{ server_hostname }} {{ devshop_working_copy }} -y"] ***
==> default: ok: [devshop.local] => {
==> default: "msg": "$ /usr/local/bin/drush devshop-install devshop.local --version=0.x --aegir_db_pass=zfEYWqgLRqbxpoqeWNvy-TMm5pC2sfF8 --aegir_db_user=root --makefile=build-devmaster.make --profile=devmaster --aegir_host=devshop.local --working-copy -y"
==> default: }
==> default:
==> default: TASK: [Install Devmaster] *****************************************************
==> default: failed: [devshop.local] => {"changed": true, "cmd": ["/usr/local/bin/drush", "devshop-install", "devshop.local", "--version=0.x", "--aegir_db_pass=zfEYWqgLRqbxpoqeWNvy-TMm5pC2sfF8", "--aegir_db_user=root", "--makefile=build-devmaster.make", "--profile=devmaster", "--aegir_host=devshop.local", "--working-copy", "-y"], "delta": "0:00:00.415160", "end": "2015-07-06 22:05:48.875680", "rc": 1, "start": "2015-07-06 22:05:48.460520", "warnings": []}
==> default: stderr: The drush command 'devshop-install devshop.local' could not be found. [error]
==> default: Run drush cache-clear drush
to clear the commandfile cache if you
==> default: have installed new extensions.
==> default: A Drupal installation directory could not be found [error]
==> default:
==> default: FATAL: all hosts have already failed -- aborting
==> default:
==> default: PLAY RECAP ********************************************************************
==> default: to retry, use: --limit @/root/playbook.retry
==> default:
==> default: devshop.local : ok=36 changed=27 unreachable=0 failed=1
==> default: Loading composer repositories with package information
==> default: Installing dependencies (including require-dev) from lock file
==> default: Nothing to install or update
==> default: Generating autoload files
==> default: โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
==> default: โ It appears something failed during installation. โ
==> default: โ There is no '/var/aegir/.drush/hostmaster.alias.drushrc.php' file. โ
We're on a fresh install of 0.8.1. After creating a PR on github (which worked a couple of days ago), the process is no longer working. The error is There are no valid install profiles on the target platform to migrate to
, which comes just after Undefined property: stdClass::$hosting_name hosting.module:919
.
In gitter, you mentioned that "Each site gets a unique "hosting_name"... That message can happen if two site nodes get created with the same node title (which is their full domain)
So I bet that somehow, a duplicate site node was created".
If you mean the node table, then I actually see a number of duplicates:
Please advise how to continue troubleshooting. Thanks!
After install, none of my tasks were being processed.
I restarted supervisor, but to no avail because /etc/supervisor/conf.d/ was empty
Installed from install.sh, latest
OS: ubuntu
Version: 14.04
Checking for DevShop CLI... DevShop CLI is installed. 0.x dafb71d
Checking for Drush... Drush is installed. Drush Version : 6.7.0
Checking for Provision... Provision is installed.
Checking for DevMaster... Devmaster is installed. 0.x
Did a fresh install of 0.5.4 on Ubuntu 12.04. Went to add a new project, and got an error. Looked at the logs and saw this:
Shell Output: error: Malformed value for push.default: simple error: Must be one of nothing, matching, tracking or current. fatal: bad config file line 6 in /var/aegir/.gitconfig Cloning into '/var/aegir/projects/live/test'...
After examining the issue, changing the push.default to upstream was the best option.
Made the change, and the repository cloned properly.
I launched 'devshop upgrade' on my devshop environment, and everything seems to be executed fine, except that, on the Status Report of devshop, it's still reported the 0.5.1 version, as you can look on this screen.
Looking at the /var/aegir dir I can see only devmaster-0.6.0 as devmaster dir.
Following the aegir vhost of devshop domain:
<VirtualHost *:80>
DocumentRoot /var/aegir/devmaster-0.6.0
ServerName soulwebdev.com
SetEnv db_type mysqli
SetEnv db_name xxxx
SetEnv db_user xxxx
SetEnv db_passwd xxxx
SetEnv db_host localhost
SetEnv db_port 3306
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/files/(.*)$ /sites/soulwebdev.com/files/$1 [L]
RewriteCond /var/aegir/devmaster-0.6.0/sites/soulwebdev.com/files/robots.txt -f
RewriteRule ^/robots.txt /sites/soulwebdev.com/files/robots.txt [L]
</IfModule>
# Extra configuration from modules:
# PROVISION_LOGS
# ==============
# Site-specific logs have not been enabled.
# Error handler for Drupal > 4.6.7
<Directory ~ "sites/.*/files">
<Files *>
SetHandler This_is_a_Drupal_security_line_do_not_remove
</Files>
Options None
Options +FollowSymLinks
# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
php_flag engine off
</IfModule>
</Directory>
# Prevent direct reading of files in the private dir.
# This is for Drupal7 compatibility, which would normally drop
# a .htaccess in those directories, but we explicitly ignore those
<Directory "/var/aegir/devmaster-0.6.0/sites/soulwebdev.com/private/" >
<Files *>
SetHandler This_is_a_Drupal_security_line_do_not_remove
</Files>
Deny from all
Options None
Options +FollowSymLinks
# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
php_flag engine off
</IfModule>
</Directory>
</VirtualHost>
So which version I'm running?
Steps to reproduce:
Probably related:
Manual backups do not run. Existing backups download as 0.0k files.
(this was working previously)
I'm working on moving from managed-by-hand sites workflow to devshop-based workflow.
What's the best way for me to get my existing dev sites into devshop?
The most common point of failure for cloning an environment is when files move.
The deploy hooks don't run early enough to catch aegir failing the clone and then rolling it back.
Let's hook into the site clone process and call a drush registry-rebuild
every time, just to be safe.
If I create a new project and specify a domain different from the Devshop server (like for a remote server), the domain I specify is not adopted by the first environment. It is adopted by any other environments I create.
Steps to reproduce, assuming the Devshop domain is production.example.com:
Any plans to provide a docker version of devshop?
When editing the platform node, and select a different http server, the platform is verified but the site is not, so the code does not rsync!
We should trigger a site verify when the a platform is edited.
We should make sure users know that any repo will work.
Stock devshop has devshop_github enabled and it appears like devshop requires github.
We need to change that.
I am going to use HubBoard for overall project planning now.
Hello,
I followed the install process at this https://github.com/opendevshop/devshop/blob/0.x/README.vagrant.md
After running : vagrant up i get the errors below.
I was able to ssh into the box.
L-C0000893:devshop ixb$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)
aegir@devshop:~$ drush @hostmaster uli
The drush command '@hostmaster uli' could not be found. Run drush cache-clear drush
to clear the commandfile cache if you have installed new [error]
extensions.
A Drupal installation directory could not be found [error]
aegir@devshop:~$ drush site-alias
none
platform_hostmaster
server_localhost
server_master
When i browse to http://devshop.local/ i get
"It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet."
What should be the expected behavior?
Errors from vagrant up
==> default: require_once(./profiles/devmaster/devmaster.profile): failed to open [warning]
==> default: stream: No such file or directory install_6.inc:183
==> default: Drush command terminated abnormally due to an unrecoverable error. [error]
==> default: Error: require_once(): Failed opening required
==> default: './profiles/devmaster/devmaster.profile'
==> default: (include_path='.:/usr/share/php:/usr/share/pear') in
==> default: /var/aegir/.drush/commands/provision/platform/drupal/install_6.inc,
==> default: line 183
==> default: The external command could not be executed due to an application [error]
==> default: error.
==> default: Drush was not able to start (bootstrap) the Drupal database. [error]
....
==> default: The drush command '@hostmaster provision-verify' could not be found. [error]
==> default: Run drush cache-clear drush
to clear the commandfile cache if you
==> default: have installed new extensions.
==> default: A Drupal installation directory could not be found [error]
==> default: stdout: Aegir 6.x-1.x automated install script
.....
==> default: Do you really want to proceed with the install (y/n): y
==> default: PHP Fatal error: require_once(): Failed opening required './profiles/devmaster/devmaster.profile' (include_path='.:/usr/share/php:/usr/share/pear') in /var/aegir/.drush/commands/provision/platform/drupal/install_6.inc on line 183
==> default:
==> default: Fatal error: require_once(): Failed opening required './profiles/devmaster/devmaster.profile' (include_path='.:/usr/share/php:/usr/share/pear') in /var/aegir/.drush/commands/provision/platform/drupal/install_6.inc on line 183
==> default:
==> default: FATAL: all hosts have already failed -- aborting
==> default:
==> default: PLAY RECAP ********************************************************************
==> default: to retry, use: --limit @/root/playbook.retry
==> default:
==> default: devshop.local : ok=38 changed=30 unreachable=0 failed=1
==> default: โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
==> default: โ It appears something failed during installation. โ
==> default: โ There is no '/var/aegir/.drush/hostmaster.alias.drushrc.php' file. โ
==> default: โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
I'm supporting a large server with a lot of users and a lot of environments. I'm seeing at least 10 php processes running.
I'm thinking that people like to leave tabs open. Every one of them is pinging the server every second.
We need to improve performance of the environment status system. It does not scale well.
We could cache the list of projects and environments until a status is updated.
Tried a 0.5.4 installation with Ubuntu 12.04 and 14.04.
Follow the directions here https://devshop.readthedocs.org/en/latest/ssl/
Chrome throws an SSL Protocol Error.
Checked the firewalls a million times, both on the VM itself, and through my cloud service provider (google compute engine.)
Checked the logs, configuration, certs, etc. I can't seem to find any more leads. Note: I didn't even try commercial SSL yet, just trying to make things work with a self signed cert.
Thank you soon much!
We get a lot of orphan environments, if a branch is deleted.
We should delete environments that are tracking a branch if a branch is deleted only if the project is configured to do so.
gday Jon
this is a tremendous project and its reach some serious maturity
so, how about doing it ALL OVER AGAIN and porting to Aegir 3 ? Drupal 7?
great if you could do that by next week
cheers
-N
I am able to create the first environment...
Maybe it's the project settings form submit.
It's true, the branch does not appear, but it will shortly.
We need to fix environment.tpl.php to handle this situation.
This issue is just for taking notes on issues related to redhat enterprise linux install.
ansible
or does not detect the OS release as "redhat". Needs research.==> devmaster: ERROR: The file inventory is marked as executable, but failed to execute corr ectly. If this is not supposed to be an executable script, correct this with chmod -x inven tory
.
==> devmaster: Ansible syntax check failed! Check installers/ansible/playbook.yml and try a gain.
On Win7 running Cygwin and/or Git Bash
Reported by @davidkinzer
Been noticing that when every I do a PR I immediately get a devshop failure with this error: "devshop/merge โ Branch is out of date! Merge from default branch. " But then on devshop the QA site seems to be OK.
I was debating if this was appropriate or not, but I think I've decided we should not build the environment if we can't post status updates about it.
In order to improve developer adoption, we need to make it easy to improve it.
Let's improve the travis setup so that pull requests to either opendevshop/devshop or opendevshop/devmaster are tested using the pull request code.
If the project is set to Clone live for PRs, and the "live environment" setting is not set, then nothing will happen.
we should notify github of the failure so users know what to do.
The dream is to make getting a project ready for testing as easy as possible:
.hooks
or .hooks.yml
file was found. If not, offer to create one.As a devshop user
I want devshop to create more servers for me
so I don't have to.
DevShop Cloud is a collection of tools for Aegir that will allow fully automatic provisioning of cloud servers from any provider, starting with Softlayer, digitalocean, and amazon web services.
The work has been ongoing for some time in the devshop_cloud
module in the devshop_cloud
branch: https://github.com/opendevshop/devmaster/tree/devshop-cloud/modules/devshop/devshop_cloud
Sadly because of the separation of provision/hosting in aegir 2 and earlier, there is a separate repo you need, with the unfortunately confusing name of "devshop_cloud": https://github.com/opendevshop/devshop_cloud
My original prototye used softlayer. @arosboro created a plugin for digital ocean. Basically, anyone with a PHP library will be really easy to add to devshop cloud.
devshop_cloud
branch of https://github.com/opendevshop/devmasterWe have had a lot of problems with PR clone environments.
The problem is we create the new platform with the code on the new branch. This could be bad code.
Then we clone from the primary environment to this new platform. It could fail because of that bad code.
Not only that, but the "clone" task doesn't run the "Deploy" hooks that users are expecting.
I've been thinking this for a while and just never got around to it:
When a PR request comes in, and the setting is to "clone live environment", we should create a platform that is on the same git ref as live first, do the clone, THEN trigger a deployment to the new branch or git ref.
This will simulate a real deployment, as clones to the same codebase always succeed in Aegir, unless you run out of space or something drastic like that.
In the process of re-installing devshop a half-dozen times last week, I noticed that there are many different places to find installation instructions, and many are different, such as:
Furthermore, none of the suggestions actually worked for me on a fresh AWS instance running Ubuntu 14.04. If I take the getdevshop.com instructions at face value, bash install
returns with /usr/bin/install: /usr/bin/install: cannot execute binary file
. So maybe then I try sh install.sh
, which ends up exiting with install.sh: 282: install.sh: Bad substitution
. Hm. Maybe I should follow what's at the top of the install script, and try sudo ./install.sh
. That returns sudo: ./install.sh: command not found
. However, if I make the file executable with chmod +x install.sh
, the installer runs!
Then wait, what is all this Hostname: ip-172-31-36-172.ec2.internal
? Ah. The "readthedocs" version mentioned that I "must change the hostname manually" if I'm hosting on Amazon Web Services. Ugh! So I start over. I then notice that document says I should be running these as root.
As you can imagine, at this point I'm either really frustrated, or enjoying the challenge. I love what the devshop team is doing, but I highly recommend simplifying the documentation for new users, while also making host-specific documentation readily accessible. On the devshop Drupal.org project page, for example, I see that documentation is on readthedocs, development is on github and issues are on D.O. Then I notice this chat icon, which leads me to gitter, and I find out that issues are now in github.
I hope this doesn't sound like complaining; again, I love what you're doing (and would love to get involved). I'm just offering some insights from an outsider looking in and getting easily confused.
Other gotchas for AWS on Ubuntu include the fact that the user you log into with by default is ubuntu. After getting devshop installed, I ran into additional issues with drush because Amazon's documentation has me ssh in as ubuntu, which isn't in the aegir or www-data groups. Drush commands therefore fail, both on the server and if I have aliases set up from my local box. So I can add ubuntu to those groups, or I can add my ec2 pem file (key) to the aegir "authorized_keys" file and then ssh as aegir (both of these methods worked, by the way), but it still feels like a puzzle.
Currently managing devshop on a holistic level is hard. Let's create a "DevShop CLI" for managing things like installation, upgrades, and remote install.
UPDATE: The DevShop CLI makes upgrading a devshop server really, really easy. Let's keep developing this tool to make everything else easy.
server:create
command.devshop install
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.