Add GitHub Actions workflows and optimize build performance

- Add release.yml for multi-platform binary builds (Linux, macOS, Windows)
- Add gh-pages-fast.yml for fast deployment using pre-built binaries
- Add build-binary.yml for standalone binary artifact creation
- Optimize Cargo.toml with build profiles and reduced tokio features
- Remove 26MB of unused Font Awesome assets (kept only essential files)
- Font Awesome reduced from 28MB to 1.2MB

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-06-14 16:12:05 +09:00
parent 13f1785081
commit 3b2c53fc97
2133 changed files with 693 additions and 372880 deletions
.claude
.github/workflows
.gitignoreCargo.tomlaction.yml
bin
my-blog
static
_redirects
css
js
pkg
font-awesome
css
js
less
metadata
scss
sprites
svgs
brands
42-group.svg500px.svgaccessible-icon.svgaccusoft.svgadn.svgadversal.svgaffiliatetheme.svgairbnb.svgalgolia.svgalipay.svgamazon-pay.svgamazon.svgamilia.svgandroid.svgangellist.svgangrycreative.svgangular.svgapp-store-ios.svgapp-store.svgapper.svgapple-pay.svgapple.svgartstation.svgasymmetrik.svgatlassian.svgaudible.svgautoprefixer.svgavianex.svgaviato.svgaws.svgbandcamp.svgbattle-net.svgbehance.svgbilibili.svgbimobject.svgbitbucket.svgbitcoin.svgbity.svgblack-tie.svgblackberry.svgblogger-b.svgblogger.svgbluesky.svgbluetooth-b.svgbluetooth.svgbootstrap.svgbots.svgbrave-reverse.svgbrave.svgbtc.svgbuffer.svgburomobelexperte.svgbuy-n-large.svgbuysellads.svgcanadian-maple-leaf.svgcc-amazon-pay.svgcc-amex.svgcc-apple-pay.svgcc-diners-club.svgcc-discover.svgcc-jcb.svgcc-mastercard.svgcc-paypal.svgcc-stripe.svgcc-visa.svgcentercode.svgcentos.svgchrome.svgchromecast.svgcloudflare.svgcloudscale.svgcloudsmith.svgcloudversify.svgcmplid.svgcodepen.svgcodiepie.svgconfluence.svgconnectdevelop.svgcontao.svgcotton-bureau.svgcpanel.svgcreative-commons-by.svgcreative-commons-nc-eu.svgcreative-commons-nc-jp.svgcreative-commons-nc.svgcreative-commons-nd.svgcreative-commons-pd-alt.svgcreative-commons-pd.svgcreative-commons-remix.svgcreative-commons-sa.svgcreative-commons-sampling-plus.svgcreative-commons-sampling.svgcreative-commons-share.svgcreative-commons-zero.svgcreative-commons.svgcritical-role.svgcss3-alt.svgcss3.svgcuttlefish.svgd-and-d-beyond.svgd-and-d.svgdailymotion.svgdashcube.svgdebian.svgdeezer.svgdelicious.svgdeploydog.svgdeskpro.svgdev.svgdeviantart.svgdhl.svgdiaspora.svgdigg.svgdigital-ocean.svgdiscord.svgdiscourse.svgdochub.svgdocker.svgdraft2digital.svgdribbble.svgdropbox.svgdrupal.svgdyalog.svgearlybirds.svgebay.svgedge-legacy.svgedge.svgelementor.svgello.svgember.svgempire.svgenvira.svgerlang.svgethereum.svgetsy.svgevernote.svgexpeditedssl.svgfacebook-f.svgfacebook-messenger.svgfacebook.svgfantasy-flight-games.svgfedex.svgfedora.svgfigma.svgfirefox-browser.svgfirefox.svgfirst-order-alt.svgfirst-order.svgfirstdraft.svgflickr.svgflipboard.svgfly.svgfont-awesome.svgfonticons-fi.svgfonticons.svgfort-awesome-alt.svgfort-awesome.svgforumbee.svgfoursquare.svgfree-code-camp.svgfreebsd.svgfulcrum.svggalactic-republic.svggalactic-senate.svgget-pocket.svggg-circle.svggg.svggit-alt.svggit.svggithub-alt.svggithub.svggitkraken.svggitlab.svggitter.svgglide-g.svgglide.svggofore.svggolang.svggoodreads-g.svggoodreads.svggoogle-drive.svggoogle-pay.svggoogle-play.svggoogle-plus-g.svggoogle-plus.svggoogle-scholar.svggoogle-wallet.svggoogle.svggratipay.svggrav.svggripfire.svggrunt.svgguilded.svggulp.svghacker-news.svghackerrank.svghashnode.svghips.svghire-a-helper.svghive.svghooli.svghornbill.svghotjar.svghouzz.svghtml5.svghubspot.svgideal.svgimdb.svginstagram.svginstalod.svgintercom.svginternet-explorer.svginvision.svgioxhost.svgitch-io.svgitunes-note.svgitunes.svgjava.svgjedi-order.svgjenkins.svgjira.svgjoget.svgjoomla.svgjs.svgjsfiddle.svgjxl.svgkaggle.svgkeybase.svgkeycdn.svgkickstarter-k.svgkickstarter.svgkorvue.svglaravel.svglastfm.svgleanpub.svgless.svgletterboxd.svgline.svglinkedin-in.svglinkedin.svglinode.svglinux.svglyft.svgmagento.svgmailchimp.svgmandalorian.svgmarkdown.svgmastodon.svgmaxcdn.svgmdb.svgmedapps.svgmedium.svgmedrt.svgmeetup.svgmegaport.svgmendeley.svgmeta.svgmicroblog.svgmicrosoft.svgmintbit.svgmix.svgmixcloud.svgmixer.svgmizuni.svgmodx.svgmonero.svgnapster.svgneos.svgnfc-directional.svgnfc-symbol.svgnimblr.svgnode-js.svgnode.svgnpm.svgns8.svgnutritionix.svgoctopus-deploy.svgodnoklassniki.svgodysee.svgold-republic.svgopencart.svgopenid.svgopensuse.svgopera.svgoptin-monster.svgorcid.svgosi.svgpadlet.svgpage4.svgpagelines.svgpalfed.svgpatreon.svgpaypal.svgperbyte.svgperiscope.svgphabricator.svgphoenix-framework.svgphoenix-squadron.svgphp.svgpied-piper-alt.svgpied-piper-hat.svgpied-piper-pp.svgpied-piper.svgpinterest-p.svgpinterest.svgpix.svgpixiv.svgplaystation.svgproduct-hunt.svgpushed.svgpython.svgqq.svgquinscape.svgquora.svgr-project.svgraspberry-pi.svgravelry.svgreact.svgreacteurope.svgreadme.svgrebel.svgred-river.svgreddit-alien.svgreddit.svgredhat.svgrenren.svgreplyd.svgresearchgate.svgresolving.svgrev.svgrocketchat.svgrockrms.svgrust.svgsafari.svgsalesforce.svgsass.svgschlix.svgscreenpal.svgscribd.svgsearchengin.svgsellcast.svgsellsy.svgservicestack.svgshirtsinbulk.svgshoelace.svgshopify.svgshopware.svgsignal-messenger.svgsimplybuilt.svgsistrix.svgsith.svgsitrox.svgsketch.svgskyatlas.svgskype.svgslack.svgslideshare.svgsnapchat.svgsoundcloud.svgsourcetree.svgspace-awesome.svgspeakap.svgspeaker-deck.svgspotify.svgsquare-behance.svgsquare-dribbble.svgsquare-facebook.svgsquare-font-awesome-stroke.svgsquare-font-awesome.svgsquare-git.svgsquare-github.svgsquare-gitlab.svgsquare-google-plus.svgsquare-hacker-news.svgsquare-instagram.svgsquare-js.svgsquare-lastfm.svgsquare-letterboxd.svgsquare-odnoklassniki.svgsquare-pied-piper.svgsquare-pinterest.svgsquare-reddit.svgsquare-snapchat.svgsquare-steam.svgsquare-threads.svgsquare-tumblr.svgsquare-twitter.svgsquare-upwork.svgsquare-viadeo.svgsquare-vimeo.svgsquare-web-awesome-stroke.svgsquare-web-awesome.svgsquare-whatsapp.svgsquare-x-twitter.svgsquare-xing.svgsquare-youtube.svgsquarespace.svgstack-exchange.svgstack-overflow.svgstackpath.svgstaylinked.svgsteam-symbol.svgsteam.svgsticker-mule.svgstrava.svgstripe-s.svgstripe.svgstubber.svgstudiovinari.svgstumbleupon-circle.svgstumbleupon.svgsuperpowers.svgsupple.svgsuse.svgswift.svgsymfony.svgteamspeak.svgtelegram.svgtencent-weibo.svgthe-red-yeti.svgthemeco.svgthemeisle.svgthink-peaks.svgthreads.svgtiktok.svgtrade-federation.svgtrello.svgtumblr.svgtwitch.svgtwitter.svgtypo3.svguber.svgubuntu.svguikit.svgumbraco.svguncharted.svguniregistry.svgunity.svgunsplash.svguntappd.svgups.svgupwork.svgusb.svgusps.svgussunnah.svgvaadin.svgviacoin.svgviadeo.svgviber.svgvimeo-v.svgvimeo.svgvine.svgvk.svgvnv.svgvuejs.svgwatchman-monitoring.svgwaze.svgweb-awesome.svgwebflow.svgweebly.svgweibo.svgweixin.svgwhatsapp.svgwhmcs.svgwikipedia-w.svgwindows.svgwirsindhandwerk.svgwix.svgwizards-of-the-coast.svgwodu.svgwolf-pack-battalion.svgwordpress-simple.svgwordpress.svgwpbeginner.svgwpexplorer.svgwpforms.svgwpressr.svgx-twitter.svgxbox.svgxing.svgy-combinator.svgyahoo.svgyammer.svgyandex-international.svgyandex.svgyarn.svgyelp.svgyoast.svgyoutube.svgzhihu.svg
regular
address-book.svgaddress-card.svgbell-slash.svgbell.svgbookmark.svgbuilding.svgcalendar-check.svgcalendar-days.svgcalendar-minus.svgcalendar-plus.svgcalendar-xmark.svgcalendar.svgchart-bar.svgchess-bishop.svgchess-king.svgchess-knight.svgchess-pawn.svgchess-queen.svgchess-rook.svgcircle-check.svgcircle-dot.svgcircle-down.svgcircle-left.svgcircle-pause.svgcircle-play.svgcircle-question.svgcircle-right.svgcircle-stop.svgcircle-up.svgcircle-user.svgcircle-xmark.svgcircle.svgclipboard.svgclock.svgclone.svgclosed-captioning.svgcomment-dots.svgcomment.svgcomments.svgcompass.svgcopy.svgcopyright.svgcredit-card.svgenvelope-open.svgenvelope.svgeye-slash.svgeye.svgface-angry.svgface-dizzy.svgface-flushed.svgface-frown-open.svgface-frown.svgface-grimace.svgface-grin-beam-sweat.svgface-grin-beam.svgface-grin-hearts.svgface-grin-squint-tears.svgface-grin-squint.svgface-grin-stars.svgface-grin-tears.svgface-grin-tongue-squint.svgface-grin-tongue-wink.svgface-grin-tongue.svgface-grin-wide.svgface-grin-wink.svgface-grin.svgface-kiss-beam.svgface-kiss-wink-heart.svgface-kiss.svgface-laugh-beam.svgface-laugh-squint.svgface-laugh-wink.svgface-laugh.svgface-meh-blank.svgface-meh.svgface-rolling-eyes.svgface-sad-cry.svgface-sad-tear.svgface-smile-beam.svgface-smile-wink.svgface-smile.svgface-surprise.svgface-tired.svgfile-audio.svgfile-code.svgfile-excel.svgfile-image.svgfile-lines.svgfile-pdf.svgfile-powerpoint.svgfile-video.svgfile-word.svgfile-zipper.svgfile.svgflag.svgfloppy-disk.svgfolder-closed.svgfolder-open.svgfolder.svgfont-awesome.svgfutbol.svggem.svghand-back-fist.svghand-lizard.svghand-peace.svghand-point-down.svghand-point-left.svghand-point-right.svghand-point-up.svghand-pointer.svghand-scissors.svghand-spock.svghand.svghandshake.svghard-drive.svgheart.svghospital.svghourglass-half.svghourglass.svgid-badge.svgid-card.svgimage.svgimages.svgkeyboard.svglemon.svglife-ring.svglightbulb.svgmap.svgmessage.svgmoney-bill-1.svgmoon.svgnewspaper.svgnote-sticky.svgobject-group.svgobject-ungroup.svgpaper-plane.svgpaste.svgpen-to-square.svgrectangle-list.svgrectangle-xmark.svgregistered.svgshare-from-square.svgsnowflake.svgsquare-caret-down.svgsquare-caret-left.svgsquare-caret-right.svgsquare-caret-up.svgsquare-check.svgsquare-full.svgsquare-minus.svgsquare-plus.svgsquare.svgstar-half-stroke.svgstar-half.svgstar.svgsun.svgthumbs-down.svgthumbs-up.svgtrash-can.svguser.svgwindow-maximize.svgwindow-minimize.svgwindow-restore.svg
solid
0.svg1.svg2.svg3.svg4.svg5.svg6.svg7.svg8.svg9.svga.svgaddress-book.svgaddress-card.svgalign-center.svgalign-justify.svgalign-left.svgalign-right.svganchor-circle-check.svganchor-circle-exclamation.svganchor-circle-xmark.svganchor-lock.svganchor.svgangle-down.svgangle-left.svgangle-right.svgangle-up.svgangles-down.svgangles-left.svgangles-right.svgangles-up.svgankh.svgapple-whole.svgarchway.svgarrow-down-1-9.svgarrow-down-9-1.svgarrow-down-a-z.svgarrow-down-long.svgarrow-down-short-wide.svgarrow-down-up-across-line.svgarrow-down-up-lock.svgarrow-down-wide-short.svgarrow-down-z-a.svgarrow-down.svgarrow-left-long.svgarrow-left.svgarrow-pointer.svgarrow-right-arrow-left.svgarrow-right-from-bracket.svgarrow-right-long.svgarrow-right-to-bracket.svgarrow-right-to-city.svgarrow-right.svgarrow-rotate-left.svgarrow-rotate-right.svgarrow-trend-down.svgarrow-trend-up.svgarrow-turn-down.svgarrow-turn-up.svgarrow-up-1-9.svgarrow-up-9-1.svgarrow-up-a-z.svgarrow-up-from-bracket.svgarrow-up-from-ground-water.svgarrow-up-from-water-pump.svgarrow-up-long.svgarrow-up-right-dots.svgarrow-up-right-from-square.svgarrow-up-short-wide.svgarrow-up-wide-short.svgarrow-up-z-a.svgarrow-up.svgarrows-down-to-line.svgarrows-down-to-people.svgarrows-left-right-to-line.svgarrows-left-right.svgarrows-rotate.svgarrows-spin.svgarrows-split-up-and-left.svgarrows-to-circle.svgarrows-to-dot.svgarrows-to-eye.svgarrows-turn-right.svgarrows-turn-to-dots.svgarrows-up-down-left-right.svgarrows-up-down.svgarrows-up-to-line.svgasterisk.svgat.svgatom.svgaudio-description.svgaustral-sign.svgaward.svgb.svgbaby-carriage.svgbaby.svgbackward-fast.svgbackward-step.svgbackward.svgbacon.svgbacteria.svgbacterium.svgbag-shopping.svgbahai.svgbaht-sign.svgban-smoking.svgban.svgbandage.svgbangladeshi-taka-sign.svgbarcode.svgbars-progress.svgbars-staggered.svgbars.svgbaseball-bat-ball.svgbaseball.svgbasket-shopping.svgbasketball.svgbath.svgbattery-empty.svgbattery-full.svgbattery-half.svgbattery-quarter.svgbattery-three-quarters.svgbed-pulse.svgbed.svgbeer-mug-empty.svgbell-concierge.svgbell-slash.svgbell.svgbezier-curve.svgbicycle.svgbinoculars.svgbiohazard.svgbitcoin-sign.svgblender-phone.svgblender.svgblog.svgbold.svgbolt-lightning.svgbolt.svgbomb.svgbone.svgbong.svgbook-atlas.svgbook-bible.svgbook-bookmark.svgbook-journal-whills.svgbook-medical.svgbook-open-reader.svgbook-open.svgbook-quran.svgbook-skull.svgbook-tanakh.svgbook.svgbookmark.svgborder-all.svgborder-none.svgborder-top-left.svgbore-hole.svgbottle-droplet.svgbottle-water.svgbowl-food.svgbowl-rice.svgbowling-ball.svgbox-archive.svgbox-open.svgbox-tissue.svgbox.svgboxes-packing.svgboxes-stacked.svgbraille.svgbrain.svgbrazilian-real-sign.svgbread-slice.svgbridge-circle-check.svgbridge-circle-exclamation.svgbridge-circle-xmark.svgbridge-lock.svgbridge-water.svgbridge.svgbriefcase-medical.svgbriefcase.svgbroom-ball.svgbroom.svgbrush.svgbucket.svgbug-slash.svgbug.svgbugs.svgbuilding-circle-arrow-right.svgbuilding-circle-check.svgbuilding-circle-exclamation.svgbuilding-circle-xmark.svgbuilding-columns.svgbuilding-flag.svgbuilding-lock.svgbuilding-ngo.svgbuilding-shield.svgbuilding-un.svgbuilding-user.svgbuilding-wheat.svgbuilding.svgbullhorn.svgbullseye.svgburger.svgburst.svgbus-simple.svgbus.svgbusiness-time.svgc.svgcable-car.svgcake-candles.svgcalculator.svgcalendar-check.svgcalendar-day.svgcalendar-days.svgcalendar-minus.svgcalendar-plus.svgcalendar-week.svgcalendar-xmark.svgcalendar.svgcamera-retro.svgcamera-rotate.svgcamera.svgcampground.svgcandy-cane.svgcannabis.svgcapsules.svgcar-battery.svgcar-burst.svgcar-on.svgcar-rear.svgcar-side.svgcar-tunnel.svgcar.svgcaravan.svgcaret-down.svgcaret-left.svgcaret-right.svgcaret-up.svgcarrot.svgcart-arrow-down.svgcart-flatbed-suitcase.svgcart-flatbed.svgcart-plus.svgcart-shopping.svgcash-register.svgcat.svgcedi-sign.svgcent-sign.svgcertificate.svgchair.svgchalkboard-user.svgchalkboard.svgchampagne-glasses.svgcharging-station.svgchart-area.svgchart-bar.svgchart-column.svgchart-gantt.svgchart-line.svgchart-pie.svgchart-simple.svgcheck-double.svgcheck-to-slot.svgcheck.svgcheese.svgchess-bishop.svgchess-board.svgchess-king.svgchess-knight.svgchess-pawn.svgchess-queen.svgchess-rook.svgchess.svgchevron-down.svgchevron-left.svgchevron-right.svgchevron-up.svgchild-combatant.svgchild-dress.svgchild-reaching.svgchild.svgchildren.svgchurch.svgcircle-arrow-down.svgcircle-arrow-left.svgcircle-arrow-right.svgcircle-arrow-up.svgcircle-check.svgcircle-chevron-down.svgcircle-chevron-left.svgcircle-chevron-right.svgcircle-chevron-up.svgcircle-dollar-to-slot.svgcircle-dot.svgcircle-down.svgcircle-exclamation.svgcircle-h.svgcircle-half-stroke.svgcircle-info.svgcircle-left.svgcircle-minus.svgcircle-nodes.svgcircle-notch.svgcircle-pause.svgcircle-play.svgcircle-plus.svgcircle-question.svgcircle-radiation.svgcircle-right.svgcircle-stop.svgcircle-up.svgcircle-user.svgcircle-xmark.svgcircle.svgcity.svgclapperboard.svgclipboard-check.svgclipboard-list.svgclipboard-question.svgclipboard-user.svgclipboard.svgclock-rotate-left.svgclock.svgclone.svgclosed-captioning.svgcloud-arrow-down.svgcloud-arrow-up.svgcloud-bolt.svgcloud-meatball.svgcloud-moon-rain.svgcloud-moon.svgcloud-rain.svgcloud-showers-heavy.svgcloud-showers-water.svgcloud-sun-rain.svgcloud-sun.svgcloud.svgclover.svgcode-branch.svgcode-commit.svgcode-compare.svgcode-fork.svgcode-merge.svgcode-pull-request.svgcode.svgcoins.svgcolon-sign.svgcomment-dollar.svgcomment-dots.svgcomment-medical.svgcomment-slash.svgcomment-sms.svgcomment.svgcomments-dollar.svgcomments.svgcompact-disc.svgcompass-drafting.svgcompass.svgcompress.svgcomputer-mouse.svgcomputer.svgcookie-bite.svgcookie.svgcopy.svgcopyright.svgcouch.svgcow.svgcredit-card.svgcrop-simple.svgcrop.svgcross.svgcrosshairs.svgcrow.svgcrown.svgcrutch.svgcruzeiro-sign.svgcube.svgcubes-stacked.svgcubes.svgd.svgdatabase.svgdelete-left.svgdemocrat.svgdesktop.svgdharmachakra.svgdiagram-next.svgdiagram-predecessor.svgdiagram-project.svgdiagram-successor.svgdiamond-turn-right.svgdiamond.svgdice-d20.svgdice-d6.svgdice-five.svgdice-four.svgdice-one.svgdice-six.svgdice-three.svgdice-two.svgdice.svgdisease.svgdisplay.svgdivide.svgdna.svgdog.svgdollar-sign.svgdolly.svgdong-sign.svgdoor-closed.svgdoor-open.svgdove.svgdown-left-and-up-right-to-center.svgdown-long.svgdownload.svgdragon.svgdraw-polygon.svgdroplet-slash.svgdroplet.svgdrum-steelpan.svgdrum.svgdrumstick-bite.svgdumbbell.svgdumpster-fire.svgdumpster.svgdungeon.svge.svgear-deaf.svgear-listen.svgearth-africa.svgearth-americas.svgearth-asia.svgearth-europe.svgearth-oceania.svgegg.svgeject.svgelevator.svgellipsis-vertical.svgellipsis.svgenvelope-circle-check.svgenvelope-open-text.svgenvelope-open.svgenvelope.svgenvelopes-bulk.svgequals.svgeraser.svgethernet.svgeuro-sign.svgexclamation.svgexpand.svgexplosion.svgeye-dropper.svgeye-low-vision.svgeye-slash.svgeye.svgf.svgface-angry.svgface-dizzy.svgface-flushed.svgface-frown-open.svgface-frown.svgface-grimace.svgface-grin-beam-sweat.svgface-grin-beam.svgface-grin-hearts.svgface-grin-squint-tears.svgface-grin-squint.svgface-grin-stars.svgface-grin-tears.svgface-grin-tongue-squint.svgface-grin-tongue-wink.svgface-grin-tongue.svgface-grin-wide.svgface-grin-wink.svgface-grin.svgface-kiss-beam.svgface-kiss-wink-heart.svgface-kiss.svgface-laugh-beam.svgface-laugh-squint.svgface-laugh-wink.svgface-laugh.svgface-meh-blank.svgface-meh.svgface-rolling-eyes.svgface-sad-cry.svgface-sad-tear.svgface-smile-beam.svgface-smile-wink.svgface-smile.svgface-surprise.svgface-tired.svgfan.svgfaucet-drip.svgfaucet.svgfax.svgfeather-pointed.svgfeather.svgferry.svgfile-arrow-down.svgfile-arrow-up.svgfile-audio.svgfile-circle-check.svgfile-circle-exclamation.svgfile-circle-minus.svgfile-circle-plus.svgfile-circle-question.svgfile-circle-xmark.svgfile-code.svgfile-contract.svgfile-csv.svgfile-excel.svgfile-export.svgfile-image.svgfile-import.svgfile-invoice-dollar.svgfile-invoice.svgfile-lines.svgfile-medical.svgfile-pdf.svgfile-pen.svgfile-powerpoint.svgfile-prescription.svgfile-shield.svgfile-signature.svgfile-video.svgfile-waveform.svgfile-word.svgfile-zipper.svgfile.svgfill-drip.svgfill.svgfilm.svgfilter-circle-dollar.svgfilter-circle-xmark.svgfilter.svgfingerprint.svgfire-burner.svgfire-extinguisher.svgfire-flame-curved.svgfire-flame-simple.svgfire.svgfish-fins.svgfish.svgflag-checkered.svgflag-usa.svgflag.svgflask-vial.svgflask.svgfloppy-disk.svgflorin-sign.svgfolder-closed.svgfolder-minus.svgfolder-open.svgfolder-plus.svgfolder-tree.svgfolder.svgfont-awesome.svgfont.svgfootball.svgforward-fast.svgforward-step.svgforward.svgfranc-sign.svgfrog.svgfutbol.svgg.svggamepad.svggas-pump.svggauge-high.svggauge-simple-high.svggauge-simple.svggauge.svggavel.svggear.svggears.svggem.svggenderless.svgghost.svggift.svggifts.svgglass-water-droplet.svgglass-water.svgglasses.svgglobe.svggolf-ball-tee.svggopuram.svggraduation-cap.svggreater-than-equal.svggreater-than.svggrip-lines-vertical.svggrip-lines.svggrip-vertical.svggrip.svggroup-arrows-rotate.svgguarani-sign.svgguitar.svggun.svgh.svghammer.svghamsa.svghand-back-fist.svghand-dots.svghand-fist.svghand-holding-dollar.svghand-holding-droplet.svghand-holding-hand.svghand-holding-heart.svghand-holding-medical.svghand-holding.svghand-lizard.svghand-middle-finger.svghand-peace.svghand-point-down.svghand-point-left.svghand-point-right.svghand-point-up.svghand-pointer.svghand-scissors.svghand-sparkles.svghand-spock.svghand.svghandcuffs.svghands-asl-interpreting.svghands-bound.svghands-bubbles.svghands-clapping.svghands-holding-child.svghands-holding-circle.svghands-holding.svghands-praying.svghands.svghandshake-angle.svghandshake-simple-slash.svghandshake-simple.svghandshake-slash.svghandshake.svghanukiah.svghard-drive.svghashtag.svghat-cowboy-side.svghat-cowboy.svghat-wizard.svghead-side-cough-slash.svghead-side-cough.svghead-side-mask.svghead-side-virus.svgheading.svgheadphones-simple.svgheadphones.svgheadset.svgheart-circle-bolt.svgheart-circle-check.svgheart-circle-exclamation.svgheart-circle-minus.svgheart-circle-plus.svgheart-circle-xmark.svgheart-crack.svgheart-pulse.svgheart.svghelicopter-symbol.svghelicopter.svghelmet-safety.svghelmet-un.svghighlighter.svghill-avalanche.svghill-rockslide.svghippo.svghockey-puck.svgholly-berry.svghorse-head.svghorse.svghospital-user.svghospital.svghot-tub-person.svghotdog.svghotel.svghourglass-end.svghourglass-half.svghourglass-start.svghourglass.svghouse-chimney-crack.svghouse-chimney-medical.svghouse-chimney-user.svghouse-chimney-window.svghouse-chimney.svghouse-circle-check.svghouse-circle-exclamation.svghouse-circle-xmark.svghouse-crack.svghouse-fire.svghouse-flag.svghouse-flood-water-circle-arrow-right.svghouse-flood-water.svghouse-laptop.svghouse-lock.svghouse-medical-circle-check.svghouse-medical-circle-exclamation.svghouse-medical-circle-xmark.svghouse-medical-flag.svghouse-medical.svghouse-signal.svghouse-tsunami.svghouse-user.svghouse.svghryvnia-sign.svghurricane.svgi-cursor.svgi.svgice-cream.svgicicles.svgicons.svgid-badge.svgid-card-clip.svgid-card.svgigloo.svgimage-portrait.svgimage.svgimages.svginbox.svgindent.svgindian-rupee-sign.svgindustry.svginfinity.svginfo.svgitalic.svgj.svgjar-wheat.svgjar.svgjedi.svgjet-fighter-up.svgjet-fighter.svgjoint.svgjug-detergent.svgk.svgkaaba.svgkey.svgkeyboard.svgkhanda.svgkip-sign.svgkit-medical.svgkitchen-set.svgkiwi-bird.svgl.svgland-mine-on.svglandmark-dome.svglandmark-flag.svglandmark.svglanguage.svglaptop-code.svglaptop-file.svglaptop-medical.svglaptop.svglari-sign.svglayer-group.svgleaf.svgleft-long.svgleft-right.svglemon.svgless-than-equal.svgless-than.svglife-ring.svglightbulb.svglines-leaning.svglink-slash.svglink.svglira-sign.svglist-check.svglist-ol.svglist-ul.svglist.svglitecoin-sign.svglocation-arrow.svglocation-crosshairs.svglocation-dot.svglocation-pin-lock.svglocation-pin.svglock-open.svglock.svglocust.svglungs-virus.svglungs.svgm.svgmagnet.svgmagnifying-glass-arrow-right.svgmagnifying-glass-chart.svgmagnifying-glass-dollar.svgmagnifying-glass-location.svgmagnifying-glass-minus.svgmagnifying-glass-plus.svgmagnifying-glass.svgmanat-sign.svgmap-location-dot.svgmap-location.svgmap-pin.svgmap.svgmarker.svgmars-and-venus-burst.svgmars-and-venus.svgmars-double.svgmars-stroke-right.svgmars-stroke-up.svgmars-stroke.svgmars.svgmartini-glass-citrus.svgmartini-glass-empty.svgmartini-glass.svgmask-face.svgmask-ventilator.svgmask.svgmasks-theater.svgmattress-pillow.svgmaximize.svgmedal.svgmemory.svgmenorah.svgmercury.svgmessage.svgmeteor.svgmicrochip.svgmicrophone-lines-slash.svgmicrophone-lines.svgmicrophone-slash.svgmicrophone.svgmicroscope.svgmill-sign.svgminimize.svgminus.svgmitten.svgmobile-button.svgmobile-retro.svgmobile-screen-button.svgmobile-screen.svgmobile.svgmoney-bill-1-wave.svgmoney-bill-1.svgmoney-bill-transfer.svgmoney-bill-trend-up.svgmoney-bill-wave.svgmoney-bill-wheat.svgmoney-bill.svgmoney-bills.svgmoney-check-dollar.svgmoney-check.svgmonument.svgmoon.svgmortar-pestle.svgmosque.svgmosquito-net.svgmosquito.svgmotorcycle.svgmound.svgmountain-city.svgmountain-sun.svgmountain.svgmug-hot.svgmug-saucer.svgmusic.svgn.svgnaira-sign.svgnetwork-wired.svgneuter.svgnewspaper.svgnot-equal.svgnotdef.svgnote-sticky.svgnotes-medical.svgo.svgobject-group.svgobject-ungroup.svgoil-can.svgoil-well.svgom.svgotter.svgoutdent.svgp.svgpager.svgpaint-roller.svgpaintbrush.svgpalette.svgpallet.svgpanorama.svgpaper-plane.svgpaperclip.svgparachute-box.svgparagraph.svgpassport.svgpaste.svgpause.svgpaw.svgpeace.svgpen-clip.svgpen-fancy.svgpen-nib.svgpen-ruler.svgpen-to-square.svgpen.svgpencil.svgpeople-arrows.svgpeople-carry-box.svgpeople-group.svgpeople-line.svgpeople-pulling.svgpeople-robbery.svgpeople-roof.svgpepper-hot.svgpercent.svgperson-arrow-down-to-line.svgperson-arrow-up-from-line.svgperson-biking.svgperson-booth.svgperson-breastfeeding.svgperson-burst.svgperson-cane.svgperson-chalkboard.svgperson-circle-check.svgperson-circle-exclamation.svgperson-circle-minus.svgperson-circle-plus.svgperson-circle-question.svgperson-circle-xmark.svgperson-digging.svgperson-dots-from-line.svgperson-dress-burst.svgperson-dress.svgperson-drowning.svgperson-falling-burst.svgperson-falling.svgperson-half-dress.svgperson-harassing.svgperson-hiking.svgperson-military-pointing.svgperson-military-rifle.svgperson-military-to-person.svgperson-praying.svgperson-pregnant.svgperson-rays.svgperson-rifle.svgperson-running.svgperson-shelter.svgperson-skating.svgperson-skiing-nordic.svgperson-skiing.svgperson-snowboarding.svgperson-swimming.svgperson-through-window.svgperson-walking-arrow-loop-left.svgperson-walking-arrow-right.svgperson-walking-dashed-line-arrow-right.svgperson-walking-luggage.svgperson-walking-with-cane.svgperson-walking.svgperson.svgpeseta-sign.svgpeso-sign.svgphone-flip.svgphone-slash.svgphone-volume.svgphone.svgphoto-film.svgpiggy-bank.svgpills.svgpizza-slice.svgplace-of-worship.svgplane-arrival.svgplane-circle-check.svgplane-circle-exclamation.svgplane-circle-xmark.svgplane-departure.svgplane-lock.svgplane-slash.svgplane-up.svgplane.svgplant-wilt.svgplate-wheat.svgplay.svgplug-circle-bolt.svgplug-circle-check.svgplug-circle-exclamation.svgplug-circle-minus.svgplug-circle-plus.svgplug-circle-xmark.svgplug.svgplus-minus.svgplus.svgpodcast.svgpoo-storm.svgpoo.svgpoop.svgpower-off.svgprescription-bottle-medical.svgprescription-bottle.svgprescription.svgprint.svgpump-medical.svgpump-soap.svgpuzzle-piece.svgq.svgqrcode.svgquestion.svgquote-left.svgquote-right.svgr.svgradiation.svgradio.svgrainbow.svgranking-star.svgreceipt.svgrecord-vinyl.svgrectangle-ad.svgrectangle-list.svgrectangle-xmark.svgrecycle.svgregistered.svgrepeat.svgreply-all.svgreply.svgrepublican.svgrestroom.svgretweet.svgribbon.svgright-from-bracket.svgright-left.svgright-long.svgright-to-bracket.svgring.svgroad-barrier.svgroad-bridge.svgroad-circle-check.svgroad-circle-exclamation.svgroad-circle-xmark.svgroad-lock.svgroad-spikes.svgroad.svgrobot.svgrocket.svgrotate-left.svgrotate-right.svgrotate.svgroute.svgrss.svgruble-sign.svgrug.svgruler-combined.svgruler-horizontal.svgruler-vertical.svgruler.svgrupee-sign.svgrupiah-sign.svgs.svgsack-dollar.svgsack-xmark.svgsailboat.svgsatellite-dish.svgsatellite.svgscale-balanced.svgscale-unbalanced-flip.svgscale-unbalanced.svgschool-circle-check.svgschool-circle-exclamation.svgschool-circle-xmark.svgschool-flag.svgschool-lock.svgschool.svgscissors.svgscrewdriver-wrench.svgscrewdriver.svgscroll-torah.svgscroll.svgsd-card.svgsection.svgseedling.svgserver.svgshapes.svgshare-from-square.svgshare-nodes.svgshare.svgsheet-plastic.svgshekel-sign.svgshield-cat.svgshield-dog.svgshield-halved.svgshield-heart.svgshield-virus.svgshield.svgship.svgshirt.svgshoe-prints.svgshop-lock.svgshop-slash.svgshop.svgshower.svgshrimp.svgshuffle.svgshuttle-space.svgsign-hanging.svgsignal.svgsignature.svgsigns-post.svgsim-card.svgsink.svgsitemap.svgskull-crossbones.svgskull.svgslash.svgsleigh.svgsliders.svgsmog.svgsmoking.svgsnowflake.svgsnowman.svgsnowplow.svgsoap.svgsocks.svgsolar-panel.svgsort-down.svgsort-up.svgsort.svgspa.svgspaghetti-monster-flying.svgspell-check.svgspider.svgspinner.svgsplotch.svgspoon.svgspray-can-sparkles.svgspray-can.svgsquare-arrow-up-right.svgsquare-caret-down.svgsquare-caret-left.svgsquare-caret-right.svgsquare-caret-up.svgsquare-check.svgsquare-envelope.svgsquare-full.svgsquare-h.svgsquare-minus.svgsquare-nfi.svgsquare-parking.svgsquare-pen.svgsquare-person-confined.svgsquare-phone-flip.svgsquare-phone.svgsquare-plus.svgsquare-poll-horizontal.svgsquare-poll-vertical.svgsquare-root-variable.svgsquare-rss.svgsquare-share-nodes.svgsquare-up-right.svgsquare-virus.svgsquare-xmark.svgsquare.svgstaff-snake.svgstairs.svgstamp.svgstapler.svgstar-and-crescent.svgstar-half-stroke.svgstar-half.svgstar-of-david.svgstar-of-life.svgstar.svgsterling-sign.svgstethoscope.svgstop.svgstopwatch-20.svgstopwatch.svgstore-slash.svgstore.svgstreet-view.svgstrikethrough.svgstroopwafel.svgsubscript.svgsuitcase-medical.svgsuitcase-rolling.svgsuitcase.svgsun-plant-wilt.svgsun.svgsuperscript.svgswatchbook.svgsynagogue.svgsyringe.svgt.svgtable-cells-column-lock.svgtable-cells-large.svgtable-cells-row-lock.svgtable-cells.svgtable-columns.svgtable-list.svgtable-tennis-paddle-ball.svgtable.svgtablet-button.svgtablet-screen-button.svgtablet.svgtablets.svgtachograph-digital.svgtag.svgtags.svgtape.svgtarp-droplet.svgtarp.svgtaxi.svgteeth-open.svgteeth.svgtemperature-arrow-down.svgtemperature-arrow-up.svgtemperature-empty.svgtemperature-full.svgtemperature-half.svgtemperature-high.svgtemperature-low.svgtemperature-quarter.svgtemperature-three-quarters.svgtenge-sign.svgtent-arrow-down-to-line.svgtent-arrow-left-right.svgtent-arrow-turn-left.svgtent-arrows-down.svgtent.svgtents.svgterminal.svgtext-height.svgtext-slash.svgtext-width.svgthermometer.svgthumbs-down.svgthumbs-up.svgthumbtack.svgticket-simple.svgticket.svgtimeline.svgtoggle-off.svgtoggle-on.svgtoilet-paper-slash.svgtoilet-paper.svgtoilet-portable.svgtoilet.svgtoilets-portable.svgtoolbox.svgtooth.svgtorii-gate.svgtornado.svgtower-broadcast.svgtower-cell.svgtower-observation.svgtractor.svgtrademark.svgtraffic-light.svgtrailer.svgtrain-subway.svgtrain-tram.svgtrain.svgtransgender.svgtrash-arrow-up.svgtrash-can-arrow-up.svgtrash-can.svgtrash.svgtree-city.svgtree.svgtriangle-exclamation.svgtrophy.svgtrowel-bricks.svgtrowel.svgtruck-arrow-right.svgtruck-droplet.svgtruck-fast.svgtruck-field-un.svgtruck-field.svgtruck-front.svgtruck-medical.svgtruck-monster.svgtruck-moving.svgtruck-pickup.svgtruck-plane.svgtruck-ramp-box.svgtruck.svgtty.svgturkish-lira-sign.svgturn-down.svgturn-up.svgtv.svgu.svgumbrella-beach.svgumbrella.svgunderline.svguniversal-access.svgunlock-keyhole.svgunlock.svgup-down-left-right.svgup-down.svgup-long.svgup-right-and-down-left-from-center.svgup-right-from-square.svgupload.svguser-astronaut.svguser-check.svguser-clock.svguser-doctor.svguser-gear.svguser-graduate.svguser-group.svguser-injured.svguser-large-slash.svguser-large.svguser-lock.svguser-minus.svguser-ninja.svguser-nurse.svguser-pen.svguser-plus.svguser-secret.svguser-shield.svguser-slash.svguser-tag.svguser-tie.svguser-xmark.svguser.svgusers-between-lines.svgusers-gear.svgusers-line.svgusers-rays.svgusers-rectangle.svgusers-slash.svgusers-viewfinder.svgusers.svgutensils.svgv.svgvan-shuttle.svgvault.svgvector-square.svgvenus-double.svgvenus-mars.svgvenus.svgvest-patches.svgvest.svgvial-circle-check.svgvial-virus.svgvial.svgvials.svgvideo-slash.svgvideo.svgvihara.svgvirus-covid-slash.svgvirus-covid.svgvirus-slash.svgvirus.svgviruses.svgvoicemail.svgvolcano.svgvolleyball.svgvolume-high.svgvolume-low.svgvolume-off.svgvolume-xmark.svgvr-cardboard.svgw.svgwalkie-talkie.svgwallet.svgwand-magic-sparkles.svgwand-magic.svgwand-sparkles.svgwarehouse.svgwater-ladder.svgwater.svgwave-square.svgweight-hanging.svgweight-scale.svgwheat-awn-circle-exclamation.svgwheat-awn.svgwheelchair-move.svgwheelchair.svgwhiskey-glass.svgwifi.svgwind.svgwindow-maximize.svgwindow-minimize.svgwindow-restore.svgwine-bottle.svgwine-glass-empty.svgwine-glass.svgwon-sign.svgworm.svgwrench.svgx-ray.svgx.svgxmark.svgxmarks-lines.svgy.svgyen-sign.svgyin-yang.svgz.svg
templates
src

