diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000..8d7cef1 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,121 @@ +name: Nightly Release +on: + workflow_dispatch: + inputs: + tag: + description: "Nightly version tag (1, 2, 3...)" + required: true + +jobs: + create-tag: + runs-on: ubuntu-latest + outputs: + tagname: ${{ steps.get_tag.outputs.tagname }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Get tag from Cargo.toml + id: get_tag + run: | + VERSION=$(cargo metadata --format-version=1 --no-deps | jq '.packages[0].version') + echo "tagname=v${VERSION}-nightly.${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT + + - uses: rickstaa/action-create-tag@v1 + with: + tag: ${{ steps.get_tag.outputs.tagname }} + + build-binary: + needs: create-tag + strategy: + matrix: + platform: + - release_for: linux-aarch64 + os: ubuntu-latest + target: aarch64-unknown-linux-musl + bin: cup + name: cup-linux-aarch64 + command: build + + - release_for: linux-x86_64 + os: ubuntu-latest + target: x86_64-unknown-linux-musl + bin: cup + name: cup-linux-x86_64 + command: build + + runs-on: ${{ matrix.platform.os }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + + - name: Install cross + run: cargo install cross --git https://github.com/cross-rs/cross + + - name: Build binary + run: cross ${{ matrix.platform.command }} --target ${{ matrix.platform.target }} --release + + - name: Upload CLI + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.platform.name }} + path: target/${{ matrix.platform.target }}/release/${{ matrix.platform.bin }} + + build-image: + needs: [create-tag, build-binary] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push image + uses: docker/build-push-action@v6 + with: + context: . + platforms: linux/amd64, linux/arm64 + push: true + tags: ghcr.io/sergi0g/cup:${{ needs.create-tag.outputs.tagname }} + + nightly-release: + runs-on: ubuntu-latest + needs: [create-tag, build-image, build-binary] + steps: + - name: Download arm64 binary + uses: actions/download-artifact@v4 + with: + name: cup-linux-aarch64 + path: cup-linux-aarch64 + + - name: Download x86 binary + uses: actions/download-artifact@v4 + with: + name: cup-linux-x86_64 + path: cup-linux-x86_64 + + - name: Create nightly release + uses: softprops/action-gh-release@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + prerelease: true + tag_name: ${{ needs.create-tag.outputs.tagname }} + name: ${{ needs.create-tag.outputs.tagname }} + files: | + cup-linux-aarch64/cup-linux-aarch64 + cup-linux-x86_64/cup-linux-x86_64 \ No newline at end of file