diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..23e5eb0 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: eRgo35 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ad6c2fd --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,46 @@ +name: ci + +on: + push: + branches: [senpai] + pull_request: + branches: [senpai] + +env: + RUST_BACKTRACE: 1 + RUST_LOG: trace + +jobs: + test: + name: test + strategy: + matrix: + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v3 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + override: true + + - name: Set up cache + uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - name: Build projectable + run: cargo build --verbose + + - name: Run tests + run: cargo test --verbose diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..bb2bec7 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,119 @@ +name: release + +on: + push: + tags: + - "[0-9]+.[0-9]+.[0-9]+" + +permissions: write-all + +jobs: + # Creates a release and outputs the url + create-release: + name: create-release + runs-on: ubuntu-latest + outputs: + upload_url: ${{ env.RELEASE_UPLOAD_URL }} + version: ${{ env.VERSION }} + steps: + - name: Get the release version from the tag + shell: bash + if: env.VERSION == '' + run: | + echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV + echo "version is: ${{ env.VERSION }}" + - name: Create GitHub release + uses: actions/github-script@v6 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + script: | + try { + const response = await github.rest.repos.createRelease({ + draft: false, + generate_release_notes: true, + name: process.env.VERSION, + owner: context.repo.owner, + prerelease: false, + repo: context.repo.repo, + tag_name: process.env.VERSION, + }); + + core.exportVariable('RELEASE_ID', response.data.id); + core.exportVariable('RELEASE_UPLOAD_URL', response.data.upload_url); + } catch (error) { + core.setFailed(error.message); + } + + build-and-upload: + name: Build and upload + needs: create-release + runs-on: ${{ matrix.os }} + + strategy: + matrix: + build: [linux-gnu, linux-aarch64-gnu] + include: + - build: linux-gnu + os: ubuntu-latest + target: x86_64-unknown-linux-gnu + use-cross: true + + - build: linux-aarch64-gnu + os: ubuntu-latest + target: aarch64-unknown-linux-gnu + use-cross: true + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + override: true + target: ${{ matrix.target }} + + - name: Build + uses: actions-rs/cargo@v1 + with: + use-cross: ${{ matrix.use-cross }} + command: build + args: --verbose --release --target ${{ matrix.target }} + + - name: Strip release binary (linux and macos) + if: matrix.build == 'linux-gnu' || matrix.build == 'linux-musl' || matrix.build == 'macos' || matrix.build == 'linux-aarch64-gnu' + run: strip "target/${{ matrix.target }}/release/lyra" + + - name: Build archive + shell: bash + run: | + dirname="lyra-${{ needs.create-release.outputs.version }}-${{ matrix.target }}" + mkdir "$dirname" + if [ "${{ matrix.os }}" = "windows-latest" ]; then + mv "target/${{ matrix.target }}/release/lyra.exe" "$dirname" + else + mv "target/${{ matrix.target }}/release/lyra" "$dirname" + fi + mv LICENSE.md "$dirname" + + if [ "${{ matrix.os }}" = "windows-latest" ]; then + 7z a "$dirname.zip" "$dirname" + echo "ASSET=$dirname.zip" >> $GITHUB_ENV + else + tar -czf "$dirname.tar.gz" "$dirname" + echo "ASSET=$dirname.tar.gz" >> $GITHUB_ENV + fi + + - name: Upload archive + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: ${{ env.ASSET }} + asset_name: ${{ env.ASSET }} + asset_content_type: application/octet-stream