GithubHelp home page GithubHelp logo

booyaa / rust-everywhere Goto Github PK

View Code? Open in Web Editor NEW

This project forked from japaric-archived/rust-everywhere

0.0 1.0 0.0 110 KB

Use CI services to generate binary releases of your Rust program for Linux, Mac and Windows

License: Apache License 2.0

Rust 6.82% Shell 93.18%

rust-everywhere's Introduction

Travis Appveyor

rust-everywhere

Use CI services to generate binary releases of your Rust program for Linux, Mac and Windows

This repository has configured Travis CI and AppVeyor to generate binary releases, in both tarball/zipfile and deb (*) format, of a Cargo project (in this example, a variation of hello world) for all the tier 1 platforms and some lower tier platforms whenever a new git tag is pushed.

(*) .deb support is minimal right now: you can only package binaries and not, for example, store information about dependencies. If you need more features in this area open an issue to let me know!

Supported targets

The current CI configuration builds, tests and generates binary releases for the following targets:

  • aarch64-unknown-linux-gnu. (Linux on 64-bit ARM) WARNING Experimental target. Tests are executed using qemu user emulation, but this approach has problems when too many threads are spawned.
  • armv7-unknown-linux-gnueabihf (Linux on 32-bit ARM). WARNING Experimental target. Tests are executed using qemu user emulation, but this approach has problems when too many threads are spawned.
  • i686-apple-darwin (32-bit OSX)
  • i686-pc-windows-gnu (32-bit Windows, MinGW)
  • i686-pc-windows-msvc (32-bit Windows, MSVC)
  • i686-unknown-linux-gnu (32-bit Linux)
  • i686-unknown-linux-musl. (32-bit Linux, statically linked binaries)
  • x86_64-apple-darwin (64-bit OSX)
  • x86_64-pc-windows-gnu (64-bit Windows, MinGW)
  • x86_64-pc-windows-msvc (64-bit Windows, MSVC)
  • x86_64-unknown-linux-gnu (64-bit Linux)
  • x86_64-unknown-linux-musl. (64-bit Linux, statically linked binaries)

How to use

You can use this CI configuration, as a starting point, in your project by copying the .travis.yml and appveyor.yml files and the ci directory in your project repository. And then customizing the configuration for your needs by implementing all the TODOs contained in those files.

All these aspects can be configured:

  • Test on any combinations of these channels: stable, beta and nightly.
  • Deploy on one of these channels: stable, beta and nightly.
  • The contents of the release tarball/zipfile
  • CI phases like install and script
  • Metadata of the .deb packages.

Once configured, simply push a new git tag to build a new binary release:

$ git tag v1.2.3
$ git push --tags

You should see the release tarballs/zipfiles under your project's 'releases' page.

How do I install/uninstall these binary releases?

Examples:

Tarball/zipfiles

# Install
$ curl -OL https://github.com/japaric/rust-everywhere/releases/download/v0.1.41/rust-everywhere-v0.1.41-x86_64-unknown-linux-gnu.tar.gz
$ tar xzf rust-everywhere-v0.1.41-x86_64-unknown-linux-gnu.tar.gz
$ sudo cp hello /usr/local/bin/

# Test the program
$ hello
0.1.41: x86_64-unknown-linux-gnu says hello!
Compiled with rust-1.8.0 (Stable channel)

# Uninstall
$ sudo rm /usr/local/bin/hello

.deb packages

# Install
$ curl -OL https://github.com/japaric/rust-everywhere/releases/download/v0.1.41/rust-everywhere-v0.1.41-x86_64-unknown-linux-gnu.deb
$ dpkg -i rust-everywhere-v0.1.41-x86_64-unknown-linux-gnu.deb
Selecting previously unselected package rust-everywhere.
(Reading database ... 12398 files and directories currently installed.)
Preparing to unpack rust-everywhere-v0.1.41-x86_64-unknown-linux-gnu.deb ...
Unpacking rust-everywhere (0.1.41) ...
Setting up rust-everywhere (0.1.41) ...

# Test the program
$ hello
0.1.41: x86_64-unknown-linux-gnu says hello!
Compiled with rust-1.8.0 (Stable channel)

# Uninstall
# dpkg -r rust-everywhere
(Reading database ... 12399 files and directories currently installed.)
Removing rust-everywhere (0.1.41) ...

Using a binary release with Travis CI

If you want to use a binary release generated by rust-everywhere (to save time by not having to call cargo install) on a Travis build job, you can use the install.sh script contained in this repository and use it like this in your Travis configuration:

install:
  - curl -sf "https://raw.githubusercontent.com/japaric/rust-everywhere/master/install.sh" | bash -s -- --from azerupi/mdBook --tag 0.0.11-rc1

Check the script for more information about its usage. The script is not very good at handling errors so use it with care ;-).

Known issues

  • The Cargo project must be hosted on GitHub. I know GitLab also has a "releases" feature but I don't know if it can be integrated with Travis CI and/or AppVeyor. AFAICT Bitbucket has no "releases" equivalent. And IDK about other git hosting solutions.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

rust-everywhere's People

Watchers

Mark Sta Ana avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.