Skip to content

Repository files navigation

splitter

A command to deploy your apps to several mobile app distribution services. The motivation of splitter is to encourage Mobile App Deployment as Code.

// for internal dogfooding
splitter deploy -f path/to/aab -n dogfooding

// for pull request
splitter deploy -f path/to/aab -n pull-request

// for design reviews
splitter deploy -f path/to/aab -n design-review

Install

Please download the latest binary from GitHub Release. The following code may be useful.

version=<latest version>

# for windows
curl -sL -o "splitter.zip" \
    "https://github.com/jmatsu/splitter/releases/download/$version/splitter_$(uname -s)_$(uname -m).zip"
unzip splitter.zip
./spliter -h

# for linux or macOS
curl -sL -o "splitter.tar" \
    "https://github.com/jmatsu/splitter/releases/download/$version/splitter_$(uname -s)_$(uname -m).tar.gz"
tar -xf splitter.tar
./spliter -h

Configuration-based deployment

splitter allows you to manage deployment configuration as Code. This feature makes you focus on defining deployments.

USAGE:
   splitter deploy [options]

OPTIONS:
   --name string, -n string         deployment name in your configuration file. [$SPLITTER_DEPLOYMENT_NAME]
   --source-path string, -f string  A path to an app file.
   --release-note string            An release note of this revision. Some of services may not support this option. [$SPLITTER_DEPLOYMENT_RELEASE_NOTE]

Syntax

Please check splitter.document.yml and examples/splitter.yml as well.

DeployGate configuration

Required

  • app-owner-name
  • api-token

https://github.com/jmatsu/splitter/blob/main/internal/config/deploygate_config.go

Firebase App Distribution configuration

Required

  • app-id
  • access-token or credentials-path

https://github.com/jmatsu/splitter/blob/main/internal/config/firebase_app_distribution_config.go

Local configuration

Required

  • destination-path

https://github.com/jmatsu/splitter/blob/main/internal/config/local_config.go

Custom service configuration

Required

  • auth-token

https://github.com/jmatsu/splitter/blob/main/internal/config/custom_service_config.go

On-demand deployment

splitter provides commands specified for deployment to each service. This mode doesn't use deployments configuration in the config file.

These commands may accept finer-grained options than the configuration-based command.

The minimum behaviour just creates new releases, but you can create and/or Distribution.

USAGE:
   splitter deploygate [options]

OPTIONS:
   --app-owner-name string, -n string  User name or Organization name. [$DEPLOYGATE_APP_OWNER_NAME]
   --api-token string, -t string       The api token of the app owner. [$DEPLOYGATE_API_TOKEN]
   --source-path string, -f string     A path to an app file.
   --message string, -m string         A short message of this revision.
   --distribution-access-key string    An access key of a distribution that must exist. If the both of key and name are specified, key takes priority.
   --distribution-name string          An name (title) of a distribution that does not have to exist. If the both of key and name are specified, key takes priority.
   --distribution-release-note string  An release note of this revision that will be available only while being distributed via the specified distribution.
   --disable-ios-notification          Specify this file if you would like to disable notifications for iOS.

The minimum behaviour just creates new releases, but you can update release notes and distribute to specific groups.

USAGE:
   splitter firebase-app-distribution [options]

OPTIONS:
   --app-id string                   Firebase App ID. e.g. 1:123456578:android:xxxxxxx [$FIREBASE_APP_ID]
   --source-path string, -f string   A path to an app file.
   --access-token string, -t string  The access token to use for this distribution. [$FIREBASE_CLI_TOKEN]
   --credentials string              A path to a credentials json file.
   --release-note string             An release note of this revision.
   --group-aliases string            Aliases of groups. Separate multiple aliases by commas.
   --tester-emails string            Emails of testers. Separate multiple aliases by commas.

To get your access token, we recommend https://github.com/google/oauth2l.

Local

Your local file system.

USAGE:
   splitter local [options]

OPTIONS:
   --source-path string, -f string  A source path to an app file.
   --destination-path string        A destination path to an app file.
   --delete-source                  Specify true if you would not like to keep the source file.
   --overwrite                      Specify true if you allow to overwrite the existing destination file.
   --file-mode uint                 The final file permission of the destination path. (default: Same to the source)

Custom Service

service command does this. You can distribute your apps to the defined service in the config file.

USAGE:
   splitter service [options]

OPTIONS:
   --source-path string, -f string                A path to an app file.
   --auth-token string, -t string                 The auth token to use for this distribution.
   --name string, -n string                       A service name in the config file.
   --header string [ --header string ]            Append <key>=<value> to headers
   --query-param string [ --query-param string ]  Append <key>=<value> to query parameters
   --form-param string [ --form-param string ]    Append <key>=<value> to form parameters

Deployment results

Every successful deployment, whether configuration-based or on-demand, is dumped into .splitter-dist/<run-name>/<name>.json so that the following commands in your sequence can consume it without parsing the stdout.

  • <run-name> is a UTC timestamp such as 20240101T091500Z unless --run-name is given.
  • <name> is a deployment name of the configuration-based command, otherwise a service name.
splitter deploy -n pull-request -f path/to/apk --run-name "pr-${GITHUB_PULL_NUMBER}"

install_url=$(jq -r '.release.install_url' ".splitter-dist/pr-${GITHUB_PULL_NUMBER}/pull-request.json")
OPTIONS:
   --dist-dir string  A base directory that deployment results are dumped into. (default: .splitter-dist) [$SPLITTER_DIST_DIR]
   --run-name string  A directory name of this execution under the dist directory. (default: the current timestamp) [$SPLITTER_RUN_NAME]

dist-dir is also configurable in your config file.

Schema

app and release are the normalized view of a response. Every field of them is nullable because no service exposes all of them. values is the parsed response of the service and raw is the response as-is.

{
  "service": "deploygate",
  "deployment": "pull-request",
  "run_name": "pr-1234",
  "deployed_at": "2024-01-01T09:15:00Z",
  "source_file_path": "path/to/apk",
  "app": {
    "name": "Example",
    "identifier": "com.example",
    "os": "android",
    "version_name": "1.0",
    "version_code": "1"
  },
  "release": {
    "install_url": "https://deploygate.com/distributions/xxxxx",
    "download_url": "https://deploygate.com/xxxxx",
    "destination_path": null,
    "release_note": "a release note"
  },
  "values": {},
  "raw": {}
}

About the supported services

LICENSE

splitter is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

About

App deployment splitter that distributes your apps to any mobile app distribution services like DeployGate and Firebase App Distribution

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages