@@ -0,0 +1,97 @@
1+name: Build and Release
5+ branches: [main, master]
11+ name: Build ${{ matrix.target }}
12+ runs-on: ${{ matrix.os }}
17+ target: x86_64-unknown-linux-gnu
18+ name: htmlang-linux-x86_64
20+ target: x86_64-apple-darwin
21+ name: htmlang-macos-x86_64
23+ target: aarch64-apple-darwin
24+ name: htmlang-macos-aarch64
26+ target: x86_64-pc-windows-msvc
27+ name: htmlang-windows-x86_64.exe
29+ - uses: actions/checkout@v4
31+ - uses: dtolnay/rust-toolchain@stable
33+ targets: ${{ matrix.target }}
36+ run: cargo build --release --target ${{ matrix.target }}
38+ - name: Strip binary (Unix)
39+ if: runner.os != 'Windows'
41+ if [ -f target/${{ matrix.target }}/release/htmlang ]; then
42+ strip target/${{ matrix.target }}/release/htmlang
45+ - name: Upload artifact
46+ uses: actions/upload-artifact@v4
48+ name: ${{ matrix.name }}
49+ path: target/${{ matrix.target }}/release/htmlang${{ runner.os == 'Windows' && '.exe' || '' }}
54+ runs-on: ubuntu-latest
58+ - uses: actions/checkout@v4
60+ - name: Download all artifacts
61+ uses: actions/download-artifact@v4
65+ - name: Calculate version
68+ VERSION=$(date -u +'%Y.%m.%d.%H%M%S')
69+ echo "version=$VERSION" >> $GITHUB_OUTPUT
70+ echo "Version: $VERSION"
72+ - name: Prepare release assets
75+ for dir in artifacts/*/; do
76+ filename=$(basename "$dir")
77+ binary=$(find "$dir" -type f -executable | head -1)
78+ if [ -z "$binary" ] && [ -f "$dir/htmlang.exe" ]; then
79+ binary="$dir/htmlang.exe"
81+ if [ -n "$binary" ]; then
82+ cp "$binary" "release/$filename"
83+ chmod +x "release/$filename"
88+ - name: Create Release
89+ uses: softprops/action-gh-release@v1
91+ tag_name: v${{ steps.version.outputs.version }}
92+ name: Release ${{ steps.version.outputs.version }}
97+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}