release_updater
This package brings a simple way to automatically update release/installation files in a local directory.
It also comes with built-in CLI tools to easily generate a release bundle (Zip file) or serve release files for multiple platforms.
Motivation
Since Dart can run in many native platforms (Linux/x64, macOS/x64/arm64, Windows/x86),
it's not simple to manage all the different releases
+platforms
files that a
compiled Dart application can have.
In the same way that modern Browsers, and many other applications, can have automatic builds and updates for multiple platforms, this package provides tools and an API to easily achieve that.
API Documentation
See the API Documentation for a full list of functions, classes and extension.
Usage
import 'dart:io';
import 'package:release_updater/release_updater_io.dart';
void main() async {
var storage = ReleaseStorageDirectory('appx', Directory('/install/path'));
var provider = ReleaseProviderHttp.baseURL('https://your.domain/appx/releases');
var releaseUpdater = ReleaseUpdater(storage, provider);
var version = await releaseUpdater.update();
print('» Updated to version: $version');
var runResult = await releaseUpdater.runReleaseProcess('run.exe', ['-a']);
var exitCode = runResult!.exitCode;
print('» Exit code: $exitCode');
print('» Result: ${runResult.stdout}');
exit(exitCode);
}
ReleaseProvider
You can implement your own ReleaseProvider
or use just the built-in ReleaseProviderHttp class.
CLI Tools
-
release_updater
: ACLI
updater. -
release_updater_server
: A simple HTTP server to provide releases using the shelf package.
release_updater
The release_updater
is a CLI for the ReleaseUpdater class.
To build a release:
$> release_packer release_packer.json build ./source-dir ./releases-dir -Pupload-url=http://your-server:8090/ -Pupload-user=userx -Pupload-pass=pass123
- The
-P
arguments are properties to the JSON configuration file (see%UPLOAD_URL%
below).
Example of a release_packer.json
file:
{
"name": "appx",
"version_from": "pubspec.yaml",
"prepare": [
"dart_pub_get",
{"dart_compile_exe": "bin/foo.dart"},
{"windows_gui": "bin/foo.exe"}
],
"finalize": [
{"rm": "bin/foo.exe"},
{
"upload_release": {
"url": "%UPLOAD_URL%",
"authorization": {
"user": "%UPLOAD_USER%",
"pass": "%UPLOAD_PASS%"
}
}
}
],
"files": [
"README.md",
{"hello.txt": "hello-world.txt"},
{"bin/foo.exe": "."},
{"libfoo-arm64.dylib": ".", "platform": "^macos-arm64$"},
{"libfoo-x64.dylib": ".", "platform": "^macos-x64$"},
{"libfoo.so": ".", "platform": "^linux.*$"},
{"libfoo.dll": ".", "platform": "^windows.*$"}
]
}
JSON Format:
-
name
: the application name, for the Release name. -
version
: the version of the Release. -
version_from
: theJSON
orYAML
file to provide the fieldversion
(if the parameterfield
is not provided). -
platform
: is aRegExp
string to match the building platform. See the ReleasePlatform class. -
Command types:
dart_pub_get
: performs adart pub get
.dart_compile_exe
: performs adart compile exe %dart_script
.dart
: performs adart %command
.windows_gui
: Changes an executable Windows Subsistem toGUI
.command
: performs a shell%command
.rm
: Deletes a file.upload_release
: uploads the generated release.url
: release server base URL.authorization
: HTTP basic authorization.username
: authentication username.password
: authentication password.
-
files
: each entry offiles
can be:- A
String
with a file path:"file/path.txt"
- A
Map
with extra parameters:- A file with a renamed path and a specific platform.
{"source/file/path.txt": "release/file/path", "platform": "^regexp"}
- A file without rename it:
{"source/file/path.txt": "."}
- A directory tree:
{"lib/resources/": "packages/pack_name/resources/"}
- A file from a
dart_compile_exe
command:{"bin/client.exe": "client.exe", "dart_compile_exe": "bin/client.dart"}
- A Windows executable file with the Windows Subsistem set to
GUI
:{"bin/client.exe": "client.exe", "windows_gui": true}
- A file with a renamed path and a specific platform.
- A
release_updater_server
To serve a release directory:
$> release_updater_server releases-server-config.json
Config file:
{
"releases-directory": "/path/to/releases",
"port": 8090,
"address": "0.0.0.0",
"upload-user": "userx",
"upload-pass": "123456"
}
- If the properties
upload-user
andupload-pass
(with length>= 6
) are defined, upload of files will be allowed.- All files are saved in the
releases-directory
without any sub-directory. - Upload errors can block an
IP
for 30min.
- All files are saved in the
- A high volume of requests can block an
IP
for 2min.
Source
The official source code is hosted @ GitHub:
Features and bugs
Please file feature requests and bugs at the issue tracker.
Contribution
Any help from the open-source community is always welcome and needed:
- Found an issue?
- Please fill a bug report with details.
- Wish a feature?
- Open a feature request with use cases.
- Are you using and liking the project?
- Promote the project: create an article, do a post or make a donation.
- Are you a developer?
- Fix a bug and send a pull request.
- Implement a new feature, like other training algorithms and activation functions.
- Improve the Unit Tests.
- Have you already helped in any way?
- Many thanks from me, the contributors and everybody that uses this project!
If you donate 1 hour of your time, you can contribute a lot, because others will do the same, just be part and start with your 1 hour.
Author
Graciliano M. Passos: gmpassos@GitHub.
License
Libraries
- release_packer
- Release Updater Packer Library.
- release_packer_gcs
- Release Updater Packer Library + GCS support.
- release_updater
- Release Updater Library.
- release_updater_io
- Release Updater Library (for dart:io).
- release_utility
- Release Updater Utility Library.