xpipe/README.md

148 lines
8.4 KiB
Markdown
Raw Normal View History

2023-01-27 15:34:46 +13:00
<img src="https://user-images.githubusercontent.com/72509152/213873342-7638e830-8a95-4b5d-ad3e-5a9a0b4bf538.png" alt="drawing" width="300"/>
2022-08-13 19:29:26 +12:00
2023-02-03 01:47:23 +13:00
### Next level remote data workflows for everyone
2022-03-10 10:51:04 +13:00
2023-02-03 01:47:23 +13:00
X-Pipe is a tool for working with remote connections and the data that can be accessed through them.
2023-02-03 01:54:50 +13:00
The focus lies on providing an easy remote connection handling workflow plus data intermediation capabilities
2023-02-03 01:47:23 +13:00
such that you can work with all kinds of data located on essentially any remote system with ease.
2023-02-03 01:54:50 +13:00
So if you are
- a data analyst/scientist
- a system administrator
- a software engineer
- or generally just work a lot with remote connections and data
then X-Pipe is designed for you!
2022-03-10 10:51:04 +13:00
2023-02-03 01:47:23 +13:00
The X-Pipe project is designed to be an open platform, both in terms of development from
a developer's perspective and the workflow from a user's perspective.
2023-02-03 01:54:50 +13:00
X-Pipe is open source and is
2023-02-03 01:47:23 +13:00
designed to utilize and integrate well with other popular tools and workflows,
focusing on augmenting them rather than replacing them.
2023-01-27 15:34:46 +13:00
## Connection Explorer
The connection explorer allows you to connect to, manage, and interact with all kinds of remote systems.
It comes with the following main features:
2023-02-03 01:47:23 +13:00
#### Flexible Connector
2023-01-27 15:34:46 +13:00
- Can connect to standard servers, database servers, and more
- Supports established protocols (e.g. SSH and more) plus any custom connection methods that work through the command-line
- Is able to integrate any kind of proxies into the connection process, even ones with different protocols
#### Instant launch for remote shells and commands
- Automatically login into a shell in your favourite terminal with one click (no need to fill password prompts, etc.)
- Works for all kinds of shells. This includes command shells (e.g. bash, PowerShell, cmd, etc.) and database shells (e.g. PSQL Shell)
2023-02-08 10:54:59 +13:00
- Comes with integrations for all commonly used terminals for all operating systems
2023-01-27 15:34:46 +13:00
- Exclusively uses established CLI tools and therefore works out of the box on most systems and doesn't require any additional setup
2023-02-03 01:47:23 +13:00
- Allows you to customize the launched shell's init environment
2023-01-27 15:34:46 +13:00
2023-02-04 00:10:08 +13:00
#### All your connections in one place
2023-01-27 15:34:46 +13:00
2023-02-04 00:10:08 +13:00
- Easily create and manage all kinds of remote connections at one location
2023-01-27 15:34:46 +13:00
- Securely stores all information exclusively on your computer and encrypts all secret information
2023-02-08 10:54:59 +13:00
- Share connection configurations to any other trusted party through shareable URLs
- Create desktop shortcuts to open your connections
2023-01-27 15:34:46 +13:00
2023-02-03 01:47:23 +13:00
<img src="https://user-images.githubusercontent.com/72509152/213240153-3f742f03-1289-44c3-bf4d-626d9886ffcf.png" alt="drawing" height="450"/>
2023-01-27 15:34:46 +13:00
## Data Explorer
Building on top of the connection explorer, the data explorer
allows you to manage and work with all kinds of data sources:
#### Work with your data on a higher level
- X-Pipe utilizes structures of data instead of the raw data itself, allowing for
a higher level workflow that is independent of the underlying data format
- Save time when adding data sources by making use of the advanced
auto detection feature of X-Pipe where you don't have to worry about encodings, format configurations, and more
- Easily convert between different data representations
#### Integrate X-Pipe with your favorite tools and workflows
- Easily import and export all kinds of data formats and technologies
2023-02-03 01:47:23 +13:00
- Access data sources from the command-line with the X-Pipe CLI or
your favorite programming languages using the X-Pipe APIs
2023-01-27 15:34:46 +13:00
- Connect select third party applications directly to X-Pipe through extensions
2023-02-03 01:47:23 +13:00
<img src="https://user-images.githubusercontent.com/72509152/213240736-7a27fb3c-e8c3-4c92-bcea-2a782e53dc31.png" alt="drawing" height="450"/>
2023-01-27 15:34:46 +13:00
## Repository Structure
The following for modules make up the X-Pipe API and a licensed under the MIT license:
- [core](core) - Shared core classes of the X-Pipe Java API, X-Pipe extensions, and the X-Pipe daemon implementation
- [API](api) - The API that can be used to interact with X-Pipe from any JVM-based language.
For setup instructions, see the [X-Pipe Java API Usage](https://xpipe-io.readthedocs.io/en/latest/dev/api/java.html) section.
- [beacon](beacon) - The X-Pipe beacon component is responsible for handling all communications between the X-Pipe daemon
2022-03-10 10:51:04 +13:00
and the client applications, for example the various programming language APIs and the CLI
2023-01-27 15:34:46 +13:00
- [extension](extension) - An API to create all different kinds of extensions for the X-Pipe platform
For setup instructions, see the [X-Pipe extension development](https://xpipe-io.readthedocs.io/en/latest/dev/extensions/index.html) section.
2022-03-10 10:51:04 +13:00
2023-01-27 15:34:46 +13:00
The other modules make up the X-Pipe implementation and are licensed under GPL:
- [app](app) - Contains the X-Pipe daemon implementation and the X-Pipe desktop application code
- [cli](cli) - The X-Pipe CLI implementation, a GraalVM native image application
- [dist](dist) - Tools to create a distributable package of X-Pipe
- [ext](ext) - Available X-Pipe extensions. Note that essentially every feature is implemented as an extension
2022-06-18 10:29:41 +12:00
2023-01-27 15:34:46 +13:00
## Development
2022-06-18 10:29:41 +12:00
2023-01-27 15:34:46 +13:00
Any contribution is welcomed!
There are no real formal contribution guidelines right now, they will maybe come later.
2022-06-18 10:29:41 +12:00
2023-01-27 15:34:46 +13:00
### Modularity
2022-03-10 10:51:04 +13:00
2023-01-27 15:34:46 +13:00
All X-Pipe components target [JDK 19](https://openjdk.java.net/projects/jdk/19/) and make full use of the Java Module System (JPMS).
2022-03-10 10:51:04 +13:00
All components are modularized, including all their dependencies.
2023-01-27 15:34:46 +13:00
As the CLI utilizes the native image capability of [GraalVM](https://github.com/graalvm/graalvm-ce-builds/releases/tag/vm-22.3.0), it is recommended to use GraalVM with Java 19 support.
2022-03-10 10:51:04 +13:00
In case a dependency is (sadly) not modularized yet, module information is manually added using [moditect](https://github.com/moditect/moditect-gradle-plugin).
2023-01-27 15:34:46 +13:00
Further, note that as this is a pretty complicated Java project that fully utilizes modularity,
many IDEs still have problems building this project properly.
For example, you can't build this project in eclipse or vscode as it will complain about missing modules.
The tested and recommended IDE is intellij.
2023-02-03 03:17:40 +13:00
### Requirements
To build the CLI, [GraalVM](https://github.com/graalvm/graalvm-ce-builds/releases/tag/vm-22.3.0) is required.
Furthermore, you also need the platform specific toolchains to be installed:
- Windows: [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/?q=build+tools)
- Linux: `build-essential libz-dev zlib1g-dev`
- MacOS: xcode with `xcode-select --install`
2023-01-27 15:34:46 +13:00
### Building and Running
You can use the gradle wrapper to build and run the project:
- `gradlew app:run` will run the desktop application. You can set various useful properties in `app/build.gradle`
- `gradlew buildCli` will create a native image for the CLI application
2023-01-27 15:34:46 +13:00
- `gradlew dist` will create a distributable production version in `dist/build/dist/base`.
To include this CLI executable in this build, make sure to run `gradlew buildCli` first
2023-01-27 15:34:46 +13:00
- You can also run the CLI application in development mode with something like `gradlew :cli:clean :cli:run --args="daemon start"`.
Note here that you should always clean the CLI project first, as the native image plugin is a little buggy in that regard.
- `gradlew <project>:test` will run the tests of the specified project.
2022-03-11 06:48:06 +13:00
2023-02-03 03:17:40 +13:00
Some production unit tests depend on a connection to an X-Pipe daemon to properly function.
2022-11-24 20:43:30 +13:00
To launch the installed daemon, it is required that you either have X-Pipe
installed or have set the `XPIPE_HOME` environment variable in case you are using a portable version.
2023-01-27 15:34:46 +13:00
You are also able to properly debug the built production application through two different methods:
- The `app/scripts/xpiped_debug` script will launch the application in debug mode and with a console attached to it
- The `app/scripts/xpiped_debug_attach` script attaches a debugger with the help of [AttachMe](https://plugins.jetbrains.com/plugin/13263-attachme).
Just make sure that the attachme process is running within IntelliJ, and the debugger should launch automatically once you start up the application.
Note that when any unit test is run using a debugger, the X-Pipe daemon process that is started will also attempt
to connect to that debugger through [AttachMe](https://plugins.jetbrains.com/plugin/13263-attachme) as well.
2023-02-03 03:17:40 +13:00
2023-01-29 22:49:58 +13:00
### Development FAQ
##### Why are there no GitHub actions workflows or other continuous integration pipelines set up for this repository?
There are several test workflows run in a private environment as they use private test connections
such as remote server connections and database connections.
Other private workflows are responsible for packaging, signing, and distributing the releases.
So you can assume that the code is tested!