Commit Graph
270 Commits
Author SHA1 Message Date
Jonathan Lipps c58f32441d Publish
- appium@2.0.0-beta.43
 - @appium/base-driver@8.7.0
 - @appium/base-plugin@1.10.2
 - @appium/doctor@1.16.25
 - @appium/docutils@0.0.10
 - @appium/fake-driver@4.2.0
 - @appium/fake-plugin@2.1.0
 - @appium/gulp-plugins@7.0.5
 - @appium/images-plugin@1.3.5
 - @appium/support@2.59.5
 - @appium/test-support@1.5.0
 - @appium/types@0.4.0
2022-08-10 07:45:24 -07:00
Jonathan LippsandChristopher Hiller 337ec3e7ba feat(base-driver,fake-driver,appium): add convenience methods for defining execute script overloads (#17321)
* feat(base-driver,fake-driver,appium): add convenience methods for defining execute script overloads

* Update packages/appium/docs/en/ecosystem/build-drivers.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/ecosystem/build-drivers.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/ecosystem/build-drivers.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/ecosystem/build-drivers.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* review

* review

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>
2022-08-09 20:47:47 -07:00
Christopher Hiller d4b983328a feat(appium,base-driver,fake-driver,fake-plugin,test-support,types): updateServer receives cliArgs param
This PR passes a `cliArgs` parameter to the static method `updateServer` of drivers and plugins so they can take action on the server configuration based on the content of the arguments.

Note that `cliArgs` is a misnomer, because these args can also come from configuration files.

Closes #17304
2022-08-08 14:00:58 -07:00
Christopher Hiller dc4835f293 fix(appium): fix busted config file normalization algorithm
I'm not sure _what_ happened here other than "the types weren't strict enough" otherwise I would have noticed this earlier.  Anyway; the check to see if we should dig into the config object to normalize the keys was getting passed _something_ but that _something_ wasn't anything it expected.

As a result, I needed to update some tests which assumed `readConfigFile()` resolved w/ an identity w/r/t the config file itself.  It doesn't give the config file back verbatim any longer; the result will be normalized to camel-case keys (or whatever the `appiumCliDest` property is, if it exists)
2022-08-04 15:38:52 -07:00
ian zhang b5ea03ae85 docs: Update Edit URL and Fix typo of MJSONWP (#17315)
As branch 2.0 won't there any more , just replace with master as latest resource
2022-08-04 14:10:51 -07:00
Jonathan Lipps 3c6633eaa1 docs(appium): restore config developer docs (#17312) 2022-08-03 16:56:08 -07:00
Jonathan LippsandChristopher Hiller bf53db9fac docs(appium): reorganize migration doc info (#17311)
* docs(appium): reorganize migration doc info so that appropriate bits are in their own docs

* Update packages/appium/docs/en/ecosystem/build-drivers.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/ecosystem/build-drivers.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/guides/caps.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/guides/caps.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/guides/config.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/guides/config.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/guides/config.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/guides/config.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/guides/config.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* Update packages/appium/docs/en/guides/migrating-1-to-2.md

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>

* add header for extensions

Co-authored-by: Christopher Hiller <boneskull@boneskull.com>
2022-08-03 15:45:01 -07:00
Jonathan LippsandKazuaki Matsuo 50964e0690 docs(appium): migrate the migration docs and fix urls (#17306)
* docs(appium): migrate the migration docs and fix urls

* Update packages/appium/docs/en/guides/migrating-1-to-2.md

Co-authored-by: Kazuaki Matsuo <fly.49.89.over@gmail.com>

* docs(appium): migrate the migration docs and fix urls

Co-authored-by: Kazuaki Matsuo <fly.49.89.over@gmail.com>
2022-08-03 11:46:48 -07:00
Jonathan Lipps 500c08f392 Publish
- appium@2.0.0-beta.42
 - @appium/base-driver@8.6.1
 - @appium/base-plugin@1.10.1
 - @appium/doctor@1.16.24
 - @appium/docutils@0.0.9
 - @appium/eslint-config-appium@6.0.4
 - @appium/execute-driver-plugin@2.0.4
 - @appium/fake-driver@4.1.0
 - @appium/fake-plugin@2.0.5
 - @appium/gulp-plugins@7.0.4
 - @appium/images-plugin@1.3.4
 - @appium/opencv@1.0.11
 - @appium/relaxed-caps-plugin@1.0.0-beta.11
 - @appium/schema@0.0.9
 - @appium/support@2.59.4
 - @appium/test-support@1.4.1
 - @appium/types@0.3.1
 - @appium/universal-xml-plugin@1.0.0-beta.13
2022-08-02 20:21:17 -07:00
Christopher Hiller 4655302239 test(appium): add smoke test for driver installation
This adds a test (which currently only runs automatically in CI) which installs the uiautomator2 driver.  This will ensure that driver installation does not only work in a dev environment!

Due to needing to support Windows and not wishing to befoul the default `APPIUM_HOME`, we need `cross-env` as a production dependency (otherwise the smoke test would fail) to set a temporary `APPIUM_HOME` (`local_appium_home`) which is relative to the temp dir used by the smoke test (see https://github.com/boneskull/nodejs-production-test-action)
2022-08-02 17:21:14 -07:00
Christopher Hiller 27ac2fa125 fix(appium): add npm version check
Also fix duplication of error messages about engines.

Unfortunately this adds another startup delay, but I'm unsure of a better way around it.  I guess bundling our own npm might work!
2022-08-02 14:43:25 -07:00
Christopher Hiller d8d2382327 fix(appium,base-driver,base-plugin,doctor,docutils,eslint-config-appium,execute-driver-plugin,fake-driver,fake-plugin,gulp-plugins,images-plugin,opencv,relaxed-caps-plugin,schema,support,test-support,types,universal-xml-plugin): update engines
also add a missing dep in `@appium/schema`
2022-08-02 14:22:44 -07:00
Christopher Hiller faff3ce347 feat(appium): pass unknown args to extension scripts
Resolves #17250

This change passes any extra unknown arguments to extension scripts _if and only if_ `appium <extension> <name> run` is executed.  In all other cases, unknown arguments result in an error and the `appium` CLI will abort as before.

Example:

```bash
appium driver fake run fake-success --foo --bar`
```

In the `fake-success` script of the `fake` driver, `process.argv.slice(2)` will be `['--foo', '--bar']`.  Extra arguments can appear anywhere after the `appium` executable in the command and do not need to appear after the script name.

- In addition, added some missing arguments for extension subcommands to the types (`json`, `suppressOutput`).  Extra arguments are stored in property `extraArgs`.
- Fixed a type problem surfaced by the previous item
- Changed help text for the `run` subcommand to hopefully read more clearly
- Reorganized E2E tests for the `run` subcommand
- Slightly changed error output when unknown argument is provided (given that we now need to DIY this)
2022-08-02 10:55:11 -07:00
Christopher Hiller b7e905eaf1 fix(appium): partially revert 2a6a056187
This removes the symlink we were creating to avoid an extra install of `appium` in `APPIUM_HOME`.  Using a symlink obviously breaks stuff, because (for whatever reason) `npm` wants to run lthe `prepare` lifecycle script in the symlinked `appium`, which will not work outside of a dev environment due to missing dev depenencies.

Because npm v7+'s behavior is to install peer dependencies automatically, this will cause `appium` to be installed alongside any extensions in `APPIUM_HOME`. Each extension will have its own `appium`. This may just be the price we have to pay for using `APPIUM_HOME`, or there may be another solution to avoid the extra install (I'm not sure what it is).  I think it _also_ exposes us to future bugs where the running Appium differs from whatever the peer dependency is set to... which sort of defeats the purpose of peer dependencies.  Either way, the user will get a warning if the currently-running Appium is too new for an extension.
2022-08-01 14:36:03 -07:00
renovate[bot] 47de13c0d6 chore(types): update dependency type-fest to v2.18.0 2022-07-31 13:25:12 +00:00
Christopher Hiller f6e6d7234e Publish
- appium@2.0.0-beta.41
 - @appium/base-driver@8.6.0
 - @appium/base-plugin@1.10.0
 - @appium/doctor@1.16.23
 - @appium/docutils@0.0.8
 - @appium/eslint-config-appium@6.0.3
 - @appium/execute-driver-plugin@2.0.3
 - @appium/fake-driver@4.0.2
 - @appium/fake-plugin@2.0.4
 - @appium/gulp-plugins@7.0.3
 - @appium/images-plugin@1.3.3
 - @appium/opencv@1.0.10
 - @appium/relaxed-caps-plugin@1.0.0-beta.10
 - @appium/schema@0.0.8
 - @appium/support@2.59.3
 - @appium/test-support@1.4.0
 - @appium/types@0.3.0
 - @appium/universal-xml-plugin@1.0.0-beta.12
2022-07-28 14:34:54 -07:00
renovate[bot] 54908e1cae chore(types): update dependency type-fest to v2.17.0 2022-07-22 16:54:35 +00:00
renovate[bot] 27ea226364 chore(): update babel monorepo to v7.18.9 2022-07-19 12:46:13 +00:00
Kazuaki Matsuo e71e4eeecb docs: add ruby (#16857)
* chore: add ruby

* append ruby more

* tweak

* update
2022-07-18 22:03:32 -07:00
Christopher Hiller 70d88cb86f feat(appium,base-driver,base-plugin,test-support,types): move test fixtures into test-support
- `@appium/test-support` now exports the e2e setup for plugins, and e2e/unit suites for drivers from base-driver.  it also generates declarations.
- `appium` exports this as `appium/test`.
- The `capability.spec.js` unit test for basedriver now avoids spying on the "global" logger, due to test flake.  It now spies directly on the function which calls the global logger. (@mykola_mokhnach)
- removed homebrew ansi-stripping code from `test-support` and replaced with `@colors/colors`
- type fixes and refactors for `@appium/test-support`
- type fixes for `appium`
- simplify `lib/index.js` of `@appium/base-driver`
2022-07-18 15:58:21 -07:00
Christopher Hiller 2a6a056187 fix(appium,support): fix installation problems
Ref: #17073

this change uses --legacy-peer-deps for newer versions of npm to
avoid installation of appium when installing extensions in ~/.appium.  this does not work if the extension contains a shrinkwrap with appium in it, though.
in that case, an extra copy of appium will always be installed.

it creates a symlink, e.g., ~/.appium/node_modules/appium to the currently-running appium, wherever that is.  could not abuse NODE_PATH to do this.

this is rather naive and does not check that the symlink is actually the same as the running appium if it already exists. that might cause some weird problems with multiple installs of appium on the same machine, but if it does, we can fix them as they arise.
2022-07-13 13:48:21 -07:00
renovate[bot] 45563d0ef9 chore(appium): update dependency lilconfig to v2.0.6 2022-07-11 10:40:11 +00:00
Christopher Hiller d3f90d5ed6 fix(appium): remove references to js in typescript code
I think, perhaps, having `.ts` files hanging around so that we can make declarations out of them is bad news.  I got this idea from wdio.  Anyway, the TS alias `appium` (often used as `appium/types`) points to the `types` dir -- not the `build/types` dir. It can't point to that, because recursion. That means an import from `../lib/constants` imports from the _ESM_ `../lib/constants`, which apparently is not understandable by the compiler since there is no `.d.ts` flie living there (even if `constants.js` is typed via docstrings, which it is).  I don't know.  It was easier just to do this for now.  At some point later I'll look at using plain `.d.ts` files for this sort of thing, since it seems like it should work.
2022-07-08 13:09:28 -07:00
Christopher Hiller f9129dfee3 fix(): moved type packages to deps of specific packages
When any package here is consumed as a library, the production deps installed alongside it _must_ also include depenencies related to type information. If these packages _aren't_ included, consumers will not have the requisite declarations installed and will get incomplete type information--at best--or worse; compilation errors.

Putting the onus on the consumer to install these requisite types is both user-hostile _and_ can result in the incorrect versions of type declarations being installed.

To that end, I've moved the various type declaration deps to production deps of the packages in which they are used.  Sometimes this is multiple packages (in the case of, say, `@types/teen_process`).  This results in many types being removed from the monorepo root.  Those that remain are for _dev dependencies only_.  If a packages uses, say, `ws`, but only in its tests, then the types can remain in the monorepo root along with the rest of the common dev deps.

I also saw an unused `supports-color` in `appium` and removed it.
2022-07-08 13:09:28 -07:00
Christopher Hiller a0a6166738 fix(appium,types): include @appium/types in appium
This makes a small handful of fixes related to type consumption:

- `@appium/types` is now a direct dep of `appium`.  Without this, types leveraging `@appium/types`--e.g., `BaseDriver`, which is based on a `Driver` interface defined in `@appium/types`--fail to be understood fully by a consumer (such as an extension).  Extension authors would need to install `@appium/types` as their own dev dependency.  This change makes addition of `@appium/types` unneeded when consuming types exposed by `appium`, `appium/driver`, `appium/support`, etc.
- At this time, consumers will still need to add `@appium/types` if they wish to directly reference types defined in here (such as `W3CCapabilities`).
- In manual testing of the exported types, I found two issues in `appium/lib/schema/arg-spec.js` and `appium/lib/schema/schema.js` which were relative type imports and only worked in the context of the monorepo.  I fixed these.
- `@appium/types` previously re-exported types defined within `axios` (`HTTPMethod`); I just copied and pasted what we needed to avoid the production dependency on `axios`.
- `@types/express`, `@types/npmlog`, `type-fest` and `@wdio/types` were added as production deps to `@appium/types`, as these are needed.  However, these are packages _only_ containing types, unlike `axios`. There's a lesson to be learned here, but I don't know what it is.
2022-07-08 13:09:28 -07:00
ian zhang a20d5523f5 docs(appium): stub out chinese docs system (#17076)
* #16817 2.0 Chinese mkdocs-zh.yml
Rebase the code for mkdocs-zh

* #16817 2.0 Chinese mkdocs-zh.yml
Change the folder from cn to zh as mkdocs required

* #16817 2.0 Chinese mkdocs-zh.yml
Change the relative link from en to zh

* #16817 2.0 Chinese mkdocs-zh.yml
Translate some titles to trigger the build
2022-07-06 12:46:53 -07:00
renovate[bot] f8224f2780 chore(appium): update dependency winston to v3.8.1 2022-07-01 14:32:25 +00:00
renovate[bot] c4a1a46df3 chore(): update babel monorepo to v7.18.6 2022-06-28 12:58:59 +00:00
renovate[bot] 2bf673b2a8 chore(appium): update dependency winston to v3.8.0 2022-06-26 15:13:08 +00:00
renovate[bot] 4e93edf33b chore(base-driver): update dependency async-lock to v1.3.2 2022-06-25 12:10:51 +00:00
Mykola Mokhnach d2a3adc2e3 fix: Update the way build info is fetched from GitHub (#17078) 2022-06-21 08:05:54 +02:00
Jonathan Lipps 2ebf3a18bd docs(appium): add building drivers doc (resolves #16788) 2022-06-15 08:58:31 -07:00
Christopher Hiller 4d454d6c1a test(appium): output correct APPIUM_HOME var 2022-06-13 16:08:17 -07:00
Christopher Hiller 485239d599 chore(ci): run smoke test in all packages
This uses the [boneskull/nodejs-production-test-action](https://github.com/boneskull/nodejs-production-test-action) GH action to run a smoke test across all packages.

The action does the following:

1. Runs `npm pack` on each package, writing the tarball to a temp dir. This tarball contains the package as a user would `npm install` it.
2. Changes into the temp dir and runs `npm install <tarball>` on each
3. Runs a specified script (in our case, `test:smoke`) in each installed package's dir in `<tmp_dir>/node_modules`

Because `devDependencies` will not be present, this should avoid a class of issues where production deps are miscategorized as dev deps.

The action should probably use a separate temp dir for each--in the case of a dependency being present but only because some other package depends on it--but it's not smart enough to figure out peer dependencies yet.
2022-06-13 16:08:17 -07:00
Christopher Hiller 965752f288 fix(appium): postinstall: never assume local appium if it is being installed globally
In addition, wrap the text to the terminal.  `wrap-ansi` is good b/c it
considers colors/emoji/etc.

Removed unused dep `word-wrap`.

Resolves #17054
2022-06-13 16:05:20 -07:00
Christopher Hiller 1e42c2378c fix(appium): fix incorrect count of errors and warnings
This was always displaying a count of _n + 1_ due to the way the summaries are concatenated.
2022-06-13 11:00:20 -07:00
Jonathan Lipps 4cf2cc92d0 Publish
- appium@2.0.0-beta.40
 - @appium/base-driver@8.5.7
 - @appium/base-plugin@1.9.2
 - @appium/doctor@1.16.22
 - @appium/docutils@0.0.7
 - @appium/fake-plugin@2.0.3
 - @appium/support@2.59.2
 - @appium/test-support@1.3.22
2022-06-03 19:08:16 -07:00
Jonathan Lipps 87f4b7c52c Publish
- appium@2.0.0-beta.39
 - @appium/base-driver@8.5.6
2022-06-03 13:03:38 -07:00
Jonathan Lipps ed2002d90d Publish
- appium@2.0.0-beta.38
 - @appium/execute-driver-plugin@2.0.2
 - @appium/fake-plugin@2.0.2
 - @appium/images-plugin@1.3.2
 - @appium/relaxed-caps-plugin@1.0.0-beta.9
 - @appium/universal-xml-plugin@1.0.0-beta.11
2022-06-01 10:27:21 -07:00
Jonathan Lipps 916fede05f test(appium): update e2e test timeout since some npm tests are slow 2022-06-01 10:19:16 -07:00
Jonathan Lipps 62b97417fc Publish
- appium@2.0.0-beta.37
 - @appium/base-driver@8.5.5
 - @appium/base-plugin@1.9.1
 - @appium/doctor@1.16.21
 - @appium/docutils@0.0.6
 - @appium/eslint-config-appium@6.0.2
 - @appium/execute-driver-plugin@2.0.1
 - @appium/fake-driver@4.0.1
 - @appium/fake-plugin@2.0.1
 - @appium/gulp-plugins@7.0.2
 - @appium/images-plugin@1.3.1
 - @appium/opencv@1.0.9
 - @appium/relaxed-caps-plugin@1.0.0-beta.8
 - @appium/schema@0.0.7
 - @appium/support@2.59.1
 - @appium/test-support@1.3.21
 - @appium/types@0.2.5
 - @appium/universal-xml-plugin@1.0.0-beta.10
2022-05-31 16:52:23 -07:00
Jonathan Lipps f6cbfd77eb chore: publish, also set an explicit version for images since it was way off 2022-05-31 16:51:36 -07:00
Jonathan Lipps 5c7af8ee73 Publish
- appium@2.0.0-beta.36
 - @appium/base-driver@8.5.4
 - @appium/base-plugin@1.9.0
 - @appium/doctor@1.16.20
 - @appium/docutils@0.0.5
 - @appium/eslint-config-appium@6.0.1
 - @appium/execute-driver-plugin@2.0.0
 - @appium/fake-driver@4.0.0
 - @appium/fake-plugin@2.0.0
 - @appium/gulp-plugins@7.0.1
 - @appium/images-plugin@1.2.0
 - @appium/opencv@1.0.8
 - @appium/relaxed-caps-plugin@1.0.0-beta.7
 - @appium/schema@0.0.6
 - @appium/support@2.59.0
 - @appium/test-support@1.3.20
 - @appium/types@0.2.4
 - @appium/universal-xml-plugin@1.0.0-beta.9
2022-05-31 16:44:51 -07:00
Christopher Hiller ac8e0e0451 chore(appium,base-driver,base-plugin,doctor,docutils,eslint-config-appium,execute-driver-plugin,fake-driver,fake-plugin,gulp-plugins,images-plugin,opencv,relaxed-caps-plugin,schema,support,test-support,types,universal-xml-plugin): fix engines field 😂 2022-05-31 16:26:43 -07:00
Renovate Bot f5a2b601ff chore(appium): update dependency yaml to v2.1.1 2022-05-31 15:42:56 +00:00
Renovate Bot e5e8f9b874 chore(test-support): update dependency @babel/runtime to v7.18.3 2022-05-26 15:29:43 -07:00
Christopher Hiller 681f54e847 chore(appium): better error handling during extension loading
Currently, failing to `require()` an extension and access its "main class" can result in a rather cryptic `TypeError`.

This adds two specific errors when:

- The path to the extension cannot be found.  This could happen if someone, say, deletes the extension using `rm -rf`, but leaves `extensions.yaml` intact.
- The extension can be found, but its main class cannot be found.  This would be due to an invalid extension and is generally not "user error"

Added some tests for it.
2022-05-26 15:21:41 -07:00
Christopher Hiller a0edfca8ef chore(appium,fake-driver,fake-plugin): hardcode peer dep version
Lerna won't manage this for us.  Further, `peerDependencies` should be as broad as possible.  We can narrow this range later, if necessary.  Narrowing the range will be a breaking change in the plugin.
2022-05-26 12:07:17 -07:00
Christopher Hiller 6b224f545f feat(appium,support): extension check improvements
This PR changes a few things:

- Extension problems are now displayed correctly at `appium server` startup.  This was done by changing the default `npmlog` level, then reesetting it to `silent` when `winston` takes over (in `logsink.init()`)
- Extension problems are also displayed at install time.
- Improved performance of `appium <driver|plugin> install` in many cases by actually checking if the thing is installed _before_ installing it.
- `ExtensionCommand` uses a new console logging mechanism (`console` in `@appium/support`) tailored to CLI usage, since it is intended to be run via the CLI.  Using this, we handle the result of extension checks both at server runtime and during CLI tool usage in the appropriate manner.  The implementation is just a dumb wrapper around `console.log` and should eventually be removed when we revisit the logging architecture.
- Separated extension checks further into "errors" ("Problems") and "warnings".  As these demand distinct log levels, `ExtensionConfig` no longer accepts a `logFn` in its constructor (since this restricted to a single level ("error"))
- Generally improved specificity, helpfulness, and reduced extraneous verbosity (like this sentence) of warnings
- Removed `strip-colors`, as this functionality is present in `@colors/colors`.  The E2E test helper now automatically strips colors from child processes.
- More tests
- Change `e2e-helpers` to use `CliConsole` for command logging output during tests
- Change the "uninstall" command to use `npm uninstall`, since `rm -rf` will hose `node_modules` if the current project has a dependency on `appium` (in other words, if they are otherwise using a package manager to manage extensions).  This is slower but safer.
2022-05-26 12:07:17 -07:00
Renovate Bot 4d6c114fe8 chore(gulp-plugins): update babel monorepo to v7.18.2 2022-05-25 14:28:48 +00:00