Skip to content
This repository has been archived by the owner on Dec 21, 2024. It is now read-only.

Commit

Permalink
Testing build step
Browse files Browse the repository at this point in the history
  • Loading branch information
NathanFlurry committed Dec 24, 2023
1 parent 6bf2210 commit a2fa126
Show file tree
Hide file tree
Showing 8 changed files with 167 additions and 10 deletions.
9 changes: 2 additions & 7 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,6 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Install nix
uses: cachix/install-nix-action@v22
with:
nix_path: nixpkgs=channel:nixos-23.05

- name: Install Docker
if: startsWith(matrix.os, 'macos-')
run: |
Expand All @@ -42,11 +37,11 @@ jobs:
- name: Run cargo fmt
run: |
nix-shell --run "cargo fmt --all --check"
cargo fmt --all --check
- name: Run cargo test
run: |
nix-shell --run "cargo test"
cargo test
env:
RIVET_API_ENDPOINT: ${{ secrets.RIVET_API_ENDPOINT }}
RIVET_TOKEN: ${{ secrets.RIVET_TOKEN }}
Expand Down
121 changes: 121 additions & 0 deletions .github/workflows/tmp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
name: Test Workflow

permissions:
contents: write

on:
pull_request:

jobs:
# Run 'cargo dist plan' (or host) to determine what tasks we need to do
plan:
runs-on: ubuntu-latest
outputs:
val: ${{ steps.plan.outputs.manifest }}
tag: ${{ !github.event.pull_request && github.ref_name || '' }}
tag-flag: ${{ !github.event.pull_request && format('--tag={0}', github.ref_name) || '' }}
publishing: ${{ !github.event.pull_request }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install cargo-dist
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.5.0/cargo-dist-installer.sh | sh"
# sure would be cool if github gave us proper conditionals...
# so here's a doubly-nested ternary-via-truthiness to try to provide the best possible
# functionality based on whether this is a pull_request, and whether it's from a fork.
# (PRs run on the *source* but secrets are usually on the *target* -- that's *good*
# but also really annoying to build CI around when it needs secrets to work right.)
- id: plan
run: |
cargo dist ${{ !github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name) || (github.event.pull_request.head.repo.fork && 'plan' || 'host --steps=check') }} --output-format=json > dist-manifest.json
echo "cargo dist ran successfully"
cat dist-manifest.json
echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT"
- name: "Upload dist-manifest.json"
uses: actions/upload-artifact@v3
with:
name: artifacts
path: dist-manifest.json

# Build and packages all the platform-specific things
build-local-artifacts:
name: build-local-artifacts (${{ join(matrix.targets, ', ') }})
# Let the initial task tell us to not run (currently very blunt)
needs: plan
if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null && (needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload') }}
strategy:
fail-fast: false
# Target platforms/runners are computed by cargo-dist in create-release.
# Each member of the matrix has the following arguments:
#
# - runner: the github runner
# - dist-args: cli flags to pass to cargo dist
# - install-dist: expression to run to install cargo-dist on the runner
#
# Typically there will be:
# - 1 "global" task that builds universal installers
# - N "local" tasks that build each platform's binaries and platform-specific installers
matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }}
runs-on: ${{ matrix.runner }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: swatinem/rust-cache@v2
- name: Install cargo-dist
run: ${{ matrix.install_dist }}
# Get the dist-manifest
- name: Fetch local artifacts
uses: actions/download-artifact@v3
with:
name: artifacts
path: target/distrib/
- name: Install dependencies
run: |
${{ matrix.packages_install }}
- name: Build artifacts
run: |
# Actually do builds and make zips and whatnot
cargo dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json
echo "cargo dist ran successfully"
# Build and package all the platform-agnostic(ish) things
build-global-artifacts:
needs:
- plan
- build-local-artifacts
runs-on: "ubuntu-20.04"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_MANIFEST_NAME: target/distrib/dist-manifest.json
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install cargo-dist
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.5.0/cargo-dist-installer.sh | sh"
# Get all the local artifacts for the global tasks to use (for e.g. checksums)
- name: Fetch local artifacts
uses: actions/download-artifact@v3
with:
name: artifacts
path: target/distrib/
- id: cargo-dist
shell: bash
run: |
cargo dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json
echo "cargo dist ran successfully"
# Parse out what we just built and upload it to scratch storage
echo "paths<<EOF" >> "$GITHUB_OUTPUT"
jq --raw-output ".artifacts[]?.path | select( . != null )" dist-manifest.json >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
cp dist-manifest.json "$BUILD_MANIFEST_NAME"
19 changes: 19 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ installers = []
targets = ["x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-pc-windows-msvc"]
# Publish jobs to run in CI
pr-run-mode = "plan"
# We modify the CI script in order to use Nix shell
allow-dirty = ["ci"]

# generated by 'cargo dist init'
[profile.dist]
Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ cd cli
cargo build
```

By default, the CLI uses `protobuf-src` to build Protobuf from source. To build using predefined binaries, run:

```
cargo build --no-default-features
```

The executable will be available at _target/debug/rivet-cli_.
</details>

Expand Down
4 changes: 4 additions & 0 deletions cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ homepage = "https://rivet.gg"
repository = "https://github.com/rivet-gg/cli"
build = "build.rs"

[features]
default = ["protobuf-src"]

[dependencies]
# Disable less common file formats. Preserve TOML for backwards compatibility.
anyhow = "1.0"
Expand All @@ -27,6 +30,7 @@ humansize = "1.1"
ignore = "0.4"
lz4 = "1.24"
mime_guess = "2.0"
protobuf-src = { version = "1.1.0", optional = true }
rand = "0.8"
regex = "1.10"
reqwest = { version = "0.11", features = ["stream", "blocking"] }
Expand Down
7 changes: 7 additions & 0 deletions cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,13 @@ enum SubCommand {
}

fn main() -> ExitCode {
// Include protobuf binaries
#[cfg(feature = "protobuf-src")]
{
std::env::set_var("PROTOC", protobuf_src::protoc());
std::env::set_var("PROTOC_INCLUDE", protobuf_src::include());
}

// We use a sync main for Sentry. Read more: https://docs.sentry.io/platforms/rust/#async-main-function

// This has a 2 second deadline to flush any remaining events which is sufficient for
Expand Down
9 changes: 8 additions & 1 deletion shell.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
let
moz_overlay = import (builtins.fetchTarball "https://github.com/mozilla/nixpkgs-mozilla/archive/6eabade97bc28d707a8b9d82ad13ef143836736e.tar.gz");
pkgs = import <nixpkgs> { overlays = [ moz_overlay ]; };
pkgs = import (fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/refs/tags/23.05.tar.gz";
}) { overlays = [ moz_overlay ]; };
in
pkgs.mkShell {
name = "rivet-cli";
Expand All @@ -26,5 +28,10 @@ in
darwin.apple_sdk.frameworks.SystemConfiguration
]
);
shellHook = ''
# See https://docs.rs/prost-build/0.8.0/prost_build/#sourcing-protoc
export PROTOC="${pkgs.protobuf}/bin/protoc"
export PROTOC_INCLUDE="${pkgs.protobuf}/include"
'';
}

0 comments on commit a2fa126

Please sign in to comment.