diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..ee60fa4 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,73 @@ +on: + push: + branches: [master] + pull_request: + branches: ["*"] + +name: build + +jobs: + test_macos: + name: Run Tests on macOS + runs-on: macos-latest + steps: + - uses: actions/checkout@v1 + - name: Cache cargo registry + uses: actions/cache@v1 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo index + uses: actions/cache@v1 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo build + uses: actions/cache@v1 + with: + path: target + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + - name: Setup toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + components: clippy + override: true + - name: check + run: cargo check + - name: clippy + run: cargo clippy + - name: test + run: cargo test + - name: build + run: cargo build --release + + test_ubuntu: + name: Run Tests on Ubuntu (x86_64) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Cache cargo registry + uses: actions/cache@v1 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo index + uses: actions/cache@v1 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo build + uses: actions/cache@v1 + with: + path: target + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + - name: check + run: cargo check + - name: clippy + run: cargo clippy + - name: test + run: cargo test + - name: build + run: cargo build --release diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..8e6af68 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,162 @@ +name: Create Release + +on: + push: + tags: + - "v*.*.*" + +jobs: + build_armv7: + name: Build for armv7 + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Cache cargo registry + uses: actions/cache@v1 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo index + uses: actions/cache@v1 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo build + uses: actions/cache@v1 + with: + path: target + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + - name: Setup Toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: armv7-unknown-linux-gnueabihf + override: true + - name: Build release + uses: actions-rs/cargo@v1 + with: + use-cross: true + command: build + args: --release --locked --target armv7-unknown-linux-gnueabihf + - name: Get current version + id: get_version + run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/} + - name: Package Binary + run: cp doc/phd.1 target/armv7-unknown-linux-gnueabihf/release && cd target/armv7-unknown-linux-gnueabihf/release && tar zcvf phd-${{ steps.get_version.outputs.VERSION }}-linux-armv7.tgz phd phd.1 + - name: Upload Artifact + uses: actions/upload-artifact@v1 + with: + name: phd-linux-armv7 + path: target/armv7-unknown-linux-gnueabihf/release/phd-${{ steps.get_version.outputs.VERSION }}-linux-armv7.tgz + + build_linux: + name: Build for Linux x86_64 + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Cache cargo registry + uses: actions/cache@v1 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo index + uses: actions/cache@v1 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo build + uses: actions/cache@v1 + with: + path: target + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + - name: Build release + run: cargo build --locked --release + - name: Get current version + id: get_version + run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/} + - name: Package Binary + run: cp doc/phd.1 target/release && cd target/release && tar zcvf phd-${{ steps.get_version.outputs.VERSION }}-linux-x86_64.tgz phd phd.1 + - name: Upload Artifact + uses: actions/upload-artifact@v1 + with: + name: phd-linux-x86_64 + path: target/release/phd-${{ steps.get_version.outputs.VERSION }}-linux-x86_64.tgz + + build_macos: + name: Build for macOS + runs-on: macos-latest + steps: + - uses: actions/checkout@v1 + - name: Cache cargo registry + uses: actions/cache@v1 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo index + uses: actions/cache@v1 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo build + uses: actions/cache@v1 + with: + path: target + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + - name: Setup Toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + - name: Build release + uses: actions-rs/cargo@v1 + with: + command: build + args: --locked --release + - name: Get current version + id: get_version + run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/} + - name: Package Binary + run: cp doc/phd.1 target/release && cd target/release && zip -r phd-${{ steps.get_version.outputs.VERSION }}-macos.zip phd phd.1 + - name: Upload Artifact + uses: actions/upload-artifact@v1 + with: + name: phd-macos + path: target/release/phd-${{ steps.get_version.outputs.VERSION }}-macos.zip + + create: + name: Create Release + needs: [build_armv7, build_linux, build_macos] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Get current version + id: get_version + run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/} + - name: Download macOS artifact + uses: actions/download-artifact@v1 + with: + name: phd-macos + - name: Download Linux (x86_64) artifact + uses: actions/download-artifact@v1 + with: + name: phd-linux-x86_64 + - name: Download Linux (armv7) artifact + uses: actions/download-artifact@v1 + with: + name: phd-linux-armv7 + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + draft: true + prerelease: true + files: | + phd-macos/phd-${{ steps.get_version.outputs.VERSION }}-macos.zip + phd-linux-x86_64/phd-${{ steps.get_version.outputs.VERSION }}-linux-x86_64.tgz + phd-linux-armv7/phd-${{ steps.get_version.outputs.VERSION }}-linux-armv7.tgz + body_path: CHANGELOG.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}