From 6d17814a6322b227414a719a62ccc50834bd97c3 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 16 Jan 2023 18:34:21 +0100 Subject: [PATCH] Add ci/cd --- .github/workflows/build-version.yaml | 61 ++++++++++++++++++++++++ .github/workflows/container-stable.yaml | 53 ++++++++++++++++++++ .github/workflows/container-version.yaml | 53 ++++++++++++++++++++ .github/workflows/tests.yaml | 57 ++++++++++++++++++++++ scripts/download_cdh.sh | 50 +++++++++++++++++++ scripts/rename_releases.sh | 10 ++++ 6 files changed, 284 insertions(+) create mode 100644 .github/workflows/build-version.yaml create mode 100644 .github/workflows/container-stable.yaml create mode 100644 .github/workflows/container-version.yaml create mode 100644 .github/workflows/tests.yaml create mode 100755 scripts/download_cdh.sh create mode 100755 scripts/rename_releases.sh diff --git a/.github/workflows/build-version.yaml b/.github/workflows/build-version.yaml new file mode 100644 index 0000000..2bca855 --- /dev/null +++ b/.github/workflows/build-version.yaml @@ -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/cdh + + 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 "CDH_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/* diff --git a/.github/workflows/container-stable.yaml b/.github/workflows/container-stable.yaml new file mode 100644 index 0000000..9189fff --- /dev/null +++ b/.github/workflows/container-stable.yaml @@ -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 }} diff --git a/.github/workflows/container-version.yaml b/.github/workflows/container-version.yaml new file mode 100644 index 0000000..d40f07e --- /dev/null +++ b/.github/workflows/container-version.yaml @@ -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 }} diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..b991a9b --- /dev/null +++ b/.github/workflows/tests.yaml @@ -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 diff --git a/scripts/download_cdh.sh b/scripts/download_cdh.sh new file mode 100755 index 0000000..3d47749 --- /dev/null +++ b/scripts/download_cdh.sh @@ -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/check-da-helm/main/Cargo.toml | awk -F ' = ' '$1 ~ /version/ { gsub(/[\"]/, "", $2); printf("%s",$2) }')" +echo "Downloading $LATEST_VERSION" + +RELEASE_NAME=cdh-$LATEST_VERSION-$TARGET +RELEASE_URL="https://github.com/allanger/check-da-helm/releases/download/$LATEST_VERSION/$RELEASE_NAME" +echo "Link for downloading: $RELEASE_URL" +curl -LJO $RELEASE_URL + +mv $RELEASE_NAME cdh +chmod +x cdh + +echo 'Make sure that cdh is in your $PATH' +echo 'Try: ' +echo ' $ export PATH=$PATH:$PWD' +echo ' $ cdh -h' \ No newline at end of file diff --git a/scripts/rename_releases.sh b/scripts/rename_releases.sh new file mode 100755 index 0000000..02f42b3 --- /dev/null +++ b/scripts/rename_releases.sh @@ -0,0 +1,10 @@ +#!/bin/bash +echo 'renaming cdh to cdh-$VERSION-$SYSTEM format' +mkdir -p release +echo "version - $CDH_VERSION" +for BUILD in build*; do + SYSTEM=$(echo $BUILD | sed -e 's/build-//g') + echo "system - $SYSTEM" + cp $BUILD/cdh release/cdh-$CDH_VERSION-$SYSTEM +done +ls release