Mirror: The highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.

feat(workspace): post to discord when we release new packages (#3028)

Changed files
+224 -15
.github
actions
discord-message
workflows
+56
.github/actions/discord-message/action.js
···
+
import * as core from "@actions/core";
+
import * as github from "@actions/github";
+
import fetch from 'node-fetch';
+
+
const GITHUB_TOKEN = process.env.GITHUB_TOKEN;
+
const WEBHOOK_URL = process.env.DISCORD_URQL_WEBHOOK_URL;
+
+
async function main() {
+
const octokit = github.getOctokit(GITHUB_TOKEN);
+
+
const inputPackages = core.getInput("publishedPackages");
+
let packages;
+
+
try {
+
packages = JSON.parse(inputPackages)
+
} catch (e) {
+
console.error('invalid JSON in publishedPackages input.')
+
return;
+
}
+
+
// Get releases
+
const releasePromises = packages.map(entry => {
+
return octokit.rest.repos.getReleaseByTag({
+
owner: 'urql-graphql',
+
repo: 'urql',
+
tag: `${entry.name}@${entry.version}`
+
})
+
})
+
+
const releases = await Promise.allSettled(releasePromises)
+
+
// Construct message
+
const text = releases.map((release) => {
+
const { name: title, body: changes, html_url: url } = release;
+
+
return `:package: ${title}\n${changes}\n${url}`;
+
}, '').join('\n\n')
+
+
// Send message through a discord webhook or bot
+
const response = fetch(WEBHOOK_URL, {
+
method: 'POST',
+
headers: {
+
'Content-Type': 'application/json',
+
},
+
body: JSON.stringify({ username: 'philpl', content: `:bell: urql Release day!\n${text}` })
+
})
+
+
if (!response.ok) {
+
console.log('Something went wrong while sending the discord webhook.');
+
return;
+
}
+
+
return response;
+
}
+
+
main().then().catch(console.error)
+9
.github/actions/discord-message/action.yml
···
+
name: 'Send a discord message'
+
description: 'Send a discord message as a result of an urql publish.'
+
inputs:
+
publishedPackages:
+
description: >
+
A JSON array to present the published packages. The format is `[{"name": "@xx/xx", "version": "1.2.0"}, {"name": "@xx/xy", "version": "0.8.9"}]`
+
runs:
+
using: 'node16'
+
main: 'action.js'
+10
.github/workflows/release.yml
···
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
- name: Notify discord
+
id: discord-msg
+
if: steps.changesets.outputs.published == 'true'
+
uses: ./.github/actions/discord-message
+
with:
+
publishedPackages: steps.changesets.outputs.publishedPackages
+
env:
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
DISCORD_URQL_WEBHOOK_URL: ${{ secrets.DISCORD_URQL_WEBHOOK_URL }}
+
- name: Publish Prerelease
if: steps.changesets.outputs.published != 'true'
env:
+4
package.json
···
"vite": "^3.0.0",
"vite-tsconfig-paths": "^4.0.0-alpha.3",
"vitest": "^0.29.0"
+
},
+
"dependencies": {
+
"@actions/github": "^5.1.1",
+
"node-fetch": "^3.3.0"
}
}
+145 -15
pnpm-lock.yaml
···
specifiers:
'@actions/artifact': ^1.1.0
'@actions/core': ^1.10.0
+
'@actions/github': ^5.1.1
'@babel/core': ^7.20.2
'@babel/plugin-transform-block-scoping': ^7.20.2
'@babel/plugin-transform-react-jsx': ^7.19.0
···
invariant: ^2.2.4
jsdom: ^20.0.3
lint-staged: ^10.5.4
+
node-fetch: ^3.3.0
npm-packlist: ^2.1.5
npm-run-all: ^4.1.5
prettier: ^2.2.1
···
vite: ^3.0.0
vite-tsconfig-paths: ^4.0.0-alpha.3
vitest: ^0.29.0
+
dependencies:
+
'@actions/github': 5.1.1
+
node-fetch: 3.3.0
devDependencies:
'@actions/artifact': 1.1.0
'@actions/core': 1.10.0
···
uuid: 8.3.2
dev: true
+
/@actions/github/5.1.1:
+
resolution: {integrity: sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==}
+
dependencies:
+
'@actions/http-client': 2.0.1
+
'@octokit/core': 3.6.0
+
'@octokit/plugin-paginate-rest': 2.21.3_@octokit+core@3.6.0
+
'@octokit/plugin-rest-endpoint-methods': 5.16.2_@octokit+core@3.6.0
+
transitivePeerDependencies:
+
- encoding
+
dev: false
+
/@actions/http-client/2.0.1:
resolution: {integrity: sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==}
dependencies:
tunnel: 0.0.6
-
dev: true
/@ampproject/remapping/2.2.0:
resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
···
resolution: {integrity: sha512-vm5VgHwrxkMkUjFyn3UVNKLbDp9YMHd3vMf1IyJoa/7B+6VpqmtAaXyDS0zBLfN5bhzVCHrRnj4GcZXXcqrFTw==}
dependencies:
dataloader: 1.4.0
-
node-fetch: 2.6.1
+
node-fetch: 2.6.9
+
transitivePeerDependencies:
+
- encoding
dev: true
/@changesets/get-release-plan/3.0.16:
···
resolution: {integrity: sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==}
dependencies:
'@octokit/types': 6.14.2
-
dev: true
/@octokit/core/2.5.4:
resolution: {integrity: sha512-HCp8yKQfTITYK+Nd09MHzAlP1v3Ii/oCohv0/TW9rhSLvzb98BOVs2QmVYuloE6a3l6LsfyGIwb6Pc4ycgWlIQ==}
···
before-after-hook: 2.2.1
universal-user-agent: 5.0.0
dev: true
+
+
/@octokit/core/3.6.0:
+
resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==}
+
dependencies:
+
'@octokit/auth-token': 2.4.5
+
'@octokit/graphql': 4.6.1
+
'@octokit/request': 5.6.3
+
'@octokit/request-error': 2.0.5
+
'@octokit/types': 6.14.2
+
before-after-hook: 2.2.1
+
universal-user-agent: 6.0.0
+
transitivePeerDependencies:
+
- encoding
+
dev: false
/@octokit/endpoint/6.0.11:
resolution: {integrity: sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==}
dependencies:
-
'@octokit/types': 6.14.2
+
'@octokit/types': 6.41.0
is-plain-object: 5.0.0
universal-user-agent: 6.0.0
-
dev: true
/@octokit/graphql/4.6.1:
resolution: {integrity: sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA==}
dependencies:
-
'@octokit/request': 5.4.15
+
'@octokit/request': 5.6.3
'@octokit/types': 6.14.2
universal-user-agent: 6.0.0
-
dev: true
+
transitivePeerDependencies:
+
- encoding
+
+
/@octokit/openapi-types/12.11.0:
+
resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==}
/@octokit/openapi-types/7.0.0:
resolution: {integrity: sha512-gV/8DJhAL/04zjTI95a7FhQwS6jlEE0W/7xeYAzuArD0KVAVWDLP2f3vi98hs3HLTczxXdRK/mF0tRoQPpolEw==}
-
dev: true
/@octokit/plugin-paginate-rest/2.13.3_@octokit+core@2.5.4:
resolution: {integrity: sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg==}
···
'@octokit/types': 6.14.2
dev: true
+
/@octokit/plugin-paginate-rest/2.21.3_@octokit+core@3.6.0:
+
resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==}
+
peerDependencies:
+
'@octokit/core': '>=2'
+
dependencies:
+
'@octokit/core': 3.6.0
+
'@octokit/types': 6.41.0
+
dev: false
+
/@octokit/plugin-request-log/1.0.0:
resolution: {integrity: sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==}
dev: true
···
deprecation: 2.3.1
dev: true
+
/@octokit/plugin-rest-endpoint-methods/5.16.2_@octokit+core@3.6.0:
+
resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==}
+
peerDependencies:
+
'@octokit/core': '>=3'
+
dependencies:
+
'@octokit/core': 3.6.0
+
'@octokit/types': 6.41.0
+
deprecation: 2.3.1
+
dev: false
+
/@octokit/request-error/2.0.5:
resolution: {integrity: sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==}
dependencies:
'@octokit/types': 6.14.2
deprecation: 2.3.1
once: 1.4.0
-
dev: true
+
+
/@octokit/request-error/2.1.0:
+
resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==}
+
dependencies:
+
'@octokit/types': 6.41.0
+
deprecation: 2.3.1
+
once: 1.4.0
/@octokit/request/5.4.15:
resolution: {integrity: sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag==}
···
universal-user-agent: 6.0.0
dev: true
+
/@octokit/request/5.6.3:
+
resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==}
+
dependencies:
+
'@octokit/endpoint': 6.0.11
+
'@octokit/request-error': 2.1.0
+
'@octokit/types': 6.41.0
+
is-plain-object: 5.0.0
+
node-fetch: 2.6.9
+
universal-user-agent: 6.0.0
+
transitivePeerDependencies:
+
- encoding
+
/@octokit/rest/17.11.2:
resolution: {integrity: sha512-4jTmn8WossTUaLfNDfXk4fVJgbz5JgZE8eCs4BvIb52lvIH8rpVMD1fgRCrHbSd6LRPE5JFZSfAEtszrOq3ZFQ==}
dependencies:
···
resolution: {integrity: sha512-wiQtW9ZSy4OvgQ09iQOdyXYNN60GqjCL/UdMsepDr1Gr0QzpW6irIKbH3REuAHXAhxkEk9/F2a3Gcs1P6kW5jA==}
dependencies:
'@octokit/openapi-types': 7.0.0
-
dev: true
+
+
/@octokit/types/6.41.0:
+
resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==}
+
dependencies:
+
'@octokit/openapi-types': 12.11.0
/@pmmmwh/react-refresh-webpack-plugin/0.4.3_cm7sgex5fx52t7b3g2lvgocuuy:
resolution: {integrity: sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==}
···
/before-after-hook/2.2.1:
resolution: {integrity: sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw==}
-
dev: true
/better-opn/2.1.1:
resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==}
···
engines: {node: '>= 6'}
dev: true
+
/data-uri-to-buffer/4.0.1:
+
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+
engines: {node: '>= 12'}
+
dev: false
+
/data-urls/3.0.2:
resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
engines: {node: '>=12'}
···
/deprecation/2.3.1:
resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
-
dev: true
/des.js/1.0.1:
resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==}
···
dependencies:
pend: 1.2.0
+
/fetch-blob/3.2.0:
+
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+
engines: {node: ^12.20 || >= 14.13}
+
dependencies:
+
node-domexception: 1.0.0
+
web-streams-polyfill: 3.2.1
+
dev: false
+
/figgy-pudding/3.5.2:
resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==}
···
resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
engines: {node: '>=0.4.x'}
+
/formdata-polyfill/4.0.10:
+
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+
engines: {node: '>=12.20.0'}
+
dependencies:
+
fetch-blob: 3.2.0
+
dev: false
+
/formidable-oss-badges/0.3.5_styled-components@5.2.3:
resolution: {integrity: sha512-jvHSQMXujUtncyT3ObkoQgwOzkxdnnAs7XYgJDGSqhGqPF+LZ0y4rS5b6XzaN2BR3hG2e7isVtCNOmb7gxNuYw==}
engines: {node: '>= 0.12.0', npm: '>= 2.0.0'}
···
/is-plain-object/5.0.0:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
-
dev: true
/is-potential-custom-element-name/1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
···
minimatch: 3.1.2
dev: true
+
/node-domexception/1.0.0:
+
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+
engines: {node: '>=10.5.0'}
+
dev: false
+
/node-fetch/2.6.1:
resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==}
engines: {node: 4.x || >=6.0.0}
dev: true
+
+
/node-fetch/2.6.9:
+
resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==}
+
engines: {node: 4.x || >=6.0.0}
+
peerDependencies:
+
encoding: ^0.1.0
+
peerDependenciesMeta:
+
encoding:
+
optional: true
+
dependencies:
+
whatwg-url: 5.0.0
+
+
/node-fetch/3.3.0:
+
resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
dependencies:
+
data-uri-to-buffer: 4.0.1
+
fetch-blob: 3.2.0
+
formdata-polyfill: 4.0.10
+
dev: false
/node-forge/0.10.0:
resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==}
···
url-parse: 1.5.10
dev: true
+
/tr46/0.0.3:
+
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
/tr46/1.0.1:
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
dependencies:
···
/tunnel/0.0.6:
resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
-
dev: true
/tweetnacl/0.14.5:
resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
···
/universal-user-agent/6.0.0:
resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==}
-
dev: true
/universalify/0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
···
/web-namespaces/1.1.4:
resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==}
+
/web-streams-polyfill/3.2.1:
+
resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
+
engines: {node: '>= 8'}
+
dev: false
+
+
/webidl-conversions/3.0.1:
+
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
/webidl-conversions/4.0.2:
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
dev: true
···
tr46: 3.0.0
webidl-conversions: 7.0.0
dev: true
+
+
/whatwg-url/5.0.0:
+
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
dependencies:
+
tr46: 0.0.3
+
webidl-conversions: 3.0.1
/whatwg-url/7.1.0:
resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}