first commit
This commit is contained in:
		
							
								
								
									
										1
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/target
 | 
				
			||||||
							
								
								
									
										61
									
								
								.github/workflows/build-version.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								.github/workflows/build-version.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: "Version build"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					    tags:
 | 
				
			||||||
 | 
					      - "v*.*.*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  build:
 | 
				
			||||||
 | 
					    runs-on: ${{ matrix.os }}
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      fail-fast: false
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        include:
 | 
				
			||||||
 | 
					          - os: ubuntu-latest
 | 
				
			||||||
 | 
					            target: x86_64-unknown-linux-gnu
 | 
				
			||||||
 | 
					          - os: macos-latest
 | 
				
			||||||
 | 
					            target: x86_64-apple-darwin
 | 
				
			||||||
 | 
					          - os: macos-latest
 | 
				
			||||||
 | 
					            target: aarch64-apple-darwin
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: actions-rs/toolchain@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          toolchain: stable
 | 
				
			||||||
 | 
					          target: ${{ matrix.target }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: actions-rs/cargo@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          command: build
 | 
				
			||||||
 | 
					          args: --release --all-features --target=${{ matrix.target }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Archive build artifacts
 | 
				
			||||||
 | 
					        uses: actions/upload-artifact@v2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          name: build-${{matrix.target}}
 | 
				
			||||||
 | 
					          path: ${{  github.workspace  }}/target/${{ matrix.target }}/release/clin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  release:
 | 
				
			||||||
 | 
					    needs: build
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Download artifact
 | 
				
			||||||
 | 
					        uses: actions/download-artifact@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Set version variable
 | 
				
			||||||
 | 
					        run: echo "CLIN_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Rename release to avoid name conflict
 | 
				
			||||||
 | 
					        run: ./scripts/rename_releases.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Release
 | 
				
			||||||
 | 
					        uses: softprops/action-gh-release@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          files: release/*
 | 
				
			||||||
							
								
								
									
										53
									
								
								.github/workflows/container-stable.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								.github/workflows/container-stable.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: "Stable container"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					    branches:
 | 
				
			||||||
 | 
					      - main
 | 
				
			||||||
 | 
					    paths:
 | 
				
			||||||
 | 
					      - "src/**"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  containerization:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Set action link variable
 | 
				
			||||||
 | 
					        run: echo "LINK=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Set up QEMU
 | 
				
			||||||
 | 
					        uses: docker/setup-qemu-action@master
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          platforms: all
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Set up Docker Buildx
 | 
				
			||||||
 | 
					        id: buildx
 | 
				
			||||||
 | 
					        uses: docker/setup-buildx-action@master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Login to GitHub Container Registry
 | 
				
			||||||
 | 
					        uses: docker/login-action@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          registry: ghcr.io
 | 
				
			||||||
 | 
					          username: ${{ github.repository_owner }}
 | 
				
			||||||
 | 
					          password: ${{ secrets.CR_PAT }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Build
 | 
				
			||||||
 | 
					        uses: docker/build-push-action@v2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          builder: ${{ steps.buildx.outputs.name }}
 | 
				
			||||||
 | 
					          context: .
 | 
				
			||||||
 | 
					          file: ./Dockerfile
 | 
				
			||||||
 | 
					          platforms: linux/amd64,linux/arm64
 | 
				
			||||||
 | 
					          push: true
 | 
				
			||||||
 | 
					          tags: |
 | 
				
			||||||
 | 
					            ghcr.io/allanger/${{ env.GITHUB_REPOSITORY }}:stable
 | 
				
			||||||
 | 
					            ghcr.io/allanger/${{ env.GITHUB_REPOSITORY }}:latest
 | 
				
			||||||
 | 
					          labels: |
 | 
				
			||||||
 | 
					            action_id=${{ github.action }}
 | 
				
			||||||
 | 
					            action_link=${{ env.LINK }}
 | 
				
			||||||
 | 
					            actor=${{ github.actor }}
 | 
				
			||||||
 | 
					            sha=${{ github.sha }}
 | 
				
			||||||
 | 
					            ref=${{ github.ref }}
 | 
				
			||||||
							
								
								
									
										53
									
								
								.github/workflows/container-version.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								.github/workflows/container-version.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: "Version container"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					    tags:
 | 
				
			||||||
 | 
					      - "v*.*.*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  containerization:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Set version variable
 | 
				
			||||||
 | 
					        run: echo "TAG=${GITHUB_REF##*/}" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Set action link variable
 | 
				
			||||||
 | 
					        run: echo "LINK=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Set up QEMU
 | 
				
			||||||
 | 
					        uses: docker/setup-qemu-action@master
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          platforms: all
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Set up Docker Buildx
 | 
				
			||||||
 | 
					        id: buildx
 | 
				
			||||||
 | 
					        uses: docker/setup-buildx-action@master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Login to GitHub Container Registry
 | 
				
			||||||
 | 
					        uses: docker/login-action@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          registry: ghcr.io
 | 
				
			||||||
 | 
					          username: ${{ github.repository_owner }}
 | 
				
			||||||
 | 
					          password: ${{ secrets.CR_PAT }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Build
 | 
				
			||||||
 | 
					        uses: docker/build-push-action@v2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          builder: ${{ steps.buildx.outputs.name }}
 | 
				
			||||||
 | 
					          context: .
 | 
				
			||||||
 | 
					          file: ./Dockerfile
 | 
				
			||||||
 | 
					          platforms: linux/amd64,linux/arm64
 | 
				
			||||||
 | 
					          push: true
 | 
				
			||||||
 | 
					          tags: |
 | 
				
			||||||
 | 
					            ghcr.io/allanger/${{ env.GITHUB_REPOSITORY }}:${{ env.TAG }}
 | 
				
			||||||
 | 
					          labels: |
 | 
				
			||||||
 | 
					            action_id=${{ github.action }}
 | 
				
			||||||
 | 
					            action_link=${{ env.LINK }}
 | 
				
			||||||
 | 
					            actor=${{ github.actor }}
 | 
				
			||||||
 | 
					            sha=${{ github.sha }}
 | 
				
			||||||
 | 
					            ref=${{ github.ref }}
 | 
				
			||||||
							
								
								
									
										57
									
								
								.github/workflows/tests.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								.github/workflows/tests.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: "Tests"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  pull_request:
 | 
				
			||||||
 | 
					    branches:
 | 
				
			||||||
 | 
					      - main
 | 
				
			||||||
 | 
					    paths:
 | 
				
			||||||
 | 
					      - "src/**"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  cargo_udeps:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: actions-rs/toolchain@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          toolchain: nightly
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Install cargo-udeps
 | 
				
			||||||
 | 
					        run: cargo install cargo-udeps --locked
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Check dependencies
 | 
				
			||||||
 | 
					        run: cargo +nightly udeps
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  cargo_test:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: actions-rs/toolchain@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          toolchain: stable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: actions-rs/cargo@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          command: build
 | 
				
			||||||
 | 
					          args: --release --all-features
 | 
				
			||||||
 | 
					      - run: cargo test
 | 
				
			||||||
 | 
					  cargo_clippy:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: actions-rs/toolchain@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          toolchain: stable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: actions-rs/cargo@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          command: build
 | 
				
			||||||
 | 
					          args: --release --all-features
 | 
				
			||||||
 | 
					      - run: cargo clippy
 | 
				
			||||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/target
 | 
				
			||||||
							
								
								
									
										1337
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1337
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										15
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					[package]
 | 
				
			||||||
 | 
					name = "clin"
 | 
				
			||||||
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					edition = "2021"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[dependencies]
 | 
				
			||||||
 | 
					clap = { version = "4.1.1", features = ["derive", "env"] }
 | 
				
			||||||
 | 
					handlebars = "4.3.1"
 | 
				
			||||||
 | 
					env_logger = "0.10.0"
 | 
				
			||||||
 | 
					log = "0.4.17"
 | 
				
			||||||
 | 
					http = "0.2.8"
 | 
				
			||||||
 | 
					serde = { version = "1.0.126", features = ["derive"] }
 | 
				
			||||||
 | 
					reqwest = { version = "0.11", features = ["json", "blocking"] }
 | 
				
			||||||
							
								
								
									
										12
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					FROM rust:1.66.1-alpine3.17 as builder
 | 
				
			||||||
 | 
					WORKDIR /src
 | 
				
			||||||
 | 
					RUN apk update && apk add --no-cache libressl-dev musl-dev gcc
 | 
				
			||||||
 | 
					COPY ./ .
 | 
				
			||||||
 | 
					RUN cargo build --release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM alpine:3.17.1
 | 
				
			||||||
 | 
					COPY --from=builder /src/target/release/clin /bin/clin
 | 
				
			||||||
 | 
					RUN apk update && apk add openssl --no-cache
 | 
				
			||||||
 | 
					WORKDIR /workdir
 | 
				
			||||||
 | 
					ENTRYPOINT ["/bin/clin"]
 | 
				
			||||||
							
								
								
									
										50
									
								
								scripts/download_clin.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								scripts/download_clin.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					case "$(uname)" in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"Darwin")
 | 
				
			||||||
 | 
					  SYSTEM="apple-darwin"
 | 
				
			||||||
 | 
					  case $(uname -m) in
 | 
				
			||||||
 | 
					  "arm64")
 | 
				
			||||||
 | 
					    TARGET="aarch64-$SYSTEM"
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					  "x86_64")
 | 
				
			||||||
 | 
					    TARGET="x86_64-$SYSTEM"
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					  *)
 | 
				
			||||||
 | 
					    echo "Unsuported target"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					  esac
 | 
				
			||||||
 | 
					  ;;
 | 
				
			||||||
 | 
					"Linux")
 | 
				
			||||||
 | 
					  SYSTEM="unknown-linux-gnu"
 | 
				
			||||||
 | 
					  case $(uname -m) in
 | 
				
			||||||
 | 
					  "x86_64")
 | 
				
			||||||
 | 
					    TARGET="x86_64-$SYSTEM"
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					  *)
 | 
				
			||||||
 | 
					    echo "Unsuported target"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					  esac
 | 
				
			||||||
 | 
					  ;;
 | 
				
			||||||
 | 
					*)
 | 
				
			||||||
 | 
					  echo "Signal number $1 is not processed"
 | 
				
			||||||
 | 
					  exit 1
 | 
				
			||||||
 | 
					  ;;
 | 
				
			||||||
 | 
					esac
 | 
				
			||||||
 | 
					LATEST_VERSION="v$(curl -s https://raw.githubusercontent.com/allanger/clever-install/main/Cargo.toml | awk -F ' = ' '$1 ~ /version/ { gsub(/[\"]/, "", $2); printf("%s",$2); exit}')"
 | 
				
			||||||
 | 
					echo "Downloading $LATEST_VERSION"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RELEASE_NAME=clin-$LATEST_VERSION-$TARGET
 | 
				
			||||||
 | 
					RELEASE_URL="https://github.com/allanger/clever-install/releases/download/$LATEST_VERSION/$RELEASE_NAME"
 | 
				
			||||||
 | 
					echo "Link for downloading: $RELEASE_URL"
 | 
				
			||||||
 | 
					curl -LJO $RELEASE_URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mv $RELEASE_NAME clin
 | 
				
			||||||
 | 
					chmod +x clin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo 'Make sure that clin is in your $PATH'
 | 
				
			||||||
 | 
					echo 'Try: '
 | 
				
			||||||
 | 
					echo ' $ export PATH=$PATH:$PWD'
 | 
				
			||||||
 | 
					echo ' $ clin -h'
 | 
				
			||||||
							
								
								
									
										10
									
								
								scripts/rename_releases.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								scripts/rename_releases.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					echo 'renaming clin to clin-$VERSION-$SYSTEM format'
 | 
				
			||||||
 | 
					mkdir -p release
 | 
				
			||||||
 | 
					echo "version - $clin_VERSION"
 | 
				
			||||||
 | 
					for BUILD in build*; do
 | 
				
			||||||
 | 
					  SYSTEM=$(echo $BUILD | sed -e 's/build-//g')
 | 
				
			||||||
 | 
					  echo "system - $SYSTEM"
 | 
				
			||||||
 | 
					  cp $BUILD/clin release/clin-$CLIN_VERSION-$SYSTEM
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					ls release
 | 
				
			||||||
							
								
								
									
										68
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					use clap::Parser;
 | 
				
			||||||
 | 
					use handlebars::Handlebars;
 | 
				
			||||||
 | 
					use http::{StatusCode};
 | 
				
			||||||
 | 
					use log::{error, info};
 | 
				
			||||||
 | 
					use serde::{Deserialize, Serialize};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use std::{
 | 
				
			||||||
 | 
					    env::consts::{ARCH, OS},
 | 
				
			||||||
 | 
					    fs::File,
 | 
				
			||||||
 | 
					    io,
 | 
				
			||||||
 | 
					    process::exit,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Check you helm releaseas managed by Argo
 | 
				
			||||||
 | 
					#[derive(Parser)]
 | 
				
			||||||
 | 
					#[clap(author = "allanger <allanger@zohomail.com>", version, about, long_about = None)]
 | 
				
			||||||
 | 
					struct Args {
 | 
				
			||||||
 | 
					    /// A templated link for downloading
 | 
				
			||||||
 | 
					    #[clap(short, long, env = "CLIN_LINK")]
 | 
				
			||||||
 | 
					    link_template: String,
 | 
				
			||||||
 | 
					    /// Version that you want to download
 | 
				
			||||||
 | 
					    #[clap(short, long, env = "CLIN_VERSION")]
 | 
				
			||||||
 | 
					    package_version: String,
 | 
				
			||||||
 | 
					    /// Path to download
 | 
				
			||||||
 | 
					    #[clap(short, long, env = "CLIN_PATH")]
 | 
				
			||||||
 | 
					    install_path: String,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Clone, Serialize, Deserialize)]
 | 
				
			||||||
 | 
					struct Values {
 | 
				
			||||||
 | 
					    version: String,
 | 
				
			||||||
 | 
					    os: String,
 | 
				
			||||||
 | 
					    arch: String,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn main() {
 | 
				
			||||||
 | 
					    env_logger::init();
 | 
				
			||||||
 | 
					    let args = Args::parse();
 | 
				
			||||||
 | 
					    let mut reg = Handlebars::new();
 | 
				
			||||||
 | 
					    reg.register_template_string("download_link", args.link_template)
 | 
				
			||||||
 | 
					        .unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let archs: Vec<String> = match ARCH {
 | 
				
			||||||
 | 
					        "x86_64" => vec!["x86_64".to_string(), "amd64".to_string()],
 | 
				
			||||||
 | 
					        "aarch64" => vec!["aarch64".to_string(), "arm64".to_string()],
 | 
				
			||||||
 | 
					        _ => {
 | 
				
			||||||
 | 
					            error!("Unknown architecture");
 | 
				
			||||||
 | 
					            exit(1);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for arch in archs {
 | 
				
			||||||
 | 
					        let version = args.package_version.clone();
 | 
				
			||||||
 | 
					        let os = OS.to_string();
 | 
				
			||||||
 | 
					        let values = Values { arch, os, version };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let link = reg.render("download_link", &values).unwrap();
 | 
				
			||||||
 | 
					        info!("Trying to download from {}", link.clone());
 | 
				
			||||||
 | 
					        let mut resp = reqwest::blocking::get(link).unwrap();
 | 
				
			||||||
 | 
					        if resp.status() == StatusCode::OK {
 | 
				
			||||||
 | 
					            info!("Response is 200, I'll try to download");
 | 
				
			||||||
 | 
					            let mut out = File::create(args.install_path).expect("failed to create file");
 | 
				
			||||||
 | 
					            io::copy(&mut resp, &mut out).expect("failed to copy content");
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        info!("Will try another name for arch, because response is not 200");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user