110 lines
4.0 KiB
YAML
110 lines
4.0 KiB
YAML
name: Publish
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
publish:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Cache Bun binary
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.bun
|
|
key: bun-v1.3.3-${{ runner.os }}
|
|
|
|
- name: Setup Bun
|
|
run: |
|
|
if ! [ -f "$HOME/.bun/bin/bun" ]; then
|
|
curl -fsSL https://bun.sh/install | bash -s "bun-v1.3.3"
|
|
fi
|
|
echo "$HOME/.bun/bin" >> $GITHUB_PATH
|
|
|
|
- name: Set version from tag
|
|
run: |
|
|
VERSION=${GITHUB_REF_NAME#v}
|
|
echo "Setting package version to $VERSION"
|
|
bun -e "const fs=require('fs'); const pkg=JSON.parse(fs.readFileSync('package.json','utf8')); pkg.version='${VERSION}'; fs.writeFileSync('package.json',JSON.stringify(pkg,null,2)+'\n');"
|
|
SHA=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" \
|
|
"https://git.blassanto.me/api/v1/repos/blas/openapi-clean-arch-gen/contents/package.json?ref=main" \
|
|
| bun -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d).sha))")
|
|
CONTENT=$(base64 -w 0 package.json)
|
|
curl -s -X PUT \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
"https://git.blassanto.me/api/v1/repos/blas/openapi-clean-arch-gen/contents/package.json" \
|
|
-d "{\"message\":\"chore: bump to version v${VERSION}\",\"content\":\"${CONTENT}\",\"sha\":\"${SHA}\",\"branch\":\"main\"}"
|
|
env:
|
|
GITEA_TOKEN: ${{ secrets.TOKEN }}
|
|
|
|
- name: Cache dependencies
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.bun/install/cache
|
|
key: ${{ runner.os }}-bun-deps-${{ hashFiles('bun.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-bun-deps-
|
|
|
|
- name: Install dependencies
|
|
run: bun install --frozen-lockfile
|
|
|
|
- name: Lint
|
|
run: bun run lint
|
|
|
|
- name: Build
|
|
run: bun run build
|
|
|
|
- name: Build binaries
|
|
run: bun run binaries
|
|
|
|
- name: Configure npm registry auth
|
|
run: |
|
|
echo "registry=https://registry.npmjs.org" >> ~/.npmrc
|
|
echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}" >> ~/.npmrc
|
|
cat >> ~/.bunfig.toml << EOF
|
|
[install.scopes]
|
|
"@0kmpo" = { registry = "https://registry.npmjs.org", token = "${NODE_AUTH_TOKEN}" }
|
|
EOF
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
- name: Publish to npm registry
|
|
run: bun publish --access public
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
- name: Create Gitea release and upload binaries
|
|
run: |
|
|
VERSION=${GITHUB_REF_NAME#v}
|
|
|
|
RELEASE_ID=$(curl -s -X POST \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
"https://git.blassanto.me/api/v1/repos/blas/openapi-clean-arch-gen/releases" \
|
|
-d "{
|
|
\"tag_name\": \"${GITHUB_REF_NAME}\",
|
|
\"name\": \"v${VERSION}\",
|
|
\"body\": \"## Installation\n\nDownload the binary for your platform or install via the npm registry:\n\n\`\`\`bash\nbun add -g @blas/openapi-clean-arch-generator --registry https://git.blassanto.me/api/packages/blas/npm/\n\`\`\`\",
|
|
\"draft\": false,
|
|
\"prerelease\": false
|
|
}" | bun -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d).id))")
|
|
|
|
echo "Created release ID: $RELEASE_ID"
|
|
|
|
for BINARY in dist/bin/*; do
|
|
FILENAME=$(basename "$BINARY")
|
|
echo "Uploading $FILENAME..."
|
|
curl -s -X POST \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
-F "attachment=@${BINARY};filename=${FILENAME}" \
|
|
"https://git.blassanto.me/api/v1/repos/blas/openapi-clean-arch-gen/releases/${RELEASE_ID}/assets"
|
|
done
|
|
env:
|
|
GITEA_TOKEN: ${{ secrets.TOKEN }}
|
|
|