Skip to content

feat: issue template and ci/cd #20

feat: issue template and ci/cd

feat: issue template and ci/cd #20

Workflow file for this run

name: Release
on:
push:
branches:
- main
tags:
- 'v*'
pull_request:
branches: [ '**' ]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write
jobs:
quality-and-release:
name: Quality & Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
cache: true
- name: Run Linter
uses: golangci/golangci-lint-action@v8
with:
version: v2.11.4
- name: Run Tests
run: go test -v ./...
- name: Build Binaries
if: startsWith(github.ref, 'refs/tags/v')
run: |
mkdir -p dist
platforms=("linux/amd64" "linux/arm64" "darwin/amd64" "darwin/arm64")
for platform in "${platforms[@]}"; do
os_arch=(${platform//\// })
GOOS=${os_arch[0]}
GOARCH=${os_arch[1]}
output_name="iris"
[ "$GOOS" == "windows" ] && output_name="iris.exe"
echo "Building $GOOS/$GOARCH..."
GOOS=$GOOS GOARCH=$GOARCH go build \
-ldflags="-s -w -X github.com/versenilvis/iris/root.Version=${{ github.ref_name }}" \
-trimpath -o "dist/$output_name" main.go
cd dist
tar -czf "iris_${GOOS}_${GOARCH}.tar.gz" "$output_name"
rm "$output_name"
cd ..
done
- name: Prepare Release Notes
if: startsWith(github.ref, 'refs/tags/v')
run: |
# Generate standard GitHub release notes
GEN_NOTES=$(gh api repos/${{ github.repository }}/releases/generate-notes -f tag_name=${{ github.ref_name }} --jq .body)
echo "RELEASE_BODY<<EOF" >> $GITHUB_ENV
echo "$GEN_NOTES" >> $GITHUB_ENV
echo "" >> $GITHUB_ENV
echo "## Installation" >> $GITHUB_ENV
echo "\`\`\`bash" >> $GITHUB_ENV
echo "curl -sS https://raw.githubusercontent.com/versenilvis/iris/main/scripts/install.sh | sudo sh" >> $GITHUB_ENV
echo "\`\`\`" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v1
with:
name: ${{ github.ref_name }}
body: ${{ env.RELEASE_BODY }}
files: dist/*.tar.gz
generate_release_notes: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}