diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml new file mode 100644 index 0000000..0fcf40b --- /dev/null +++ b/.github/workflows/push.yaml @@ -0,0 +1,126 @@ +name: Push + +on: + push: + branches: + - main + pull_request: + branches: + - main + +permissions: + id-token: write + contents: read + pull-requests: write + +jobs: + build: + name: Build + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-22.04] + go: [1.21, 1.23.4] + node: [21] + goos: [linux] + goarch: [arm] + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + + - name: Install Dependencies + working-directory: ui + run: npm ci + + - name: Build UI + working-directory: ui + run: npm run build:device + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ matrix.go }} + + - name: Install Go Dependencies + run: | + go mod download + + - name: Build Binaries + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + run: | + GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="-s -w -X kvm.builtAppVersion=dev-${GIT_COMMIT:0:7}" -o bin/jetkvm_app cmd/main.go + chmod 755 bin/jetkvm_app + + - name: Upload Debug Artifact + uses: actions/upload-artifact@v4 + if: ${{ (github.ref == 'refs/heads/main' || github.event_name == 'pull_request') && matrix.go == '1.21' }} + with: + name: jetkvm_app_debug + path: bin/jetkvm_app + + comment: + name: Comment + runs-on: ubuntu-latest + needs: build + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Generate Links + id: linksa + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + ARTIFACT_ID=$(gh api repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts --jq '.artifacts[0].id') + echo "ARTIFACT_URL=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts/$ARTIFACT_ID" >> $GITHUB_ENV + echo "LATEST_COMMIT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + + - name: Comment on PR + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + TITLE="${{ github.event.pull_request.title }}" + PR_NUMBER=${{ github.event.pull_request.number }} + else + TITLE="main branch" + fi + + COMMENT=$(cat << EOF + ✅ **Build successfully for $TITLE!** + + | Name | Link | + |------------------|----------------------------------------------------------------------| + | 🔗 Debug Binary | [Download](${{ env.ARTIFACT_URL }}) | + | 🔗 Latest commit | [${{ env.LATEST_COMMIT }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) | + EOF + ) + + # Post Comment + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + # Look for an existing comment + COMMENT_ID=$(gh api repos/${{ github.repository }}/issues/$PR_NUMBER/comments \ + --jq '.[] | select(.body | contains("✅ **Build successfully for")) | .id') + + if [ -z "$COMMENT_ID" ]; then + # Create a new comment if none exists + gh pr comment $PR_NUMBER --body "$COMMENT" + else + # Update the existing comment + gh api repos/${{ github.repository }}/issues/comments/$COMMENT_ID \ + --method PATCH \ + -f body="$COMMENT" + fi + else + # Log the comment for main branch + echo "$COMMENT" + fi diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..eea90dd --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,91 @@ +name: Release + +on: + push: + tags: + - "v*" + +jobs: + release: + name: Release + runs-on: ubuntu-22.04 + permissions: + contents: write + packages: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 21 + + - name: Install Dependencies + working-directory: ui + run: npm ci + + - name: Build UI + working-directory: ui + run: npm run build:device + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: 1.21 + + - name: Build Release Binaries + env: + REF: ${{ github.ref }} + run: | + GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="-s -w -X kvm.builtAppVersion=${REF:11}" -o bin/jetkvm_app cmd/main.go + chmod 755 bin/jetkvm_app + + - name: Create checksum + env: + REF: ${{ github.ref }} + run: | + SUM=$(shasum -a 256 bin/jetkvm_app | cut -d ' ' -f 1) + echo -e "\n#### SHA256 Checksum\n\`\`\`\n$SUM bin/jetkvm_app\n\`\`\`\n" >> ./RELEASE_CHANGELOG + echo -e "$SUM bin/jetkvm_app\n" > checksums.txt + + - name: Create Release Branch + env: + REF: ${{ github.ref }} + run: | + BRANCH=release/${REF:10} + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git checkout -b ${BRANCH} + git push -u origin ${BRANCH} + + - name: Create Release + id: create_release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + draft: true + prerelease: ${{ contains(github.ref, 'rc') || contains(github.ref, 'beta') || contains(github.ref, 'alpha') }} + body_path: ./RELEASE_CHANGELOG + + - name: Upload JetKVM binary + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: bin/jetkvm_app + asset_name: jetkvm_app + asset_content_type: application/octet-stream + + - name: Upload checksum + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./checksums.txt + asset_name: checksums.txt + asset_content_type: text/plain