forked from sqlc-dev/sqlc-gen-typescript
-
Notifications
You must be signed in to change notification settings - Fork 0
146 lines (137 loc) · 5.16 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
name: ci
on:
push:
branches:
- main
pull_request:
jobs:
build_and_test:
services:
postgres:
image: postgres
env:
POSTGRES_USER: test
POSTGRES_PASSWORD: test
POSTGRES_DB: test
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5439:5432
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: sqlc-dev/setup-sqlc@v4
with:
sqlc-version: '1.27.0'
- uses: oven-sh/setup-bun@v2
- run: wget https://github.com/bytecodealliance/javy/releases/download/v4.0.0/javy-x86_64-linux-v4.0.0.gz
- run: gzip -d javy-x86_64-linux-v4.0.0.gz
- run: chmod +x javy-x86_64-linux-v4.0.0
- run: bun install
- run: bun build --entrypoints ./src/app.ts --outfile=out.js --minify --target browser
- run: ./javy-x86_64-linux-v4.0.0 build out.js -o plugin.wasm
- name: Run tests
run: cd test && bun run test
- id: calculate_sha256
run: |
sha256sum plugin.wasm > plugin.wasm.sha256
SHA256=$(cat plugin.wasm.sha256 | awk '{ print $1 }')
echo "::set-output name=sha256::$SHA256"
- name: Set outputs
id: vars
run: echo "tag_name=v$(date +'%Y%m%d.%H%M%S')_$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Create GitHub Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.vars.outputs.tag_name }}
release_name: Nightly Release
draft: false
prerelease: false
- name: Upload Plugin WASM to Release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: plugin.wasm
asset_name: plugin.wasm
asset_content_type: application/wasm
- name: Upload Plugin WASM SHA256 to Release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: plugin.wasm.sha256
asset_name: plugin.wasm.sha256
asset_content_type: text/plain
- name: Update Release Description with SHA256 and Commits
uses: actions/github-script@v4
env:
tag: ${{ steps.vars.outputs.tag_name }}
sha256: ${{ steps.calculate_sha256.outputs.sha256 }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
script: |
const { tag, sha256 } = process.env;
// Retrieve all releases to identify current and previous releases
const { data: releases } = await github.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo,
});
// Find the current release
const currentRelease = releases.find(r => r.tag_name === tag);
if (!currentRelease) {
throw new Error(`Cannot find release for tag ${tag}`);
}
// Sort releases by creation date, descending
const sortedReleases = releases.sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
// Find the current release index, then take the next release as the previous
const currentIndex = sortedReleases.findIndex(r => r.id === currentRelease.id);
const previousRelease = sortedReleases[currentIndex + 1];
let commitsDescription = "";
// If theres a previous release, compare commits; otherwise note that no previous release was found
if (previousRelease) {
const { data: compare } = await github.repos.compareCommits({
owner: context.repo.owner,
repo: context.repo.repo,
base: previousRelease.tag_name,
head: tag
});
// Build a simple list of commit messages and short SHAs
commitsDescription = compare.commits
.map(commit => `- ${commit.commit.message} (${commit.sha.substring(0, 7)})`)
.join("\n");
} else {
commitsDescription = "No previous release found.";
}
// Retrieve the current release details by its tag
const { data: release } = await github.repos.getReleaseByTag({
owner: context.repo.owner,
repo: context.repo.repo,
tag: tag
});
// Construct the new body with plugin info and commit list
const newBody = `\`\`\`yml
plugins:
- name: ts
wasm:
url: https://github.com/eEQK/sqlc-gen-typescript/releases/download/${tag}/plugin.wasm
sha256: ${sha256}
\`\`\`
Commits since last release:
${commitsDescription}
`;
// Update the release description
await github.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.id,
body: newBody
});