aboutsummaryrefslogtreecommitdiff
path: root/.github/actions/github-release
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2021-05-03 12:32:40 +0200
committerDaniel Gavin <danielgavin5@hotmail.com>2021-05-03 12:32:40 +0200
commitb53ed8d5c433ba659f50e05d34dfed9582d2613e (patch)
treead8a7a97e9f5d2f66ac1b4e89158059c580070a2 /.github/actions/github-release
parent6f6f95c000edb7305371f96d466731122ac54178 (diff)
add github action
Diffstat (limited to '.github/actions/github-release')
-rw-r--r--.github/actions/github-release/Dockerfile8
-rw-r--r--.github/actions/github-release/README.md5
-rw-r--r--.github/actions/github-release/action.yml15
-rw-r--r--.github/actions/github-release/main.js119
-rw-r--r--.github/actions/github-release/package.json10
5 files changed, 157 insertions, 0 deletions
diff --git a/.github/actions/github-release/Dockerfile b/.github/actions/github-release/Dockerfile
new file mode 100644
index 0000000..5849eac
--- /dev/null
+++ b/.github/actions/github-release/Dockerfile
@@ -0,0 +1,8 @@
+FROM node:slim
+
+COPY . /action
+WORKDIR /action
+
+RUN npm install --production
+
+ENTRYPOINT ["node", "/action/main.js"]
diff --git a/.github/actions/github-release/README.md b/.github/actions/github-release/README.md
new file mode 100644
index 0000000..6be6842
--- /dev/null
+++ b/.github/actions/github-release/README.md
@@ -0,0 +1,5 @@
+# github-release
+
+Copy-pasted from
+
+https://github.com/rust-analyzer/rust-analyzer/tree/master/.github/actions/github-release \ No newline at end of file
diff --git a/.github/actions/github-release/action.yml b/.github/actions/github-release/action.yml
new file mode 100644
index 0000000..51a074a
--- /dev/null
+++ b/.github/actions/github-release/action.yml
@@ -0,0 +1,15 @@
+name: 'wasmtime github releases'
+description: 'wasmtime github releases'
+inputs:
+ token:
+ description: ''
+ required: true
+ name:
+ description: ''
+ required: true
+ files:
+ description: ''
+ required: true
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
diff --git a/.github/actions/github-release/main.js b/.github/actions/github-release/main.js
new file mode 100644
index 0000000..a08e59a
--- /dev/null
+++ b/.github/actions/github-release/main.js
@@ -0,0 +1,119 @@
+const core = require('@actions/core');
+const path = require("path");
+const fs = require("fs");
+const github = require('@actions/github');
+const glob = require('glob');
+
+function sleep(milliseconds) {
+ return new Promise(resolve => setTimeout(resolve, milliseconds))
+}
+
+async function runOnce() {
+ // Load all our inputs and env vars. Note that `getInput` reads from `INPUT_*`
+ const files = core.getInput('files');
+ const name = core.getInput('name');
+ const token = core.getInput('token');
+ const slug = process.env.GITHUB_REPOSITORY;
+ const owner = slug.split('/')[0];
+ const repo = slug.split('/')[1];
+ const sha = process.env.HEAD_SHA;
+
+ core.info(`files: ${files}`);
+ core.info(`name: ${name}`);
+ core.info(`token: ${token}`);
+
+ const octokit = new github.GitHub(token);
+
+ // Delete the previous release since we can't overwrite one. This may happen
+ // due to retrying an upload or it may happen because we're doing the dev
+ // release.
+ const releases = await octokit.paginate("GET /repos/:owner/:repo/releases", { owner, repo });
+ for (const release of releases) {
+ if (release.tag_name !== name) {
+ continue;
+ }
+ const release_id = release.id;
+ core.info(`deleting release ${release_id}`);
+ await octokit.repos.deleteRelease({ owner, repo, release_id });
+ }
+
+ // We also need to update the `dev` tag while we're at it on the `dev` branch.
+ if (name == 'nightly') {
+ try {
+ core.info(`updating nightly tag`);
+ await octokit.git.updateRef({
+ owner,
+ repo,
+ ref: 'tags/nightly',
+ sha,
+ force: true,
+ });
+ } catch (e) {
+ console.log("ERROR: ", JSON.stringify(e, null, 2));
+ core.info(`creating nightly tag`);
+ await octokit.git.createTag({
+ owner,
+ repo,
+ tag: 'nightly',
+ message: 'nightly release',
+ object: sha,
+ type: 'commit',
+ });
+ }
+ }
+
+ // Creates an official GitHub release for this `tag`, and if this is `dev`
+ // then we know that from the previous block this should be a fresh release.
+ core.info(`creating a release`);
+ const release = await octokit.repos.createRelease({
+ owner,
+ repo,
+ name,
+ tag_name: name,
+ target_commitish: sha,
+ prerelease: name === 'nightly',
+ });
+
+ // Upload all the relevant assets for this release as just general blobs.
+ for (const file of glob.sync(files)) {
+ const size = fs.statSync(file).size;
+ core.info(`upload ${file}`);
+ await octokit.repos.uploadReleaseAsset({
+ data: fs.createReadStream(file),
+ headers: { 'content-length': size, 'content-type': 'application/octet-stream' },
+ name: path.basename(file),
+ url: release.data.upload_url,
+ });
+ }
+}
+
+async function run() {
+ const retries = 10;
+ for (let i = 0; i < retries; i++) {
+ try {
+ await runOnce();
+ break;
+ } catch (e) {
+ if (i === retries - 1)
+ throw e;
+ logError(e);
+ console.log("RETRYING after 10s");
+ await sleep(10000)
+ }
+ }
+}
+
+function logError(e) {
+ console.log("ERROR: ", e.message);
+ try {
+ console.log(JSON.stringify(e, null, 2));
+ } catch (e) {
+ // ignore json errors for now
+ }
+ console.log(e.stack);
+}
+
+run().catch(err => {
+ logError(err);
+ core.setFailed(err.message);
+});
diff --git a/.github/actions/github-release/package.json b/.github/actions/github-release/package.json
new file mode 100644
index 0000000..abfc55f
--- /dev/null
+++ b/.github/actions/github-release/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "wasmtime-github-release",
+ "version": "0.0.0",
+ "main": "main.js",
+ "dependencies": {
+ "@actions/core": "^1.0.0",
+ "@actions/github": "^1.0.0",
+ "glob": "^7.1.5"
+ }
+}