Move appium/appium, all of the drivers, appium-adb, appium-remote-debugger, appium-chromedriver, appium-support, appium-ios-simulator, node-simctl into a single repo so that they can be released simultaneously and so that they can be symlinked (using Lerna) to eachother. Then make Appium into a "Builder" that can create a custom Appium server by passing it instances of drivers
STAGE 1: Use another CI for the packges that supports multiple builds (Travis does not). This has already been started with Azure. I'd be open to other options, but Azure looks really promising.
STAGE 2: Move the packages one-by-one into one repository (temporarily call it appium/monorepo
) and deprecate the repositories that were left behind.
- Will require a little bit of refactoring to make CI work
- Should rename everything to
@appium/<package-name>
- Add Lerna to the root of the repository to support sibling package symlinking, shared dependency symlinking and Lerna's versioning/publishing
STAGE 3: Split appium/appium
into two packages. One called @appium/builder
which changes the existing appium/appium
to be a builder that takes drivers as arguments (instead of importing them) and runs a server. Have appium/appium
import @appium/builder
and then export all of the drivers and runs it as a server (like we currently do)
STAGE 4: Refactor the drivers
to all import @appium/builder
and make themselves standalone Appium servers. This will give us higher fidelity E2E tests, will allow us to create single driver bundles to upload to cloud services and we can use npm as an option for installing individual drivers (npm install -g @appium/xcuitest-driver
)
STAGE 5: Create @appium/cli
that installs and manages drivers
STAGE 6: Once we're happy with the reliability of @appium/cli
rename it to appium/appium
, bump the version to 2.0 and deprecate the old appium/appium
.