diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..7f0c9ca --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,100 @@ +name: Build and Release + +on: + push: + branches: + - main + +env: + TAG: latest + RELEASE_NAME: Latest release + RELEASE_BODY: Latest release + BINARY_PREFIX: viterbiCli # Updated to match your new project name + +jobs: + build_and_release: + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: 'stable' + + - name: Install dependencies + run: go mod download + + - name: Build binaries + run: | + mkdir -p build + PLATFORMS=( + "darwin/arm64" + "darwin/amd64" + "linux/arm64" + "linux/amd64" + "windows/amd64" + "windows/arm64" + "freebsd/386" + "freebsd/amd64" + "freebsd/arm" + "freebsd/arm64" + "openbsd/386" + "openbsd/amd64" + "openbsd/arm" + "openbsd/arm64" + "dragonfly/amd64" + "netbsd/386" + "netbsd/amd64" + "netbsd/arm" + "netbsd/arm64" + ) + for PLATFORM in "${PLATFORMS[@]}"; do + GOOS=${PLATFORM%/*} + GOARCH=${PLATFORM#*/} + OUTPUT_NAME=${{ env.BINARY_PREFIX }}.$GOOS.$GOARCH + if [ "$GOOS" = "windows" ]; then + OUTPUT_NAME=$OUTPUT_NAME.exe + fi + echo "Building for $GOOS/$GOARCH..." + GOOS=$GOOS GOARCH=$GOARCH go build -ldflags "-X 'main.Version=$(date +'%Y-%m-%d_%H:%M:%S')'" -o "build/$OUTPUT_NAME" ./cmd/viterbiCli + done + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.TAG }} + release_name: ${{ env.RELEASE_NAME }} + body: ${{ env.RELEASE_BODY }} + draft: false + prerelease: false + + - name: Upload Release Assets + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const fs = require('fs').promises; + const path = require('path'); + + const uploadUrl = '${{ steps.create_release.outputs.upload_url }}'; + const buildDir = 'build'; + + const files = await fs.readdir(buildDir); + for (const file of files) { + const filePath = path.join(buildDir, file); + const stat = await fs.stat(filePath); + if (stat.isFile()) { + console.log(`Uploading ${file}...`); + await github.rest.repos.uploadReleaseAsset({ + url: uploadUrl, + headers: { 'content-type': 'application/octet-stream' }, + name: file, + data: await fs.readFile(filePath) + }); + } + }