CI (Work in progress): Use nix for building in CI
This commit is contained in:
		
							parent
							
								
									f1c784c79c
								
							
						
					
					
						commit
						e8a6ebafc2
					
				
					 13 changed files with 210 additions and 178 deletions
				
			
		
							
								
								
									
										37
									
								
								.woodpecker/agent-release.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.woodpecker/agent-release.yml
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
depends_on:
 | 
			
		||||
  - build
 | 
			
		||||
  - test
 | 
			
		||||
  - lint
 | 
			
		||||
 | 
			
		||||
when:
 | 
			
		||||
  - event: push
 | 
			
		||||
    branch:
 | 
			
		||||
      - ${CI_REPO_DEFAULT_BRANCH}
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
  BUILD_TARGET:
 | 
			
		||||
    - x86_64
 | 
			
		||||
    - aarch64
 | 
			
		||||
 | 
			
		||||
steps:
 | 
			
		||||
  build:
 | 
			
		||||
    image: nixos/nix:latest
 | 
			
		||||
    commands:
 | 
			
		||||
      - nix --extra-experimental-features "nix-command flakes" build ".#agent.${BUILD_TARGET}"
 | 
			
		||||
      - mkdir -p "dist/${BUILD_TARGET}-unknown-linux-musl"
 | 
			
		||||
      - cp result/bin/prymn_agent "dist/${BUILD_TARGET}-unknown-linux-musl/"
 | 
			
		||||
 | 
			
		||||
  release:
 | 
			
		||||
    image: woodpeckerci/plugin-s3
 | 
			
		||||
    settings:
 | 
			
		||||
      bucket: prymn-static
 | 
			
		||||
      region: auto
 | 
			
		||||
      endpoint:
 | 
			
		||||
        from_secret: R2_STATIC_ADDRESS
 | 
			
		||||
      access_key:
 | 
			
		||||
        from_secret: R2_DEPLOY_ACCESS_KEY
 | 
			
		||||
      secret_key:
 | 
			
		||||
        from_secret: R2_DEPLOY_SECRET_KEY
 | 
			
		||||
      source: dist/**/*
 | 
			
		||||
      target: /agent
 | 
			
		||||
      strip_prefix: dist/
 | 
			
		||||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ when:
 | 
			
		|||
      - ${CI_REPO_DEFAULT_BRANCH}
 | 
			
		||||
 | 
			
		||||
variables:
 | 
			
		||||
  - &rust_image 'git.nikos.gg/prymn/images/rust:1794cee2'
 | 
			
		||||
  - &rust_image 'git.nikos.gg/prymn/images/rust:33331dfc'
 | 
			
		||||
  - &elixir_image 'git.nikos.gg/prymn/images/elixir:1794cee2'
 | 
			
		||||
  - &cache_settings
 | 
			
		||||
      endpoint: https://75178f9eca227dea51b3db4db2c15a5a.r2.cloudflarestorage.com
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										19
									
								
								.woodpecker/get-prymn-release.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.woodpecker/get-prymn-release.yml
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
when:
 | 
			
		||||
  - event: push
 | 
			
		||||
    branch:
 | 
			
		||||
      - ${CI_REPO_DEFAULT_BRANCH}
 | 
			
		||||
 | 
			
		||||
steps:
 | 
			
		||||
  release:
 | 
			
		||||
    image: woodpeckerci/plugin-s3
 | 
			
		||||
    settings:
 | 
			
		||||
      bucket: prymn-static
 | 
			
		||||
      region: auto
 | 
			
		||||
      endpoint:
 | 
			
		||||
        from_secret: R2_STATIC_ADDRESS
 | 
			
		||||
      access_key:
 | 
			
		||||
        from_secret: R2_DEPLOY_ACCESS_KEY
 | 
			
		||||
      secret_key:
 | 
			
		||||
        from_secret: R2_DEPLOY_SECRET_KEY
 | 
			
		||||
      source: get_prymn.sh
 | 
			
		||||
      target: /agent
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ when:
 | 
			
		|||
      - ${CI_REPO_DEFAULT_BRANCH}
 | 
			
		||||
 | 
			
		||||