@@ -34,22 +34,67 @@ jobs:
- name: Copy OAuth build to static
run: |
mkdir -p my-blog/static/assets
cp -r oauth/dist/assets/* my-blog/static/assets/
cp oauth/dist/index.html my-blog/static/oauth/index.html || true
# Remove old assets (following run.zsh pattern)
rm -rf my-blog/static/assets
# Copy all dist files to static
cp -rf oauth/dist/* my-blog/static/
# Copy index.html to oauth-assets.html template
cp oauth/dist/index.html my-blog/templates/oauth-assets.html
- name: Setup Rust
uses: actions-rs/toolchain@v1
- name: Cache ailog binary
uses: actions/cache@v4
with:
toolchain: stable
- name: Build ailog
run: cargo build --release
path: ./bin
key: ailog-bin-${{ runner.os }}
restore-keys: |
ailog-bin-${{ runner.os }}
- name: Setup ailog binary
run: |
# Get expected version from Cargo.toml
EXPECTED_VERSION=$(grep '^version' Cargo.toml | cut -d'"' -f2)
echo "Expected version from Cargo.toml: $EXPECTED_VERSION"
# Check current binary version if exists
if [ -f "./bin/ailog" ]; then
CURRENT_VERSION=$(./bin/ailog --version 2>/dev/null || echo "unknown")
echo "Current binary version: $CURRENT_VERSION"
else
CURRENT_VERSION="none"
echo "No binary found"
fi
# Check OS
OS="${{ runner.os }}"
echo "Runner OS: $OS"
# Use pre-packaged binary if version matches or extract from tar.gz
if [ "$CURRENT_VERSION" = "$EXPECTED_VERSION" ]; then
echo "Binary is up to date"
chmod +x ./bin/ailog
elif [ "$OS" = "Linux" ] && [ -f "./bin/ailog-linux-x86_64.tar.gz" ]; then
echo "Extracting ailog from pre-packaged tar.gz..."
cd bin
tar -xzf ailog-linux-x86_64.tar.gz
chmod +x ailog
cd ..
# Verify extracted version
EXTRACTED_VERSION=$(./bin/ailog --version 2>/dev/null || echo "unknown")
echo "Extracted binary version: $EXTRACTED_VERSION"
if [ "$EXTRACTED_VERSION" != "$EXPECTED_VERSION" ]; then
echo "Warning: Binary version mismatch. Expected $EXPECTED_VERSION but got $EXTRACTED_VERSION"
fi
else
echo "Error: No suitable binary found for OS: $OS"
exit 1
fi
- name: Build site with ailog
run: |
cd my-blog
../target/release/ailog build
../bin/ailog build
- name: List public directory
run: |

@@ -0,0 +1,92 @@
name: github pages (fast)
on:
push:
branches:
- main
paths-ignore:
- 'src/**'
- 'Cargo.toml'
- 'Cargo.lock'
jobs:
build-deploy:
runs-on: ubuntu-latest
permissions:
contents: write
pages: write
id-token: write
steps:
- uses: actions/checkout@v4
- name: Cache ailog binary
uses: actions/cache@v4
with:
path: ./bin
key: ailog-bin-${{ runner.os }}
restore-keys: |
ailog-bin-${{ runner.os }}
- name: Setup ailog binary
run: |
# Get expected version from Cargo.toml
EXPECTED_VERSION=$(grep '^version' Cargo.toml | cut -d'"' -f2)
echo "Expected version from Cargo.toml: $EXPECTED_VERSION"
# Check current binary version if exists
if [ -f "./bin/ailog" ]; then
CURRENT_VERSION=$(./bin/ailog --version 2>/dev/null || echo "unknown")
echo "Current binary version: $CURRENT_VERSION"
else
CURRENT_VERSION="none"
echo "No binary found"
fi
# Check OS
OS="${{ runner.os }}"
echo "Runner OS: $OS"
# Use pre-packaged binary if version matches or extract from tar.gz
if [ "$CURRENT_VERSION" = "$EXPECTED_VERSION" ]; then
echo "Binary is up to date"
chmod +x ./bin/ailog
elif [ "$OS" = "Linux" ] && [ -f "./bin/ailog-linux-x86_64.tar.gz" ]; then
echo "Extracting ailog from pre-packaged tar.gz..."
cd bin
tar -xzf ailog-linux-x86_64.tar.gz
chmod +x ailog
cd ..
# Verify extracted version
EXTRACTED_VERSION=$(./bin/ailog --version 2>/dev/null || echo "unknown")
echo "Extracted binary version: $EXTRACTED_VERSION"
if [ "$EXTRACTED_VERSION" != "$EXPECTED_VERSION" ]; then
echo "Warning: Binary version mismatch. Expected $EXPECTED_VERSION but got $EXTRACTED_VERSION"
fi
else
echo "Error: No suitable binary found for OS: $OS"
exit 1
fi
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: "0.139.2"
extended: true
- name: Build with ailog
env:
TZ: "Asia/Tokyo"
run: |
# Use pre-built ailog binary instead of cargo build
cd my-blog
../bin/ailog build
touch ./public/.nojekyll
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./my-blog/public
publish_branch: gh-pages

169
.github/workflows/release.yml vendored Normal file

@@ -0,0 +1,169 @@
name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
tag:
description: 'Release tag (e.g., v1.0.0)'
required: true
default: 'v0.1.0'
permissions:
contents: write
actions: read
env:
CARGO_TERM_COLOR: always
OPENSSL_STATIC: true
OPENSSL_VENDOR: true
jobs:
build:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
timeout-minutes: 60
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
artifact_name: ailog
asset_name: ailog-linux-x86_64
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
artifact_name: ailog
asset_name: ailog-linux-aarch64
- target: x86_64-apple-darwin
os: macos-latest
artifact_name: ailog
asset_name: ailog-macos-x86_64
- target: aarch64-apple-darwin
os: macos-latest
artifact_name: ailog
asset_name: ailog-macos-aarch64
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install cross-compilation tools (Linux)
if: matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
- name: Configure cross-compilation (Linux ARM64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
echo '[target.aarch64-unknown-linux-gnu]' >> ~/.cargo/config.toml
echo 'linker = "aarch64-linux-gnu-gcc"' >> ~/.cargo/config.toml
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Cache target directory
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-${{ matrix.target }}-target-${{ hashFiles('**/Cargo.lock') }}
- name: Build
run: cargo build --release --target ${{ matrix.target }}
- name: Prepare binary
shell: bash
run: |
cd target/${{ matrix.target }}/release
# Use appropriate strip command for cross-compilation
if [[ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]]; then
aarch64-linux-gnu-strip ${{ matrix.artifact_name }} || echo "Strip failed, continuing..."
elif [[ "${{ matrix.os }}" == "windows-latest" ]]; then
strip ${{ matrix.artifact_name }} || echo "Strip failed, continuing..."
else
strip ${{ matrix.artifact_name }} || echo "Strip failed, continuing..."
fi
# Create archive
if [[ "${{ matrix.target }}" == *"windows"* ]]; then
7z a ../../../${{ matrix.asset_name }}.zip ${{ matrix.artifact_name }}
else
tar czvf ../../../${{ matrix.asset_name }}.tar.gz ${{ matrix.artifact_name }}
fi
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.asset_name }}
path: ${{ matrix.asset_name }}.tar.gz
release:
name: Create Release
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
actions: read
steps:
- uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Generate release notes
run: |
echo "## What's Changed" > release_notes.md
echo "" >> release_notes.md
echo "### Features" >> release_notes.md
echo "- AI-powered static blog generator" >> release_notes.md
echo "- AtProto OAuth integration" >> release_notes.md
echo "- Automatic translation support" >> release_notes.md
echo "- AI comment system" >> release_notes.md
echo "" >> release_notes.md
echo "### Platforms" >> release_notes.md
echo "- Linux (x86_64, aarch64)" >> release_notes.md
echo "- macOS (Intel, Apple Silicon)" >> release_notes.md
echo "" >> release_notes.md
echo "### Installation" >> release_notes.md
echo "\`\`\`bash" >> release_notes.md
echo "# Linux/macOS" >> release_notes.md
echo "tar -xzf ailog-linux-x86_64.tar.gz" >> release_notes.md
echo "chmod +x ailog" >> release_notes.md
echo "sudo mv ailog /usr/local/bin/" >> release_notes.md
echo "" >> release_notes.md
echo "\`\`\`" >> release_notes.md
- name: Get tag name
id: tag_name
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "tag=${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT
else
echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
fi
- name: Create Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.tag_name.outputs.tag }}
name: ailog ${{ steps.tag_name.outputs.tag }}
body_path: release_notes.md
draft: false
prerelease: ${{ contains(steps.tag_name.outputs.tag, 'alpha') || contains(steps.tag_name.outputs.tag, 'beta') || contains(steps.tag_name.outputs.tag, 'rc') }}
files: artifacts/*/ailog-*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}