74 Commits

Author SHA1 Message Date
Juan Cruz Viotti
5b3926cf10 v1.0.0-beta.18 2017-01-16 11:02:11 -04:00
Juan Cruz Viotti
2c64f0da23 chore: add support for snapshot builds (#968)
This commit introduces a `RELEASE_TYPE` option to the Makefile, which
can be either `production` or `snapshot`. If its `production`, the
behaviour its same as it was before.

If `RELEASE_TYPE` is `snapshot`, the shorter version of the current
commit hash is appended to the version (replacing the
`APPLICATION_VERSION` in the Makefile, as well as the `package.json`
version inside the `.asar`), and the publish scripts get configured to
deploy to different "snapshot" locations.

This commit also reduces the size of the version tag in the bottom right
corner a bit so that it fits when the commit hash is appended to it.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2017-01-10 21:37:54 -04:00
Juan Cruz Viotti
7fa2f437c1 feat(CLI): replace --robot with an ETCHER_CLI_ROBOT env var (#1010)
The `--robot` option of the CLI causes the program to output
machine-parseable strings, which can be easily consumed by the GUI to
update progress and other information.

The problem is that if the CLI fails to parse its command line arguments
when being called from the GUI for whatever reason, the `.fail()` Yargs
handler will be called, which doesn't output error information in the
usual "robot" format, causing the GUI to not understand the error
message.

Since the `.fail()` Yargs handler doesn't have access to the passed
options, we moved the "robot" functionality to an environment variable,
which we can easily check from there.

As a bonus, this PR refactors the whole robot logic into
`lib/shared/robot.js` and adds unit tests to it.

See: https://github.com/resin-io/etcher/issues/986
Change-Type: major
Changelog-Entry: Replace the `--robot` CLI option with an `ETCHER_CLI_ROBOT` environment variable.
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2017-01-10 19:46:59 -04:00
Ștefan Daniel Mihăilă
050d187e6f refactor: extract SelectionStateModel stateless functions (#982)
`SelectionStateModel`'s methods `isSystemDrive` and `isDriveLocked`
don't depend on application state. They have been extracted in a different
AngularJS service: `DriveConstraintsModel`. The new service's actual
implementation is in `lib/src`, in order to be reused by the CLI.

Miscellaneous changes:

- Rename `lib/src` to `lib/shared`
- Refactor `drive-constraints` to throw when image is undefined

The default behaviour was to pretend that we're all good if the if
the image is not specified. We're not using this "feature", and
it can be dangerous if we forget to pass in the image.

- Make `isSystemDrive` return `false` if `system` property is undefined
- Use `drive-constraints` in `store.js`

Change-Type: patch
2017-01-06 12:42:11 -04:00
Juan Cruz Viotti
5fb7b30584 Set theme jekyll-theme-minimal 2016-12-21 17:53:10 -04:00
Andrew Scheller
e8544cf315 doc: Move the asar requirement from "Windows" to "Common" (#977)
Asar is needed by all the `electron-installer-*` targets
2016-12-15 12:31:49 -04:00
Juan Cruz Viotti
99538e3120 doc: recommend make electron-develop to clean dependency tree (#974)
Because of NPM shrinkwrap, we recommend having a clean dependency tree
in `CONTRIBUTING.md` before upgrading a dependency. We currently
recommend maually wiping out `node_modules`, but since the
`electron-develop` make target already does that, is more user friendly
to recommend that instead.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-12-13 14:03:09 -04:00
Juan Cruz Viotti
cc96a0c1fe chore: persist temporary artifacts during AppImage builds (#936)
Currently, `electron-installer-appimage.sh` deletes temporary stuff it
needs as it goes (like the AppDir, AppImageAssistant, or even the
AppImage after creating a ZIP). Since this is not very Make-friendly,
the script has been split into the following smaller scripts that
perform a single task:

- `electron-create-appimage-linux.sh`
- `electron-create-appdir.sh`

Utilising them in different Makefile rules effectively results in Make
persisting the "temporary artifacts".

See: https://github.com/resin-io/etcher/pull/913#discussion_r90801230
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-12-13 10:53:10 -04:00
Andrew Scheller
d9148d585e chore: add publishing Makefile targets (#955)
If there are any files publishable to S3 then a `publish-aws-s3` target will
automagically exist, and similarly if there are any files publishable to
Bintray then a `publish-bintray-debian` target will automagically exist.
Like all phony targets, these get displayed by `make help` when available.
2016-12-08 13:47:42 -04:00
Juan Cruz Viotti
88d0497982 docs: remind to add S3 links to GitHub Releases entries (#956)
We are now going to be adding links to files published in AWS S3 in
GitHub Releases, so that people used to finding pre-built versions of
the software in GitHub Releases will be re-directed to the right place,
while we still keep the analytics advantages that S3 provides us.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-12-08 11:57:55 -04:00
Andrew Scheller
4090fe93ad chore: speed up make startup time by using jq (#958)
By changing the `Makefile` to use `jq` instead of `node` for getting settings
from `package.json`, the time to do `make help` drops from over 1.5 seconds to
under 0.05 seconds!
2016-12-08 11:57:22 -04:00
Juan Cruz Viotti
b80bab4562 chore: upgrade Etcher build system to use Visual Studio 2015 (#947)
This version was not working the last time we checked, but it looks like
there were some advancements in node-gyp in the previous months, and all
dependencies have upgraded to it already.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-12-07 10:35:54 -04:00
Juan Cruz Viotti
ffe0d33026 chore: require MinGW to build Etcher on Windows (#948)
Using MinGW allows us to re-use the build scripts we've been developing
for GNU/Linux and OS X, which are much more robust than their `*.bat`
counterparts (due to Batch limitations).

This commit does the following changes:

- Documents MinGW as a requirement in `RUNNING-LOCALLY.md`
- It setups MinGW in Appveyor CI
- Transforms `windows/sign.bat` into `windows/electron-sign-exe.sh`
- Re-uses `dependencies-npm.sh` and `dependencies-bower.sh` in
  `build/windows.bat`

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-12-07 09:51:05 -04:00
Juan Cruz Viotti
68a71d89e2 chore: add Makefile to build OS X and GNU/Linux (#922)
This Makefile ties together all the build scripts we've been developing
so far. It currently only supports UNIX based operating systems, but
Windows support will be added soon.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-12-01 15:16:47 -04:00
Andrew Scheller
fa958537c1 docs: Update 'announcing' section of Publishing instructions (#921) 2016-12-01 11:40:54 -04:00
Juan Cruz Viotti
0ed4f5d3c8 chore: adopt new build command convention for OS X (#903)
The `darwin.sh` script now accepts the following commands:

- `develop-electron`
- `installer-dmg`
- `installer-zip`

In order to accomplish this, `./scripts/darwin/package.sh` is no longer
relying on `electron-packager`.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-11-28 09:56:14 -04:00
Juan Cruz Viotti
19b3bc56c2 chore: adopt new build script command convention in GNU/Linux (#899)
The GNU/Linux build script (as the rest of the OSes will in the near
future), now accepts the following command:

- `develop-electron`
- `develop-cli`
- `installer-cli`
- `installer-appimage`
- `installer-debian`

Each of the commands is now completely independent from the others.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-11-27 22:29:23 -04:00
Juan Cruz Viotti
5d25ef7dee docs(GUI): publishing a new version to homebrew cask (#837)
Publishing to Homebrew Cask involves changing a Cask file in the
official Cask registry pull request updating the `version` and `sha256`
properties.

See: https://github.com/caskroom/homebrew-cask/pull/26319
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-11-09 17:04:22 +02:00
Juan Cruz Viotti
71a73ab6c8 docs: list of major technologies used by Etcher (#826)
This commit notes down the most important technologies used by Etcher,
so that contributors know what they should focus their learning in.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-11-03 16:00:18 -04:00
Juan Cruz Viotti
5ac486d941 style: refer to Resin.io as resin.io, according to the style manual (#823)
> For all, lower-case capitalization unless beginning a sentence (Ex. I
> like resin.io. Resin.io is great.)

See: https://github.com/resin-io/docs#style-manual
See: https://github.com/resin-io/etcher/issues/797
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-11-03 10:57:29 -04:00
Juan Cruz Viotti
8b47c3f017 chore: add bintray debian publishing script (#819)
This script can be used to publish Etcher debian packages to Bintray.

See: https://github.com/resin-io/etcher/issues/632
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-11-02 18:24:28 -04:00
Andrew Scheller
2d60d1d93b docs: add an 'Announcing' section to PUBLISHING.md (#814) 2016-11-01 21:13:57 -04:00
Juan Cruz Viotti
532e732b46 docs: add Win 10 IoT to the list of images requiring special treatment (#804)
Such image seems to require the "Windows 10 IoT Core Dashboard" tools.

See: https://github.com/resin-io/etcher/pull/783#issuecomment-257255185
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-31 23:49:31 -04:00
Juan Cruz Viotti
9e63639a53 docs(CLI): describe proper way to install dependencies (#802)
The `docs/CLI.md` points to user to `docs/CONTRIBUTING.md` for
instructions in how to install dependencies. This document previously
included the explicit `npm` commands to run, but was then changed to
point to the platform scripts, which means that if the user follows the
current instructions but has a NodeJS version which is not ABI
compatible with the NodeJS version used by the currently used Electron
version, the user will get an incompatibility error.

Fixes: https://github.com/resin-io/etcher/issues/801
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-31 19:45:21 -04:00
Juan Cruz Viotti
be1b1a1a3a docs: suggest UNetbootin if user requires setting persistence storage (#805)
See: https://github.com/resin-io/etcher/issues/413
See: https://github.com/resin-io/etcher/pull/783#issuecomment-256959050
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-31 17:37:24 -04:00
Juan Cruz Viotti
9df24ae577 docs(GUI): remove <version> from AppImage name (#803)
The ZIP including the AppImage contains the version, but not the
AppImage itself.

See: https://github.com/resin-io/etcher/pull/786#issuecomment-257275494
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-31 17:35:29 -04:00
Andrew Scheller
8c6f441982 style: fix typos and URLs in CLI.md (#800) 2016-10-31 13:53:06 -04:00
Juan Cruz Viotti
f8349d460e docs(GUI): explain why some drives are not bootable out of the box (#783)
The usual case is images requiring special treatment. We recommend the
users to use specialised tooling for those cases.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-31 01:49:35 -04:00
Juan Cruz Viotti
a6624cc344 docs(GUI): generic appimage name in desktopintegration SKIP instructions (#786)
We're now including the version as part of the filename, which means
`Etcher-linux-x64` is no longer 100% accurate. As a solution, we include
a filename with "placeholders" for the version and architecture, to
avoid harcoding a specific version.

See: 18e9d1eb11 (commitcomment-19619181)
See: https://github.com/resin-io/etcher/pull/764
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-31 00:30:57 -04:00
Juan Cruz Viotti
18e9d1eb11 docs(GUI): skip AppImage desktop integration prompt with SKIP (#782)
The AppImage `desktopintegration` prompt can also be disabled by setting
the `SKIP` environment variable.

As a matter of fact, we use this trick inside Etcher itself when
executing the Etcher CLI as a child process of the Etcher GUI.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-28 16:46:23 -04:00
Andrew Scheller
bcada80def docs: revise PUBLISHING.md
- Fix typos.
- Add Windows to package instructions.
2016-10-26 13:20:08 -04:00
Juan Cruz Viotti
d9822faf2f fix(GUI): emit progress back to parent using node-ipc (#774)
This PR makes use of `node-ipc` to emit progress information from the
child CLI to the GUI process rather than the tailing approach we've
been doing until now.

This change was motivated by the following Electron fix which landed in
v1.4.4: https://github.com/electron/electron/pull/7578. Before such fix,
Electron would not output anything to stdout/stderr if the Electron
process was running with `ELECTRON_RUN_AS_NODE` under Windows, which
forced us to implement `--log` option in the Etcher CLI to output state
information to a file.

Since this issue is fixed, we can consume the Etcher CLI output from
within `child_process.spawn`, which opens more interesting possibilities
for sharing information between both processes.

This coindentally fixes a Windows issue where the tailing module would
receive malformed JSON, causing Etcher to crash at `JSON.parse`. The
reason of this problem was a bug in the tailing module we were using.

Fixes: https://github.com/resin-io/etcher/issues/642
Change-Type: patch
Changelog-Entry: Fix "Unexpected end of JSON" error in Windows.
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-25 23:56:39 -04:00
Juan Cruz Viotti
4d3eab4915 chore: create standalone Windows builds (#769)
This PR zips the package that is built by running:

```sh
.\scripts\build\windows.bat package <arch>
```

And puts it in `etcher-release/installers`.

Fixes: https://github.com/resin-io/etcher/issues/760
Change-Type: minor
Changelog-Entry: Publish standalone Windows builds.
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-25 12:35:21 -04:00
Juan Cruz Viotti
9086041a80 docs(GUI): minimim macOS supported platform (#765)
Since the Etcher GUI is based on Electron, it only runs on platforms
supported by Electron, which in the case of macOS, is 10.9 and newer
versions.

As an alternative, we propose using the Etcher CLI.

See: https://github.com/electron/electron/blob/master/docs/tutorial/supported-platforms.md
Fixes: https://github.com/resin-io/etcher/issues/761
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-24 14:23:22 -04:00
Juan Cruz Viotti
12f5baaa60 docs(GUI): no polkit authentication agent found Linux error (#757)
Document the need to have a polkit authentication running in GNU/Linux
to be able to go through the authentication system.

Fixes: https://github.com/resin-io/etcher/issues/756
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-14 12:09:31 -03:00
Juan Cruz Viotti
5924109371 docs: clarify that the install script doesn't install pre-requisites (#746)
We list all the pre-requisites needed to get up and running with Etcher,
and then say "run this script to install dependencies", which can be
interpreted as if the install script actually also installs the
pre-requisites, which is not the case.

To clarify this, we add a clear bold notice, and change "dependencies"
to "npm dependencies", to make the distinction clearer.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-10-03 21:51:00 -04:00
Andrew Scheller
e47a70606c docs: fix small typo in ARCHITECTURE.md 2016-09-29 22:40:26 -04:00
Juan Cruz Viotti
ddd2f2da40 docs: require at least NodeJS v6 to build Etcher (#727)
Some of the packaging modules that we use don't work on previous NodeJS
versions.

Fixes: https://github.com/resin-io/etcher/issues/725
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-09-29 09:16:40 -04:00
Juan Cruz Viotti
66a810e764 chore: apply HFS+ compression to *.app in OS X (#715)
This results in ~10MB savings, which is not much, but still worth
reducing as much as we can.

See: https://github.com/resin-io/etcher/issues/711
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-09-23 14:11:42 -04:00
Juan Cruz Viotti
e12f4e0b74 doc: recovering broken drives (#705)
Sometimes a flash error ends up taking the user's drive in a state that
can't be easily recover with usual disk utility tools. For when this
happens, we add some documentation about fail-proof methods to recover
the drive.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-09-15 08:49:35 -07:00
Juan Cruz Viotti
5d54e2b7e3 feat(GUI): allow disabling auto-update notifications (#704)
This feature is very appealing when running Etcher ouside a common
desktop environment, for example, as a Resin.io application. In such a
platform, an update notifier that points the user to the website makes
no sense, since the platform itself is responsible for the update.

For such cases, we added support for an environment variable called
`ETCHER_DISABLE_UPDATES`, that when set, will prevent the update check
altogether.

Change-Type: minor
Changelog-Entry: Allow the user to disable auto-update notifications with an environment variable.
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-09-14 18:19:10 -07:00
Juan Cruz Viotti
ce1c1d724d upgrade: etcher-image-write to v8.0.0 (#688)
This new version stops sending a `passedValidation` boolean property
upon completion and still throws an `EVALIDATION` error when validation
fails.

Such small chance allows us to get rid of lot of complexity related to
handling the `passedValidation` value in the application state.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-09-07 10:24:34 -07:00
Juan Cruz Viotti
36b7cf39f1 docs: nsis required version (#669)
Packaging Etcher with NSIS v3.x results in weird errors. We only support
v2.x, for which the latest version is v2.51.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-08-29 14:31:47 -04:00
Juan Cruz Viotti
a4e3359a96 doc: extract development setup docs into RUNNING-LOCALLY.md (#667)
This file will contain all information necessary to be able to get a
development version of Etcher running locally.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-08-26 15:48:17 -04:00
Juan Cruz Viotti
47c50ffe14 chore(GUI): integrate scss-lint (#666)
This PR integrates SCSS Lint, a tool that will help us keep SCSS tidier.
I've included a sensible configuration at `.scss-lint.yml`, and
documentation on how to install it on `CONTRIBUTING.md`.

The tool will run automatically as part of `npm run lint`.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-08-26 15:09:07 -04:00
Juan Cruz Viotti
bf7cedd546 docs(GUI): runtime linux libraries (#655)
This entry documents all the GNU/Linux libraries needed to run Etcher.

Fixes: https://github.com/resin-io/etcher/issues/630
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-08-24 10:28:36 -04:00
Juan Cruz Viotti
da81849d4b refactor: rely on etcher-image-stream to fetch bmap contents (#654)
In order to get the bmap file contents to the Etcher CLI, we were
handling extraction, writing to a temporary file, then reading again,
and all sorts of other mumbo-jumbo, without realising that
`etcher-image-stream` already has this information right where we need
it (in the CLI's writer module) and in the way we need it (as plain
text).

Re-using from there hugely simplifies things.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-08-24 10:19:18 -04:00
Juan Cruz Viotti
a5a195e8fb feat: integrate bmap support (#635)
This PR integrates `.bmap` support recently added to
`etcher-image-write` into Etcher itself.

It does it in the following way:

- It adds a `--bmap` option to the Etcher CLI.
- It saves a potential `bmap` file contents to the
  `SelectionStateModel`.
- In the GUI, at the time of writing, if there is a `bmap` file content
  in `SelectionStateModel`, it gets written to a temporary file and such
  path is passed as the `--bmap` option to the CLI.

Since validation checksums don't make sense anymore, the finish screen
doesn't show the checksum box in this case.

Change-Type: minor
Changelog-Entry: Add `.bmap` support.
Fixes: https://github.com/resin-io/etcher/issues/171
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
2016-08-22 09:50:56 -04:00
Juan Cruz Viotti
85676a2e94 refactor(GUI): main controller (#623)
The main page controller contained a lot of undocumented and untested
logic. As a first step towards cleaning up the whole thing, this PR
introduces the following changes:

- Implement `ImageSelectionController`, `DriveSelectionController`, and
  `FlashController` as children of `MainController`. Each of them is
  used by the appropriate main page "steps", and contains logic specific
  to them. The `MainController` hosts functionality that applies to the
  page as a whole.

- Add JSDoc annotations fo every controller function/property.

- Unit test several controller functions.

- Simplify template logic.

The "GUI fifty-thousand foot view" section in ARCHITECTURE.md has been
removed since there is no longer a single place where you can see all
the interactions between components.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-08-05 14:40:51 -04:00
Juan Cruz Viotti
ecd5d5bf5c docs(GUI): running Etcher on Wayland (#624)
This entry roughly documents how to get Etcher running on Wayland by
using the XWayland Server.

Fixes: https://github.com/resin-io/etcher/issues/509
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-08-04 14:03:36 -04:00