variables:
 | 
			
		||||
  - &rust_image 'git.nikos.gg/prymn/images/rust:1794cee2'
 | 
			
		||||
  - &rust_image 'git.nikos.gg/prymn/images/rust:33331dfc'
 | 
			
		||||
  - &elixir_image 'git.nikos.gg/prymn/images/elixir:1794cee2'
 | 
			
		||||
  - &when_elixir
 | 
			
		||||
    - path:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ services:
 | 
			
		|||
      - POSTGRES_PASSWORD=postgres
 | 
			
		||||
 | 
			
		||||
variables:
 | 
			
		||||
  - &rust_image 'git.nikos.gg/prymn/images/rust:1794cee2'
 | 
			
		||||
  - &rust_image 'git.nikos.gg/prymn/images/rust:33331dfc'
 | 
			
		||||
  - &elixir_image 'git.nikos.gg/prymn/images/elixir:1794cee2'
 | 
			
		||||
  - &cache_settings
 | 
			
		||||
      endpoint: https://75178f9eca227dea51b3db4db2c15a5a.r2.cloudflarestorage.com
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										140
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										140
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -95,28 +95,6 @@ version = "1.0.75"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "async-stream"
 | 
			
		||||
version = "0.3.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "async-stream-impl",
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "pin-project-lite",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "async-stream-impl"
 | 
			
		||||
version = "0.3.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.31",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "async-trait"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
| 
						 | 
				
			
			@ -391,17 +369,6 @@ version = "0.3.28"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-macro"
 | 
			
		||||
version = "0.3.28"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn 2.0.31",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-sink"
 | 
			
		||||
version = "0.3.28"
 | 
			
		||||
| 
						 | 
				
			
			@ -422,7 +389,6 @@ checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
 | 
			
		|||
