1+ name : Release
2+
3+ on :
4+ push :
5+ tags :
6+ - ' v*'
7+
8+ env :
9+ CARGO_TERM_COLOR : always
10+
11+ jobs :
12+ create-release :
13+ name : Create Release
14+ runs-on : ubuntu-latest
15+ outputs :
16+ upload_url : ${{ steps.release.outputs.upload_url }}
17+ release_version : ${{ env.RELEASE_VERSION }}
18+ steps :
19+ - name : Get the release version from the tag
20+ shell : bash
21+ run : |
22+ echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
23+ echo "version is: ${{ env.RELEASE_VERSION }}"
24+
25+ - name : Create GitHub release
26+ id : release
27+ uses : actions/create-release@v1
28+ env :
29+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
30+ with :
31+ tag_name : ${{ env.RELEASE_VERSION }}
32+ release_name : ${{ env.RELEASE_VERSION }}
33+ draft : false
34+ prerelease : false
35+
36+ build-release :
37+ name : Build Release
38+ needs : ['create-release']
39+ runs-on : ${{ matrix.os }}
40+ strategy :
41+ matrix :
42+ build :
43+ - linux
44+ - macos
45+ - macos-arm
46+ - windows
47+ include :
48+ - build : linux
49+ os : ubuntu-latest
50+ rust : stable
51+ target : x86_64-unknown-linux-gnu
52+ archive : tar.gz
53+ archive-command : tar czf
54+ - build : macos
55+ os : macos-latest
56+ rust : stable
57+ target : x86_64-apple-darwin
58+ archive : tar.gz
59+ archive-command : tar czf
60+ - build : macos-arm
61+ os : macos-latest
62+ rust : stable
63+ target : aarch64-apple-darwin
64+ archive : tar.gz
65+ archive-command : tar czf
66+ - build : windows
67+ os : windows-latest
68+ rust : stable
69+ target : x86_64-pc-windows-msvc
70+ archive : zip
71+
72+ steps :
73+ - name : Checkout repository
74+ uses : actions/checkout@v3
75+
76+ - name : Install Rust
77+ uses : dtolnay/rust-toolchain@master
78+ with :
79+ toolchain : ${{ matrix.rust }}
80+ targets : ${{ matrix.target }}
81+
82+ - name : Build release binary
83+ run : cargo build --verbose --release --target ${{ matrix.target }}
84+
85+ - name : Strip release binary (unix)
86+ if : matrix.os != 'windows-latest'
87+ run : strip "target/${{ matrix.target }}/release/names"
88+
89+ - name : Build archive
90+ shell : bash
91+ run : |
92+ staging="names-${{ needs.create-release.outputs.release_version }}-${{ matrix.target }}"
93+ mkdir -p "$staging"
94+
95+ cp {README.md,LICENSE-MIT,LICENSE-APACHE,CHANGELOG.md} "$staging/"
96+
97+ if [ "${{ matrix.os }}" = "windows-latest" ]; then
98+ cp "target/${{ matrix.target }}/release/names.exe" "$staging/"
99+ 7z a "$staging.zip" "$staging"
100+ echo "ASSET=$staging.zip" >> $GITHUB_ENV
101+ else
102+ cp "target/${{ matrix.target }}/release/names" "$staging/"
103+ tar czf "$staging.tar.gz" "$staging"
104+ echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV
105+ fi
106+
107+ - name : Upload release archive
108+ uses : actions/upload-release-asset@v1
109+ env :
110+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
111+ with :
112+ upload_url : ${{ needs.create-release.outputs.upload_url }}
113+ asset_path : ${{ env.ASSET }}
114+ asset_name : ${{ env.ASSET }}
115+ asset_content_type : application/octet-stream
116+
117+ publish-cargo :
118+ name : Publish to crates.io
119+ runs-on : ubuntu-latest
120+ needs : ['build-release']
121+ steps :
122+ - uses : actions/checkout@v3
123+ - uses : dtolnay/rust-toolchain@stable
124+ - run : cargo publish
125+ env :
126+ CARGO_REGISTRY_TOKEN : ${{ secrets.CARGO_REGISTRY_TOKEN }}
127+
128+ update-homebrew :
129+ name : Update Homebrew Formula
130+ runs-on : ubuntu-latest
131+ needs : ['create-release', 'build-release']
132+ steps :
133+ - name : Checkout repository
134+ uses : actions/checkout@v3
135+
136+ - name : Update Homebrew Formula
137+ env :
138+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
139+ HOMEBREW_TAP_TOKEN : ${{ secrets.HOMEBREW_TAP_TOKEN }}
140+ run : |
141+ VERSION="${{ needs.create-release.outputs.release_version }}"
142+ VERSION="${VERSION#v}" # Remove 'v' prefix
143+
144+ # Download the release assets to calculate SHA256
145+ curl -L -o names-darwin.tar.gz \
146+ "https://github.com/${{ github.repository }}/releases/download/v${VERSION}/names-v${VERSION}-x86_64-apple-darwin.tar.gz"
147+ curl -L -o names-darwin-arm.tar.gz \
148+ "https://github.com/${{ github.repository }}/releases/download/v${VERSION}/names-v${VERSION}-aarch64-apple-darwin.tar.gz"
149+ curl -L -o names-linux.tar.gz \
150+ "https://github.com/${{ github.repository }}/releases/download/v${VERSION}/names-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz"
151+
152+ # Calculate SHA256
153+ SHA_DARWIN=$(sha256sum names-darwin.tar.gz | cut -d' ' -f1)
154+ SHA_DARWIN_ARM=$(sha256sum names-darwin-arm.tar.gz | cut -d' ' -f1)
155+ SHA_LINUX=$(sha256sum names-linux.tar.gz | cut -d' ' -f1)
156+
157+ # Create formula file
158+ cat > names.rb << EOF
159+ class Names < Formula
160+ desc "Multicultural random name generator with Persian, Arabic, and Asian names"
161+ homepage "https://github.com/${{ github.repository }}"
162+ version "${VERSION}"
163+ license any_of: ["MIT", "Apache-2.0"]
164+
165+ on_macos do
166+ if Hardware::CPU.arm?
167+ url "https://github.com/${{ github.repository }}/releases/download/v${VERSION}/names-v${VERSION}-aarch64-apple-darwin.tar.gz"
168+ sha256 "${SHA_DARWIN_ARM}"
169+ else
170+ url "https://github.com/${{ github.repository }}/releases/download/v${VERSION}/names-v${VERSION}-x86_64-apple-darwin.tar.gz"
171+ sha256 "${SHA_DARWIN}"
172+ end
173+ end
174+
175+ on_linux do
176+ url "https://github.com/${{ github.repository }}/releases/download/v${VERSION}/names-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz"
177+ sha256 "${SHA_LINUX}"
178+ end
179+
180+ def install
181+ bin.install "names"
182+ end
183+
184+ test do
185+ assert_match(/\w+-\w+/, shell_output("#{bin}/names"))
186+ end
187+ end
188+ EOF
189+
190+ # If you have a separate homebrew tap repository, you can push to it
191+ # For now, we'll just create the formula file
192+ echo "Homebrew formula created successfully"
0 commit comments