schultyy / avm Goto Github PK
View Code? Open in Web Editor NEWInstalls Ruby and node.js on your machine
Installs Ruby and node.js on your machine
engine
in package.json
can be denoted in semver notation. avm needs to be able to handle that case.
For that, Steve Klabnik's semver crate comes in handy.
For all node versions >= 4.0.0 it needs to be checked if the denoted version in package.json applies to one of the installed versions on the current system.
All node versions before that need to be treated differently. This needs to be defined.
When downloading the package, show a percentage as information for the user.
When I use
a non installed version, the process needs to exit with 1
.
When I install a node commandline tool via npm install -g <tool>
it is not callable afterwards.
As a user I want to build Ruby on a Mac with MacOS > 10.10. In order to get a working Ruby installation, certain environment variables have to be in place before the build starts.
avm should check if these variables are there and if not it should require the user to set them.
The README needs to explain the following things (better):
[0] % gem install bundler
ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
This can be fixed by passing --with-openssl-dir=/usr/bin
to the Configure script.
But instead of hardcoding the path to openssl the user should be able to override this by setting the OPENSSL_INCLUDE_DIR
environment variable.
Right now it seems that Ruby has no readline support compiled in.
See https://github.com/rbenv/ruby-build/wiki for more details
Right now, avm use
only sets the node
symlink. To ensure that everything is working fine, the npm
symlink needs to be set as well
This outputs too much useless information:
vagrant@localhost:/vagrant$ cargo run install 4.1.2
Running `target/debug/avm install 4.1.2`
Prepared avm directory at /home/vagrant/.avm
Wrote archive to /home/vagrant/.avm/v4.1.2.tar.gz
Unzipping to /home/vagrant/.avm
Successfully unpacked archive
Exit status: exit code: 0
To ease the installation of avm for new users, there should be precompiled binaries available together with a setup script which puts them into the right place.
If the user already has a version of avm installed, the install script shouldn't just overwrite the old version but instead notify the user and ask them if it's ok to overwrite or not.
#....
You already have have avm v0.1.0 installed and you're about to install avm v0.2.0.
Proceed? [y/n]
It should also be possible to pass -y
to automatically install the new version
cargo 0.6.0 (shipped with Rust 1.5) comes with a convenient installer, allowing cargo install $name
for published binaries.
Add a note to README why there's no avm install latest
and why the user needs to know the exact version number
This issue was automatically generated. Feel free to close without ceremony if
you do not agree with re-licensing or if it is not possible for other reasons.
Respond to @cmr with any questions or concerns, or pop over to
#rust-offtopic
on IRC to discuss.
You're receiving this because someone (perhaps the project maintainer)
published a crates.io package with the license as "MIT" xor "Apache-2.0" and
the repository field pointing here.
TL;DR the Rust ecosystem is largely Apache-2.0. Being available under that
license is good for interoperation. The MIT license as an add-on can be nice
for GPLv2 projects to use your code.
The MIT license requires reproducing countless copies of the same copyright
header with different names in the copyright field, for every MIT library in
use. The Apache license does not have this drawback. However, this is not the
primary motivation for me creating these issues. The Apache license also has
protections from patent trolls and an explicit contribution licensing clause.
However, the Apache license is incompatible with GPLv2. This is why Rust is
dual-licensed as MIT/Apache (the "primary" license being Apache, MIT only for
GPLv2 compat), and doing so would be wise for this project. This also makes
this crate suitable for inclusion and unrestricted sharing in the Rust
standard distribution and other projects using dual MIT/Apache, such as my
personal ulterior motive, the Robigalia project.
Some ask, "Does this really apply to binary redistributions? Does MIT really
require reproducing the whole thing?" I'm not a lawyer, and I can't give legal
advice, but some Google Android apps include open source attributions using
this interpretation. Others also agree with
it.
But, again, the copyright notice redistribution is not the primary motivation
for the dual-licensing. It's stronger protections to licensees and better
interoperation with the wider Rust ecosystem.
To do this, get explicit approval from each contributor of copyrightable work
(as not all contributions qualify for copyright, due to not being a "creative
work", e.g. a typo fix) and then add the following to your README:
## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.
and in your license headers, if you have them, use the following boilerplate
(based on that used in Rust):
// Copyright 2016 avm Developers
//
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
// http://opensource.org/licenses/MIT>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.
It's commonly asked whether license headers are required. I'm not comfortable
making an official recommendation either way, but the Apache license
recommends it in their appendix on how to use the license.
Be sure to add the relevant LICENSE-{MIT,APACHE}
files. You can copy these
from the Rust repo for a plain-text
version.
And don't forget to update the license
metadata in your Cargo.toml
to:
license = "MIT OR Apache-2.0"
I'll be going through projects which agree to be relicensed and have approval
by the necessary contributors and doing this changes, so feel free to leave
the heavy lifting to me!
To agree to relicensing, comment with :
I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.
Or, if you're a contributor, you can check the box in this repo next to your
name. My scripts will pick this exact phrase up and check your checkbox, but
I'll come through and manually review this issue later as well.
Improve the UI by using different colors for console output. Related to #12
Provide documentation on how to uninstall avm
The install script uses sudo at one point. Print a note for the user that they need to type in their password at some point
Right now, avm cannot run on Windows because it relies on the tar
command for unzipping downloaded archives.
This needs to be replaced with a mechanism which works on all platforms without problems.
Right now, the system node functionality is not tested automatically.
Here we need some tests to ensure that everything is working properly.
Install to /usr/local/bin
instead of ~/.avm/
avm autoselect node
should also support the devEngines
parameter
When avm is capable of installing multiple programming language environments, the CLI needs to be aware of the language the user wants to work with.
Right now when running $ avm ls
it assumes node.js. With support for multiple languages it should look like:
$ avm ls ruby
=> 2.2.2
- 1.9.3
- 1.8.7
$ avm ls node
=> 5.0.0
- 4.1.2
- 0.10.36
This needs to be the case for all commands
ls
use
install
uninstall
In future, it should also be possible to install Ruby versions as well.
It needs to be defined how the CLI should look like, how the abstractions in the code must be organized and to which location Rubies are installed
When I run avm install 4.1.2
when version 4.1.2
is already installed, the following error occurs:
Prepared avm directory at /home/vagrant/.avm
Unzipping to /home/vagrant/.avm
Failed to create directory for version
File exists (os error 17)
An unknown error occurred
To learn more, run the command again with --verbose.
That error is completely meaningless to the user. Before the actual installation starts, there should be a check if a folder with the to be installed version already exists and if yes, the user needs to be notified that that version is already installed.
$ ls ~/.avm
bin
Then avm ls
:
- bin
This directory shouldn't be displayed
Right now, the installer fetches the latest version from master. But instead it should get the latest tag instead.
As a user I have multiple projects running on different node.js versions. I want avm to be able to pick the right version for me automatically.
Automatically is meant in the sense that it does that after running a command, not automatically as in "When I cd into a directory, pick the right version".
$ avm autoselect
> Reading package.json
> package.json mandates to use node.js 5.0.0
> Picking 5.0.0
When the used version is not installed, it should print the following warning:
$ avm autoselect
> Reading package.json
> package.json mandates to use node.js 5.0.0
> 5.0.0 is not installed right now
> Run avm install 5.0.0 to install it and then try again
When I run npm install -g npm
the newly installed version isn't used afterwards.
Given the case a user has a system node installed but not npm. When running
$ avm use system
The user gets It appears that there's no node.js preinstalled on this system
as error message. This is caused by non existent npm. Here the user needs to get a better error message or avm links to node only.
When I run cargo run ls
on a system without any installed node version this happens:
vagrant@localhost:/vagrant$ cargo run ls
Running `target/debug/avm ls`
thread '<main>' panicked at 'called `Result::unwrap()` on an `Err` value: Error { repr: Os { code: 2, message: "No such file or directory" } }', ../src/libcore/result.rs:732
An unknown error occurred
To learn more, run the command again with --verbose.
Given I have the following versions installed:
$ avm ls
- 4.2.0
- 4.2.1
- 5.0.0
I want to be able to avm use
5.0.0 by just typing:
$ avm use 5.0
When there are multiple options:
$ avm use 4.2
Multiple versions apply:
- 4.2.0
- 4.2.1
When avm is asked for its current version, it should print it out:
$ avm -v
0.1.0
autoselect node should support this pattern:
"devEngines": {
"node": "4.x || 5.x",
"npm": "2.x || 3.x"
}
A user can say "either use node 4.x or 5.x". Same for npm.
Add install note:
sudo apt-get install libssl-dev
To avoid openssl compilation error
Right now, avm installs precompiled node.js versions. It should also be possible to install from source when there's no binary available or the user explicitly states that they want to install from source
When manipulating PATH variable, make sure to append the new path instead of prepending
Given the case a user doesn't have ssh access to their GitHub account configured, installation fails at the moment.
Therefor the installer should fetch via https instead.
When avm runs on a system with node.js preinstalled, that should be also listed when running avm ls
and should be selectable via avm use
.
When I install this package https://github.com/sunmille/eslint-to-editorconfig
It can't be called from the commandline:
vagrant@localhost:~$ npm install --global eslint-to-editorconfig
/home/vagrant/.avm/bin/eslint-to-editorconfig -> /home/vagrant/.avm/lib/node_modules/eslint-to-editorconfig/bin.js
[email protected] /home/vagrant/.avm/lib/node_modules/eslint-to-editorconfig
├── [email protected]
└── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
vagrant@localhost:~$ eslint-to-editorconfig
eslint-to-editorconfig: command not found
vagrant@localhost:~$
Right now there's a symlink to the current node version's bin directory. This directory is accessible via PATH
. It seems that this is not sufficient. nvm has the full path to the current node version's bin directory in the PATH
variable.
Right now a user cannot use system node.
[0] % avm use node system
Error { repr: Os { code: 22, message: "Invalid argument" } }
When I type
$ avm
I get
> unsupported language
Instead it should print the help text.
Provide a basic man page for avm
In order to support multiple programming languages, the directory structure in ~/.avm
needs to be adapted.
Right now, every error message gets printed to stdout. Instead they need to be printed to stderr
As a user I would like to be able to pass --reinstall
to the avm install command.
Use this Makefile
as a template for installing on the local system
As a user I want to be able to uninstall a specific node.js version:
$ avm uninstall 4.1.2
> Uninstalling node.js 4.1.2
When the node
symlink is set to that version, it needs to be removed as well.
Some projects bring .ruby-version
files. avm should be able to pick the version based on that file when running avm ruby autoselect
.
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.