dependencies = [
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "futures-io",
 | 
			
		||||
 "futures-macro",
 | 
			
		||||
 "futures-task",
 | 
			
		||||
 "memchr",
 | 
			
		||||
 "pin-project-lite",
 | 
			
		||||
| 
						 | 
				
			
			@ -563,20 +529,6 @@ dependencies = [
 | 
			
		|||
 "want",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "hyper-rustls"
 | 
			
		||||
version = "0.24.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "futures-util",
 | 
			
		||||
 "http",
 | 
			
		||||
 "hyper",
 | 
			
		||||
 "rustls",
 | 
			
		||||
 "tokio",
 | 
			
		||||
 "tokio-rustls",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "hyper-timeout"
 | 
			
		||||
version = "0.4.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -1063,7 +1015,6 @@ dependencies = [
 | 
			
		|||
 "http",
 | 
			
		||||
 "http-body",
 | 
			
		||||
 "hyper",
 | 
			
		||||
 "hyper-rustls",
 | 
			
		||||
 "ipnet",
 | 
			
		||||
 "js-sys",
 | 
			
		||||
 "log",
 | 
			
		||||
| 
						 | 
				
			
			@ -1071,37 +1022,18 @@ dependencies = [
 | 
			
		|||
 "once_cell",
 | 
			
		||||
 "percent-encoding",
 | 
			
		||||
 "pin-project-lite",
 | 
			
		||||
 "rustls",
 | 
			
		||||
 "rustls-pemfile",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "serde_urlencoded",
 | 
			
		||||
 "tokio",
 | 
			
		||||
 "tokio-rustls",
 | 
			
		||||
 "tower-service",
 | 
			
		||||
 "url",
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
 "wasm-bindgen-futures",
 | 
			
		||||
 "web-sys",
 | 
			
		||||
 "webpki-roots",
 | 
			
		||||
 "winreg",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ring"
 | 
			
		||||
version = "0.16.20"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cc",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
 "spin",
 | 
			
		||||
 "untrusted",
 | 
			
		||||
 "web-sys",
 | 
			
		||||
 "winapi",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustc-demangle"
 | 
			
		||||
version = "0.1.23"
 | 
			
		||||
| 
						 | 
				
			
			@ -1121,37 +1053,6 @@ dependencies = [
 | 
			
		|||
 "windows-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustls"
 | 
			
		||||
version = "0.21.7"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "log",
 | 
			
		||||
 "ring",
 | 
			
		||||
 "rustls-webpki",
 | 
			
		||||
 "sct",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustls-pemfile"
 | 
			
		||||
version = "1.0.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "base64",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustls-webpki"
 | 
			
		||||
version = "0.101.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "ring",
 | 
			
		||||
 "untrusted",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustversion"
 | 
			
		||||
version = "1.0.14"
 | 
			
		||||
| 
						 | 
				
			
			@ -1164,16 +1065,6 @@ version = "1.0.15"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "sct"
 | 
			
		||||
version = "0.7.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "ring",
 | 
			
		||||
 "untrusted",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde"
 | 
			
		||||
version = "1.0.188"
 | 
			
		||||
| 
						 | 
				
			
			@ -1270,12 +1161,6 @@ dependencies = [
 | 
			
		|||
 "windows-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "spin"
 | 
			
		||||
version = "0.5.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "strsim"
 | 
			
		||||
version = "0.10.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -1401,16 +1286,6 @@ dependencies = [
 | 
			
		|||
 "syn 2.0.31",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tokio-rustls"
 | 
			
		||||
version = "0.24.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "rustls",
 | 
			
		||||
 "tokio",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tokio-stream"
 | 
			
		||||
version = "0.1.14"
 | 
			
		||||
| 
						 | 
				
			
			@ -1443,7 +1318,6 @@ version = "0.9.2"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "async-stream",
 | 
			
		||||
 "async-trait",
 | 
			
		||||
 "axum",
 | 
			
		||||
 "base64",
 | 
			
		||||
| 
						 | 
				
			
			@ -1458,9 +1332,7 @@ dependencies = [
 | 
			
		|||
 "percent-encoding",
 | 
			
		||||
 "pin-project",
 | 
			
		||||
 "prost",
 | 
			
		||||
 "rustls-pemfile",
 | 
			
		||||
 "tokio",
 | 
			
		||||
 "tokio-rustls",
 | 
			
		||||
 "tokio-stream",
 | 
			
		||||
 "tower",
 | 
			
		||||
 "tower-layer",
 | 
			
		||||
| 
						 | 
				
			
			@ -1617,12 +1489,6 @@ dependencies = [
 | 
			
		|||
 "tinyvec",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "untrusted"
 | 
			
		||||
version = "0.7.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "url"
 | 
			
		||||
version = "2.4.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -1737,12 +1603,6 @@ dependencies = [
 | 
			
		|||
 "wasm-bindgen",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "webpki-roots"
 | 
			
		||||
version = "0.25.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "which"
 | 
			
		||||
version = "4.4.2"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								Vagrantfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Vagrantfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
# -*- mode: ruby -*-
 | 
			
		||||
# vi: set ft=ruby :
 | 
			
		||||
 | 
			
		||||
Vagrant.configure("2") do |config|
 | 
			
		||||
  # The most common configuration options are documented and commented below.
 | 
			
		||||
  # For a complete reference, please see the online documentation at
 | 
			
		||||
  # https://docs.vagrantup.com.
 | 
			
		||||
 | 
			
		||||
  config.vm.box = "debian/bullseye64"
 | 
			
		||||
  config.vm.network "forwarded_port", guest: 50012, host: 50012, host_ip: "127.0.0.1"
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -12,13 +12,13 @@ itertools = "0.11.0"
 | 
			
		|||
nix = "0.27.1"
 | 
			
		||||
once_cell = "1.18.0"
 | 
			
		||||
prost = "0.11.9"
 | 
			
		||||
reqwest = { version = "0.11.18", features = ["blocking", "rustls-tls", "json"], default-features = false }
 | 
			
		||||
reqwest = { version = "0.11.18", features = ["blocking", "json"], default-features = false }
 | 
			
		||||
serde = { version = "1.0.173", features = ["derive"] }
 | 
			
		||||
serde_json = "1.0.103"
 | 
			
		||||
sysinfo = { version = "0.29.2", default-features = false }
 | 
			
		||||
tokio = { version = "1.28.2", features = ["rt-multi-thread", "io-util", "process", "macros", "signal"] }
 | 
			
		||||
tokio-stream = { version = "0.1.14", features = ["net", "sync"] }
 | 
			
		||||
tonic = { version = "0.9.2", features = ["tls"] }
 | 
			
		||||
tonic = { version = "0.9.2" }
 | 
			
		||||
tower-http = { version = "0.4.3", features = ["trace"] }
 | 
			
		||||
tracing = "0.1.37"
 | 
			
		||||
tracing-subscriber = "0.3.17"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -131,7 +131,7 @@ defmodule Prymn.Servers do
 | 
			
		|||
    token
 | 
			
		||||
    |> Base.encode64()
 | 
			
		||||
    |> then(fn token ->
 | 
			
		||||
      "curl -sSfL " <> PrymnWeb.Endpoint.url() <> "/install | sh -s " <> token
 | 
			
		||||
      "wget -O- " <> PrymnWeb.Endpoint.url() <> "/install | sudo sh -s " <> token
 | 
			
		||||
    end)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										44
									
								
								flake.lock
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								flake.lock
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -1,5 +1,48 @@
 | 
			
		|||
{
 | 
			
		||||
  "nodes": {
 | 
			
		||||
    "crane": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "flake-compat": "flake-compat",
 | 
			
		||||
        "flake-utils": [
 | 
			
		||||
          "flake-utils"
 | 
			
		||||
        ],
 | 
			
		||||
        "nixpkgs": [
 | 
			
		||||
          "nixpkgs"
 | 
			
		||||
        ],
 | 
			
		||||
        "rust-overlay": [
 | 
			
		||||
          "rust-overlay"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1696384830,
 | 
			
		||||
        "narHash": "sha256-j8ZsVqzmj5sOm5MW9cqwQJUZELFFwOislDmqDDEMl6k=",
 | 
			
		||||
        "owner": "ipetkov",
 | 
			
		||||
        "repo": "crane",
 | 
			
		||||
        "rev": "f2143cd27f8bd09ee4f0121336c65015a2a0a19c",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "ipetkov",
 | 
			
		||||
        "repo": "crane",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flake-compat": {
 | 
			
		||||
      "flake": false,
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1696267196,
 | 
			
		||||
        "narHash": "sha256-AAQ/2sD+0D18bb8hKuEEVpHUYD1GmO2Uh/taFamn6XQ=",
 | 
			
		||||
        "owner": "edolstra",
 | 
			
		||||
        "repo": "flake-compat",
 | 
			
		||||
        "rev": "4f910c9827911b1ec2bf26b5a062cd09f8d89f85",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "edolstra",
 | 
			
		||||
        "repo": "flake-compat",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flake-utils": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "systems": "systems"
 | 
			
		||||
| 
						 | 
				
			
			@ -36,6 +79,7 @@
 | 
			
		|||
    },
 | 
			
		||||
    "root": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "crane": "crane",
 | 
			
		||||
        "flake-utils": "flake-utils",
 | 
			
		||||
        "nixpkgs": "nixpkgs",
 | 
			
		||||
        "rust-overlay": "rust-overlay"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										53
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								flake.nix
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -9,28 +9,39 @@
 | 
			
		|||
      inputs.nixpkgs.follows = "nixpkgs";
 | 
			
		||||
      inputs.flake-utils.follows = "flake-utils";
 | 
			
		||||
    };
 | 
			
		||||
    crane = {
 | 
			
		||||
      url = "github:ipetkov/crane";
 | 
			
		||||
      inputs.nixpkgs.follows = "nixpkgs";
 | 
			
		||||
      inputs.flake-utils.follows = "flake-utils";
 | 
			
		||||
      inputs.rust-overlay.follows = "rust-overlay";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  outputs = { self, nixpkgs, flake-utils, rust-overlay }: flake-utils.lib.eachDefaultSystem (system:
 | 
			
		||||
    let
 | 
			
		||||
      pkgs = import nixpkgs { inherit system overlays; };
 | 
			
		||||
      overlays = [ (import ./nix/overlay.nix) (import rust-overlay) ];
 | 
			
		||||
      scripts = pkgs.callPackage ./nix/scripts.nix { };
 | 
			
		||||
    in
 | 
			
		||||
    {
 | 
			
		||||
      devShells.default = with pkgs; mkShell {
 | 
			
		||||
        packages = [
 | 
			
		||||
          elixir
 | 
			
		||||
          elixir-ls
 | 
			
		||||
          rustToolchain
 | 
			
		||||
          protobuf
 | 
			
		||||
          protoc-gen-elixir
 | 
			
		||||
          scripts.prymn_db
 | 
			
		||||
        ] ++ lib.optionals stdenv.isLinux [ inotify-tools ];
 | 
			
		||||
  outputs = { self, nixpkgs, flake-utils, rust-overlay, crane }:
 | 
			
		||||
    flake-utils.lib.eachDefaultSystem (system:
 | 
			
		||||
      let
 | 
			
		||||
        pkgs = import nixpkgs { inherit system overlays; };
 | 
			
		||||
        overlays = [ (import ./nix/overlay.nix) (import rust-overlay) ];
 | 
			
		||||
        scripts = pkgs.callPackage ./nix/scripts.nix { };
 | 
			
		||||
        buildRust = buildTarget: pkgs.callPackage ./nix/rust.nix { inherit crane buildTarget; };
 | 
			
		||||
      in
 | 
			
		||||
      {
 | 
			
		||||
        devShells.default = with pkgs; mkShell {
 | 
			
		||||
          packages = [
 | 
			
		||||
            elixir
 | 
			
		||||
            elixir-ls
 | 
			
		||||
            rustToolchain
 | 
			
		||||
            protobuf
 | 
			
		||||
            protoc-gen-elixir
 | 
			
		||||
            scripts.prymn_db
 | 
			
		||||
          ] ++ lib.optionals stdenv.isLinux [ inotify-tools ];
 | 
			
		||||
 | 
			
		||||
        shellHook = ''
 | 
			
		||||
          export PROJECT_ROOT_DIR="$PWD"
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
    });
 | 
			
		||||
          shellHook = ''
 | 
			
		||||
            export PROJECT_ROOT_DIR="$PWD"
 | 
			
		||||
          '';
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        packages.agent.x86_64 = buildRust "x86_64-unknown-linux-musl";
 | 
			
		||||
        packages.agent.aarch64 = buildRust "aarch64-unknown-linux-musl";
 | 
			
		||||
      });
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										50
									
								
								get_prymn.sh
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								get_prymn.sh
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -6,11 +6,11 @@
 | 
			
		|||
 | 
			
		||||
set -u
 | 
			
		||||
 | 
			
		||||
ROOT_URL=${ROOT_URL:-"https://static.prymn.net/agent/dist"}
 | 
			
		||||
PRYMN_ROOT_URL=${PRYMN_ROOT_URL:-"https://static.prymn.net/agent"}
 | 
			
		||||
 | 
			
		||||
main() {
 | 
			
		||||
    if [ $# -eq 0 ]; then
 | 
			
		||||
        exit_error "missing command parameters. please make sure you copied the installation command correctly."
 | 
			
		||||
        exit_error "I was not called correctly. Please make sure you copied the installation command correctly."
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    check_user_is_root
 | 
			
		||||
| 
						 | 
				
			
			@ -24,9 +24,9 @@ main() {
 | 
			
		|||
    local dir
 | 
			
		||||
    dir="$(mktemp -d)"
 | 
			
		||||
    local file="${dir}/prymn_agent"
 | 
			
		||||
    local url="${ROOT_URL}/${arch}/prymn_agent"
 | 
			
		||||
    local url="${PRYMN_ROOT_URL}/${arch}/prymn_agent"
 | 
			
		||||
 | 
			
		||||
    printf "info: downloading prymn agent...\n" 1>&2
 | 
			
		||||
    info "Download the Prymn agent..."
 | 
			
		||||
 | 
			
		||||
    ensure download "${url}" "${file}"
 | 
			
		||||
    ensure chmod u+x "${file}"
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,11 @@ main() {
 | 
			
		|||
 | 
			
		||||
check_user_is_root() {
 | 
			
		||||
    if [ "$(id -u)" -ne 0 ]; then
 | 
			
		||||
        exit_error "this script must be run as the root user."
 | 
			
		||||
        exit_error "You must run me as the root user. For example you may execute:
 | 
			
		||||
 | 
			
		||||
  wget -O- <url> | sudo sh -s <token>
 | 
			
		||||
 | 
			
		||||
replace <url> and <token> with the ones provided in the server creation page."
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -90,9 +94,7 @@ check_os() {
 | 
			
		|||
    esac
 | 
			
		||||
 | 
			
		||||
    local arch clib kernel cputype
 | 
			
		||||
    # TODO: check for musl (probably not be needed because we support distros
 | 
			
		||||
    # that don't use it)
 | 
			
		||||
    clib="gnu"
 | 
			
		||||
    clib="musl"
 | 
			
		||||
    kernel="$(uname -s)"
 | 
			
		||||
    cputype="$(uname -m)"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -124,19 +126,45 @@ check_os() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
download() {
 | 
			
		||||
    local download
 | 
			
		||||
    if command -v curl > /dev/null; then
 | 
			
		||||
        download="curl -sSfL $1 -o $2"
 | 
			
		||||
    elif command -v wget > /dev/null; then
 | 
			
		||||
        download="wget -O $2 $1"
 | 
			
		||||
    else
 | 
			
		||||
        exit_error "No downloader found in your system. Please install either 'wget' or 'curl'."
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    local err
 | 
			
		||||
    err=$(curl -sSfL "$1" -o "$2" 2>&1)
 | 
			
		||||
    err=$("$download" 2>&1)
 | 
			
		||||
    if [ -n "$err" ]; then
 | 
			
		||||
        exit_error "$err"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check_downloader() {
 | 
			
		||||
    local downloader
 | 
			
		||||
    if command -v curl > /dev/null; then
 | 
			
		||||
        downloader="curl -sSfL"
 | 
			
		||||
    elif command -v wget > /dev/null; then
 | 
			
		||||
        downloader="wget -O-"
 | 
			
		||||
    else
 | 
			
		||||
        exit_error "No downloader found in your system. Please install either 'wget' or 'curl'."
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RETURN_VALUE="${downloader}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
info() {
 | 
			
		||||
    printf "%s\n" "$1" 1>&2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
warning() {
 | 
			
		||||
    printf "warning: %s\n" "$1" >&2
 | 
			
		||||
    printf "Warning: %s\n" "$1" >&2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exit_error() {
 | 
			
		||||
    printf "error: %s\n" "$1" >&2
 | 
			
		||||
    printf "Error: %s\n" "$1" >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								nix/rust.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								nix/rust.nix
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
{ pkgs
 | 
			
		||||
, crane
 | 
			
		||||
, buildTarget ? "x86_64-unknown-linux-musl"
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  craneLib = (crane.mkLib pkgs).overrideToolchain pkgs.rustToolchain;
 | 
			
		||||
  buildInputs = [ pkgs.protobuf ];
 | 
			
		||||
  doCheck = false;
 | 
			
		||||
  src = pkgs.lib.cleanSourceWith {
 | 
			
		||||
    src = craneLib.path ../.;
 | 
			
		||||
    filter = path: type:
 | 
			
		||||
      (craneLib.filterCargoSources path type) ||
 | 
			
		||||
      (builtins.match ".*proto$" path != null);
 | 
			
		||||
  };
 | 
			
		||||
in
 | 
			
		||||
craneLib.buildPackage {
 | 
			
		||||
  inherit src doCheck buildInputs;
 | 
			
		||||
 | 
			
		||||
  CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static -C linker=rust-lld";
 | 
			
		||||
  CARGO_BUILD_TARGET = buildTarget;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in a new issue