Compare commits

..

200 Commits

Author SHA1 Message Date
e0c7e2a725
Singned commit + source modify
Signed-off-by: Václav Valíček <valicek1994@gmail.com>
2022-06-20 01:49:32 +02:00
Stephan
7bc1195651 exp 2022-03-18 18:49:47 +01:00
Stephan
786c441206 exp 2022-03-18 18:48:12 +01:00
Stephan
558f12143c exp 2022-03-18 18:45:23 +01:00
Stephan
2cd8137eeb exp 2022-03-18 18:39:54 +01:00
Stephan
77f77c3e8b exp 2022-03-18 18:37:35 +01:00
Stephan
143637c4fc exp 2022-03-18 18:31:39 +01:00
Stephan
06bdaca2c1 exp 2022-03-18 18:30:07 +01:00
Stephan
10c0963c6d exp 2022-03-18 18:24:54 +01:00
Stephan
30c00bf385 exp 2022-03-18 18:23:20 +01:00
Stephan
d6b1a8d591 exp 2022-03-18 18:20:34 +01:00
Stephan
c090c23662 exp 2022-03-18 18:10:55 +01:00
Stephan
d8cd3257e0 exp 2022-03-18 18:08:47 +01:00
Stephan
93e9740904 exp 2022-03-18 18:03:53 +01:00
Stephan
95d31440db exp 2022-03-18 18:02:01 +01:00
Stephan
f916de4ff4 exp 2022-03-18 18:00:22 +01:00
Stephan
b3615798ac exp 2022-03-18 17:58:45 +01:00
Stephan
4f5e3068cc exp 2022-03-18 17:52:23 +01:00
Stephan
86dab14dfd exp 2022-03-18 17:50:11 +01:00
Stephan
fa0c7b9ac1 exp 2022-03-18 17:46:24 +01:00
Stephan
863aefcc9d exp 2022-03-18 17:42:21 +01:00
Stephan
d6ed51a6f0 exp 2022-03-18 17:02:19 +01:00
Stephan
efed3f3cc1 exp 2022-03-18 16:58:14 +01:00
Stephan
13a337a9b8 exp 2022-03-18 16:56:06 +01:00
Stephan
ac561c87a4 exp 2022-03-18 16:45:22 +01:00
Stephan
6f924bbb78 exp 2022-03-18 16:44:03 +01:00
Stephan
cb40378ce6 exp 2022-03-18 16:40:35 +01:00
Stephan
74f650bb33 exp 2022-03-18 16:35:35 +01:00
Stephan
b893475bf9 exp 2022-03-18 16:33:02 +01:00
Stephan
cfa76a1ae7 exp 2022-03-18 16:30:06 +01:00
Stephan
716be074d3 exp 2022-03-18 16:22:46 +01:00
Stephan
2249395b68 exp 2022-03-18 16:20:45 +01:00
Stephan
b7b967f078 exp 2022-03-18 16:11:14 +01:00
Stephan
df19db009c exp 2022-03-18 16:08:28 +01:00
Stephan
b789a373ac exp 2022-03-18 16:06:27 +01:00
Stephan
80ea5c8f2c exp 2022-03-18 16:02:03 +01:00
Stephan
aee24c13f3 exp 2022-03-18 16:00:10 +01:00
Stephan
d77c4fdfd4 exp 2022-03-18 15:58:28 +01:00
Stephan
21b99568fe exp 2022-03-18 15:53:55 +01:00
Stephan
0835da33bd exp 2022-03-18 15:53:27 +01:00
Stephan
c0b18d2f43 exp 2022-03-18 15:47:17 +01:00
Stephan
af2ea06031 fix 2022-01-10 20:05:10 +01:00
Stephan
eb36d5f680 fix 2022-01-10 20:00:34 +01:00
Stephan
e0f2b0031a fix 2022-01-10 19:53:04 +01:00
Stephan
59c7f9c4ce fix 2022-01-10 19:25:02 +01:00
Stephan
c26fc558a8 fix 2022-01-10 19:21:00 +01:00
Stephan
0b3a88b35a fix 2022-01-10 19:14:40 +01:00
Stephan
1da26533a1 fix 2022-01-10 18:51:48 +01:00
Stephan
702e7112e2 fix 2022-01-10 18:49:04 +01:00
Stephan
6a00c973fb fix 2022-01-10 18:39:14 +01:00
Stephan
a7ff547627 fix 2022-01-10 16:02:56 +01:00
Stephan
46233a24ae fix 2022-01-10 15:57:24 +01:00
Stephan
0741c67ed3 fix 2022-01-10 15:55:57 +01:00
Stephan
2d88efd6e2 fix 2022-01-10 15:23:50 +01:00
Stephan
2926b8c82d fix 2022-01-10 15:16:02 +01:00
Stephan
48eb74f956 fix 2022-01-10 15:05:08 +01:00
Stephan
021137402f fix 2022-01-10 15:02:03 +01:00
Stephan
4227e0fa09 fix 2022-01-10 14:59:04 +01:00
Stephan
f1101d51bc fix 2022-01-10 14:41:24 +01:00
Stephan
1e8aa06e8f fix 2022-01-10 14:38:36 +01:00
Stephan
7df140fdbb fix 2022-01-10 14:37:03 +01:00
Stephan
d3f5d490e6 fix 2022-01-10 14:34:34 +01:00
Stephan
2b75661fd2 fix 2022-01-10 13:25:02 +01:00
Stephan
bd262a8978 fix 2022-01-10 13:23:53 +01:00
Stephan
14e56223cd fix 2022-01-10 13:22:35 +01:00
Stephan
a8da58dd52 make it minimal 2022-01-10 12:10:30 +01:00
Stephan
522b08f4fb fix 2022-01-10 11:28:16 +01:00
Stephan
1124d1661a test assign-milestone 2022-01-10 11:25:09 +01:00
Stephan
7c3bb81709 cleanup 2022-01-10 08:16:46 +01:00
Stephan
3d32dbd623 fix 2021-12-20 19:22:26 +01:00
Stephan
e902f2afac fix 2021-12-20 19:16:22 +01:00
Stephan
0132417d3a fix 2021-12-20 19:12:14 +01:00
Stephan
2376e90494 fix 2021-12-20 19:08:45 +01:00
Stephan
af84310aa0 fix 2021-12-20 19:07:11 +01:00
Stephan
02c3f02a25 fix 2021-12-20 19:02:46 +01:00
Stephan
4661a20940 fix 2021-12-20 14:19:30 +01:00
Stephan
d1aba02e40 fix 2021-12-20 13:01:12 +01:00
Stephan
87f5690188 fix 2021-12-16 16:07:45 +01:00
Stephan
f9c717556d fix 2021-12-16 16:06:06 +01:00
Stephan
b7be07cd11 fix 2021-12-16 16:04:40 +01:00
Stephan
bccd87fe75 fix 2021-12-16 15:51:58 +01:00
Stephan
3855041754 fix 2021-12-16 14:49:26 +01:00
Stephan
72c147effd fix 2021-12-16 14:09:19 +01:00
Stephan
241f21c28b fix 2021-12-16 14:06:20 +01:00
Stephan
7035d63440 fix 2021-12-16 14:03:52 +01:00
Stephan
561e1dcfde fix 2021-12-16 13:59:02 +01:00
Stephan
04327b45b0 fix 2021-12-16 13:55:52 +01:00
Stephan
435be3b612 fix 2021-12-16 13:54:27 +01:00
Stephan
ef71b6110f fix 2021-12-16 13:51:58 +01:00
Stephan
4611d58702 fix 2021-12-16 13:48:06 +01:00
Stephan
6f0311f20f fix 2021-12-16 13:44:14 +01:00
Stephan
7b4d73a9db fix 2021-12-16 13:39:46 +01:00
Stephan
5144a4ebeb fix 2021-12-16 13:00:12 +01:00
Stephan
6d27d4d607 fix 2021-12-16 12:56:17 +01:00
Stephan
6349403466 fix 2021-12-16 12:54:38 +01:00
Stephan
9e6aad4060 fix 2021-12-16 12:50:40 +01:00
Stephan
3356fe58aa fix 2021-12-16 12:49:06 +01:00
Stephan
4bf2ae8436 fix 2021-12-16 12:47:47 +01:00
Stephan
a748f6afa7 Merge remote-tracking branch 'origin/master' 2021-12-16 12:46:23 +01:00
Stephan
d4fe53e46b test assign to project 2021-12-16 12:46:08 +01:00
Stephan
879fa90155
Merge pull request #64 from M0stafa-Fawzy/master
Merge: Add files via upload
Looks good to me now!
2021-12-13 10:26:19 +01:00
Mostafa Fawzy
912747b966
Update 6.txt 2021-12-12 23:35:15 +02:00
Mostafa Fawzy
23a0258b4a
Merge pull request #1 from M0stafa-Fawzy/M0stafa-Fawzy-patch-1
Add files via upload
2021-12-12 03:52:48 +02:00
Mostafa Fawzy
2210711e57
Add files via upload 2021-12-12 03:51:28 +02:00
Mostafa Fawzy
1a1db12656
Add files via upload 2021-12-12 03:44:10 +02:00
Stephan
43287ec9cf exp 2021-12-10 18:56:12 +01:00
Stephan
4bc423721a exp 2021-12-10 18:09:50 +01:00
Stephan
5ef1917f61 exp 2021-12-10 18:04:43 +01:00
Stephan
3b98325435 exp 2021-12-10 17:53:40 +01:00
Stephan
7688e0cbc7 exp 2021-12-10 17:48:01 +01:00
Stephan
5595250e09 exp 2021-12-10 17:42:04 +01:00
Stephan
4e8f7f271f exp 2021-12-10 17:39:59 +01:00
Stephan
f2db146379 exp 2021-12-10 17:35:15 +01:00
Stephan
11e6e12f60 exp 2021-12-10 17:32:45 +01:00
Stephan
56827f467a rename 2021-12-10 17:30:51 +01:00
Stephan
34a05d36a6 exp 2021-12-10 17:29:04 +01:00
Stephan
bb1ee93cb9 exp 2021-12-10 17:27:14 +01:00
Stephan
de64657f2c exp 2021-12-10 16:40:40 +01:00
Stephan
32e0aac7fa exp 2021-12-10 16:38:27 +01:00
Stephan
d62945518b exp 2021-12-10 16:35:57 +01:00
Stephan
a73381dafa exp 2021-12-10 16:33:36 +01:00
Stephan
3c564909d0 exp 2021-12-10 16:32:54 +01:00
Stephan
e65ddbcdfd manual action exp 2021-12-10 16:24:40 +01:00
Stephan
71f3728648 wkf exp 2021-12-09 08:53:14 +01:00
Stephan
54b0888107 wkf exp 2021-12-09 08:48:06 +01:00
Stephan
0a056599a3 wkf exp 2021-12-08 13:10:28 +01:00
Stephan
18c361ce7f github workflow experiment 2021-12-08 13:01:59 +01:00
Stephan
7240558fd8 duh 2021-12-03 11:13:42 +01:00
GitHub Actions
d76304d5ea Foo 2021-12-03 10:11:00 +00:00
Stephan
947625402d test-push 2021-12-03 11:10:44 +01:00
Stephan
6285473aa7
Update README.md 2021-10-24 17:32:09 +02:00
Stephan
0d7242e7fc
A friendler README 2021-10-24 17:30:27 +02:00
Stephan
28dd92bcec
Merge pull request #62 from danswiger/master
Minor change - hey, I am happy to merge your test PR, just so you can see what happens!
2021-10-24 17:21:20 +02:00
dswiger
e0fff7d62e Merge branch 'dnew' - fixed conflict manually in 'vim' 2021-10-23 12:21:34 -04:00
dswiger
5171313fd6 A non-conflicting change 2021-10-23 12:18:09 -04:00
dswiger
9d6af11683 Second commit for conflict 2021-10-23 12:17:19 -04:00
dswiger
b99b892baf First change for conflict. 2021-10-23 12:16:06 -04:00
dswiger
e3bf97c1ca adding file to branch 2021-10-23 12:09:47 -04:00
dswiger
5adc4e70a4 Minor change 2021-10-23 11:20:05 -04:00
Stephan
a01b7130b8 created symlink 2021-10-20 07:17:10 +00:00
Stephan
dbd20f76d5 again and again 2021-10-20 09:16:46 +02:00
Stephan
df0a3488d5 again 2021-10-20 09:11:33 +02:00
Stephan
5d1637699c bah 2021-10-20 09:05:22 +02:00
Stephan
767f48236c direct git link 2021-10-19 16:53:39 +02:00
Stephan
cd04389146 created symlink 2021-10-19 14:24:45 +00:00
Stephan
d48a659702 pwsh again 2021-10-19 16:24:20 +02:00
Stephan
462132dc28 created symlink 2021-10-19 14:19:17 +00:00
Stephan
e6cfcc57fe pwsh now 2021-10-19 16:17:22 +02:00
Stephan
9a7204dfca created symlink 2021-10-19 14:15:45 +00:00
Stephan
22751c3d2b pwsh 2021-10-19 16:15:13 +02:00
Stephan
a87c48b4ee created symlink 2021-10-19 14:04:42 +00:00
Stephan
64b17ac379 again 2021-10-19 16:04:11 +02:00
Stephan
5c3f366371 created symlink 2021-10-19 14:02:49 +00:00
Stephan
c4b36f3e20 again 2021-10-19 16:02:16 +02:00
Stephan
796c3370ca created symlink 2021-10-19 13:54:47 +00:00
Stephan
e9f7e6fd36 update action 2021-10-19 15:54:23 +02:00
Stephan
edcae1c219 update action 2021-10-19 15:48:52 +02:00
Stephan
bba2ce50bb duh 2021-10-19 15:44:05 +02:00
Stephan
e35659c99c test symlink 2021-10-19 15:39:43 +02:00
Stephan
598702c8b2 e 2021-10-15 16:42:01 +02:00
Stephan
37aa937b1a fix 2021-09-21 17:25:31 +02:00
Stephan
cb5b14d938 fix 2021-09-21 17:22:49 +02:00
Stephan
81ab599799 fix 2021-09-21 17:20:49 +02:00
Stephan
296f84334c fix 2021-09-21 17:19:16 +02:00
Stephan
2e06d2a137 fix 2021-09-21 17:16:24 +02:00
Stephan
6002ffe8a8 fix 2021-09-21 17:08:12 +02:00
Stephan
0fbb9e6f0c Add build-pr action 2021-09-21 17:06:05 +02:00
Stephan
56c06949e7 cleanup 2021-09-21 17:00:53 +02:00
Stephan
1860c82e9e
Update README.md 2021-07-29 13:19:26 +02:00
Stephan
9b0a078c9b
Update README.md 2021-07-29 13:18:54 +02:00
Stephan
e6b959e956
Update README.md 2021-07-29 13:17:52 +02:00
Stephan
c80ab79454
Update README.md 2021-07-29 13:17:19 +02:00
Stephan
b34bf96a85
Update README.md 2021-07-29 13:16:09 +02:00
Stephan
05d4d52171 fix 2021-06-14 17:28:34 +02:00
Stephan
60bce81522 embed 2021-06-14 17:24:55 +02:00
Stephan
3cde25d61e html 2021-06-11 20:08:14 +02:00
Stephan
360241ec01 ga-wip 2021-06-11 11:54:15 +02:00
Stephan
0028fb1904 ga-wip 2021-06-11 10:39:17 +02:00
Stephan
65e7224135 ga-wip 2021-06-10 18:32:18 +02:00
Stephan
06d7873435 ga-wip 2021-06-10 18:30:36 +02:00
Stephan
c4af365294 ga-wip 2021-06-10 18:17:48 +02:00
Stephan
f21b85ce87 ga-wip 2021-06-10 17:23:15 +02:00
Stephan
ddb5f03cb1 ga-wip 2021-06-10 17:21:24 +02:00
Stephan
62a110b9b1 wip 2021-06-04 12:13:40 +02:00
Stephan
9bbad99e57 wip 2021-06-04 12:10:23 +02:00
Stephan
73b1427fe6 wip 2021-06-04 12:08:42 +02:00
Stephan
5f8f59f8b5 wip 2021-06-04 12:06:11 +02:00
Stephan
158d42185e wip 2021-06-04 12:03:18 +02:00
Stephan
f208079d80 wip 2021-06-04 12:02:06 +02:00
Stephan
b32cfcd4c1 wip 2021-06-04 11:55:25 +02:00
Stephan
831ab5452e wip 2021-06-04 11:49:39 +02:00
Stephan
d3e906333b wip 2021-06-04 11:41:21 +02:00
Stephan
02ebb22b5a wip 2021-06-04 11:41:04 +02:00
Stephan
a05c54d862 wip 2021-06-04 11:37:27 +02:00
Stephan
adbb090758 wip 2021-06-04 11:34:53 +02:00
Stephan
bde82421b1 wip 2021-06-04 11:33:09 +02:00
Stephan
58cb94d8d4 empty commit 2021-06-04 09:25:16 +02:00
Stephan
703de123ea fix workflow 2021-06-03 13:50:07 +02:00
Stephan
b1a34c5b71 fix 2021-06-03 13:38:20 +02:00
Stephan
ad6f741613 import exp workflow 2021-06-03 13:34:59 +02:00
45 changed files with 7512 additions and 39 deletions

22
.github/actions/test-action/action.yml vendored Normal file
View File

@ -0,0 +1,22 @@
name: 'dotcover-report'
description: 'Reports dotCover output.'
inputs:
name:
description: "The name of the check run."
required: true
default: 'Test Coverage'
path:
description: "The path where the test coverage output has been produced."
required: true
default: ''
version:
description: "The client version."
required: false
default: '0.0.0-preview.0'
token:
description: GitHub Access Token
required: false
default: ${{ github.token }}
runs:
using: 'node12'
main: 'dist/index.js'

6326
.github/actions/test-action/dist/index.js vendored Normal file

File diff suppressed because one or more lines are too long

42
.github/actions/test-action/index.js vendored Normal file
View File

@ -0,0 +1,42 @@
const core = require('@actions/core');
const github = require('@actions/github');
const fs = require('fs').promises;
async function run() {
try {
core.info('Begin');
// get inputs
const token = core.getInput('token', { required: true });
const name = core.getInput('name', { required: true });
const path = core.getInput('path', { required: true });
const version = core.getInput('version', { required: false });
// get the REST api
const octokit = github.getOctokit(token);
const rest = octokit.rest;
// get the context, the workflow, etc.
const context = github.context;
const workflow = context.workflow;
const repository = context.payload.repository;
core.info('Running!');
core.info('Completed.');
}
catch (error) {
core.setFailed(error.message);
}
}
const getSha = (context) => {
if (context.eventName === "pull_request") {
return context.payload.pull_request.head.sha || context.payload.after;
} else {
return context.sha;
}
};
run();

357
.github/actions/test-action/package-lock.json generated vendored Normal file
View File

@ -0,0 +1,357 @@
{
"name": "test-action",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"@actions/core": "^1.4.0",
"@actions/github": "^5.0.0"
}
},
"node_modules/@actions/core": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.4.0.tgz",
"integrity": "sha512-CGx2ilGq5i7zSLgiiGUtBCxhRRxibJYU6Fim0Q1Wg2aQL2LTnF27zbqZOrxfvFQ55eSBW0L8uVStgtKMpa0Qlg=="
},
"node_modules/@actions/github": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.0.tgz",
"integrity": "sha512-QvE9eAAfEsS+yOOk0cylLBIO/d6WyWIOvsxxzdrPFaud39G6BOkUwScXZn1iBzQzHyu9SBkkLSWlohDWdsasAQ==",
"dependencies": {
"@actions/http-client": "^1.0.11",
"@octokit/core": "^3.4.0",
"@octokit/plugin-paginate-rest": "^2.13.3",
"@octokit/plugin-rest-endpoint-methods": "^5.1.1"
}
},
"node_modules/@actions/http-client": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz",
"integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==",
"dependencies": {
"tunnel": "0.0.6"
}
},
"node_modules/@octokit/auth-token": {
"version": "2.4.5",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz",
"integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==",
"dependencies": {
"@octokit/types": "^6.0.3"
}
},
"node_modules/@octokit/core": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
"dependencies": {
"@octokit/auth-token": "^2.4.4",
"@octokit/graphql": "^4.5.8",
"@octokit/request": "^5.6.0",
"@octokit/request-error": "^2.0.5",
"@octokit/types": "^6.0.3",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
}
},
"node_modules/@octokit/endpoint": {
"version": "6.0.12",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
"dependencies": {
"@octokit/types": "^6.0.3",
"is-plain-object": "^5.0.0",
"universal-user-agent": "^6.0.0"
}
},
"node_modules/@octokit/graphql": {
"version": "4.6.4",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.4.tgz",
"integrity": "sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==",
"dependencies": {
"@octokit/request": "^5.6.0",
"@octokit/types": "^6.0.3",
"universal-user-agent": "^6.0.0"
}
},
"node_modules/@octokit/openapi-types": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.3.2.tgz",
"integrity": "sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA=="
},
"node_modules/@octokit/plugin-paginate-rest": {
"version": "2.13.5",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.5.tgz",
"integrity": "sha512-3WSAKBLa1RaR/7GG+LQR/tAZ9fp9H9waE9aPXallidyci9oZsfgsLn5M836d3LuDC6Fcym+2idRTBpssHZePVg==",
"dependencies": {
"@octokit/types": "^6.13.0"
},
"peerDependencies": {
"@octokit/core": ">=2"
}
},
"node_modules/@octokit/plugin-rest-endpoint-methods": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.3.1.tgz",
"integrity": "sha512-3B2iguGmkh6bQQaVOtCsS0gixrz8Lg0v4JuXPqBcFqLKuJtxAUf3K88RxMEf/naDOI73spD+goJ/o7Ie7Cvdjg==",
"dependencies": {
"@octokit/types": "^6.16.2",
"deprecation": "^2.3.1"
},
"peerDependencies": {
"@octokit/core": ">=3"
}
},
"node_modules/@octokit/request": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz",
"integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==",
"dependencies": {
"@octokit/endpoint": "^6.0.1",
"@octokit/request-error": "^2.1.0",
"@octokit/types": "^6.16.1",
"is-plain-object": "^5.0.0",
"node-fetch": "^2.6.1",
"universal-user-agent": "^6.0.0"
}
},
"node_modules/@octokit/request-error": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
"dependencies": {
"@octokit/types": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
}
},
"node_modules/@octokit/types": {
"version": "6.16.4",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.16.4.tgz",
"integrity": "sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A==",
"dependencies": {
"@octokit/openapi-types": "^7.3.2"
}
},
"node_modules/before-after-hook": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
},
"node_modules/deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
},
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
"engines": {
"node": "4.x || >=6.0.0"
}
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
"engines": {
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
}
},
"node_modules/universal-user-agent": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
},
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
},
"dependencies": {
"@actions/core": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.4.0.tgz",
"integrity": "sha512-CGx2ilGq5i7zSLgiiGUtBCxhRRxibJYU6Fim0Q1Wg2aQL2LTnF27zbqZOrxfvFQ55eSBW0L8uVStgtKMpa0Qlg=="
},
"@actions/github": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.0.tgz",
"integrity": "sha512-QvE9eAAfEsS+yOOk0cylLBIO/d6WyWIOvsxxzdrPFaud39G6BOkUwScXZn1iBzQzHyu9SBkkLSWlohDWdsasAQ==",
"requires": {
"@actions/http-client": "^1.0.11",
"@octokit/core": "^3.4.0",
"@octokit/plugin-paginate-rest": "^2.13.3",
"@octokit/plugin-rest-endpoint-methods": "^5.1.1"
}
},
"@actions/http-client": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz",
"integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==",
"requires": {
"tunnel": "0.0.6"
}
},
"@octokit/auth-token": {
"version": "2.4.5",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz",
"integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==",
"requires": {
"@octokit/types": "^6.0.3"
}
},
"@octokit/core": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
"requires": {
"@octokit/auth-token": "^2.4.4",
"@octokit/graphql": "^4.5.8",
"@octokit/request": "^5.6.0",
"@octokit/request-error": "^2.0.5",
"@octokit/types": "^6.0.3",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/endpoint": {
"version": "6.0.12",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
"requires": {
"@octokit/types": "^6.0.3",
"is-plain-object": "^5.0.0",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/graphql": {
"version": "4.6.4",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.4.tgz",
"integrity": "sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==",
"requires": {
"@octokit/request": "^5.6.0",
"@octokit/types": "^6.0.3",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/openapi-types": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.3.2.tgz",
"integrity": "sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA=="
},
"@octokit/plugin-paginate-rest": {
"version": "2.13.5",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.5.tgz",
"integrity": "sha512-3WSAKBLa1RaR/7GG+LQR/tAZ9fp9H9waE9aPXallidyci9oZsfgsLn5M836d3LuDC6Fcym+2idRTBpssHZePVg==",
"requires": {
"@octokit/types": "^6.13.0"
}
},
"@octokit/plugin-rest-endpoint-methods": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.3.1.tgz",
"integrity": "sha512-3B2iguGmkh6bQQaVOtCsS0gixrz8Lg0v4JuXPqBcFqLKuJtxAUf3K88RxMEf/naDOI73spD+goJ/o7Ie7Cvdjg==",
"requires": {
"@octokit/types": "^6.16.2",
"deprecation": "^2.3.1"
}
},
"@octokit/request": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz",
"integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==",
"requires": {
"@octokit/endpoint": "^6.0.1",
"@octokit/request-error": "^2.1.0",
"@octokit/types": "^6.16.1",
"is-plain-object": "^5.0.0",
"node-fetch": "^2.6.1",
"universal-user-agent": "^6.0.0"
}
},
"@octokit/request-error": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
"requires": {
"@octokit/types": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
}
},
"@octokit/types": {
"version": "6.16.4",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.16.4.tgz",
"integrity": "sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A==",
"requires": {
"@octokit/openapi-types": "^7.3.2"
}
},
"before-after-hook": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
},
"deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
},
"is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
},
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
},
"universal-user-agent": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
}
}

View File

@ -0,0 +1,17 @@
{
"name": "test-action",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"pack": "ncc build index.js -o dist"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@actions/core": "^1.4.0",
"@actions/github": "^5.0.0"
}
}

158
.github/workflows/assign-milestones.js vendored Normal file
View File

@ -0,0 +1,158 @@
// assign a milestone to issues or PRs added to a project, with a name corresponding
// to the name of the project - create the milestone if it does not exist
//
// adding a *second* project to the issue will update the milestone accordingly
// removing that project will reset the milestone entirely (not use the other project)
// and, no idea what happens if one very quickly adds and removes an issue
//
// an issue or PR actually becomes a card (or, a card is actually created...) when
// it's move to a project column for the first time - being assigned to the project
// and showing in project's backlog is not enough.
module.exports = async ({github, context, core}) => {
const restapi = github.rest
function last1(s) {
const pos = s.lastIndexOf('/')
return s.substring(pos + 1)
}
function last2(s) {
const pos1 = s.lastIndexOf('/')
const pos2 = s.lastIndexOf('/', pos1-1)
return [ s.substring(pos2 + 1, pos1), s.substring(pos1 + 1) ]
}
function firstOrDefault(items, predicate) {
for (const item of items) {
if (predicate(item)) {
return item
}
}
return null
}
// insanely enough, due to the total lack of documentation, this
// is the best way one can figure out what exactly we are getting
console.log(github)
console.log(context)
console.log(context.payload)
//console.log(`event: ${github.event_name}/${github.event.action}`)
// get and validate the event name
const eventName = context.eventName
if (eventName != 'project_card') {
return
}
// get and validate the event action
const eventAction = context.payload.action
if (eventAction != 'created' && eventAction != 'deleted') {
return
}
console.log(`event: ${eventName}/${eventAction}`)
const columnId = context.payload.project_card.column_id
const columnResponse = await restapi.projects.getColumn({
column_id: columnId
})
const column = columnResponse.data
console.log(column)
const projectId = last1(column.project_url)
const projectResponse = await restapi.projects.get({
project_id: projectId
});
const project = projectResponse.data
console.log(project)
const projectName = project.name
// -- when a card is deleted it cannot be fetched!
//const cardId = context.payload.project_card.id
//const cardResponse = await restapi.projects.getCard({
// card_id: cardId
//})
//const card = cardResponse.data
//console.log(card)
//const [ itemType, itemNumber ] = last2(card.content_url)
const [ itemType, itemNumber ] = last2(context.payload.project_card.content_url)
const isIssue = itemType == 'issues'
const isPull = itemType == 'pulls'
if (!isIssue && !isPull) {
core.setFailed(`Unsupported item type ${itemType}`)
return
}
const itemApi = isIssue ? restapi.issues : restapi.pulls
var request = {
owner: context.repo.owner,
repo: context.repo.repo
}
request[isIssue ? 'issue_number' : 'pull_number'] = itemNumber
console.log(request)
const itemResponse = await itemApi.get(request)
const item = itemResponse.data
console.log(item)
const itemId = item.id
const itemMilestone = item.milestone
console.log(`item: ${itemType}/${itemId} milestone: ${itemMilestone == null ? '<none>' : itemMilestone}`)
if (eventAction == 'created') {
console.log('add or update milestone of issue/pull of created card')
const milestonesResponse = await restapi.issues.listMilestones({
owner: context.repo.owner,
repo: context.repo.repo
})
const milestones = milestonesResponse.data
console.log(milestones)
var milestone = firstOrDefault(milestones, (x) => x.title == projectName)
if (!milestone) {
console.log(`create milestone '${projectName}'`)
const milestoneResponse = await restapi.issues.createMilestone({
owner: context.repo.owner,
repo: context.repo.repo,
title: projectName
})
milestone = milestoneResponse.data
}
const milestoneNumber = milestone.number
if (!item.milestone || item.milestone.number != milestoneNumber)
{
request = {
owner: context.repo.owner,
repo: context.repo.repo,
milestone: milestoneNumber
}
request[isIssue ? 'issue_number' : 'pull_number'] = itemNumber
await itemApi.update(request)
}
}
else if (eventAction == 'deleted') {
if (itemMilestone) {
console.log('remove milestone from issue/pull of deleted card')
request = {
owner: context.repo.owner,
repo: context.repo.repo
}
request[isIssue ? 'issue_number' : 'pull_number'] = itemNumber
request.milestone = null
await itemApi.update(request)
}
else {
console.log('deleted card had no milestone')
}
}
else {
console.log(`nothing to do for evet action ${eventAction}`)
}
}

46
.github/workflows/assign-milestones.yml vendored Normal file
View File

@ -0,0 +1,46 @@
name: Assign Milestones
on:
project_card:
# ignore: moved, converted, edited
types: [ created, deleted, moved ] # FIXME temp
jobs:
assign:
runs-on: ubuntu-latest
name: Assign
steps:
- name: Checkout
uses: actions/checkout@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Assign
uses: actions/github-script@v5
with:
github-token: ${{ secrets.MY_GITHUB_TOKEN_TESTREPO }}
script: |
// see https://github.com/actions/github-script
//
// note: 'github' below is not the same as the yml-level 'github' context
// see https://docs.github.com/en/actions/learn-github-actions/contexts
// for yml contexts
//
// github A pre-authenticated octokit/rest.js client with pagination plugins
// .rest The REST API (e.g. github.rest.issues.get(...) gets an issue)
// .request
// .paginate
// .graphql
// context An object containing the context of the workflow run
// see https://github.com/actions/toolkit/blob/main/packages/github/src/context.ts
// core A reference to the @actions/core package
// glob A reference to the @actions/glob package
// io A reference to the @actions/io package
// exec A reference to the @actions/exec package
// require A proxy wrapper around the normal Node.js require to enable requiring relative paths
// (relative to the current working directory) + requiring npm packages installed in the
// current working directory.
const script = require('./.github/workflows/assign-milestones.js')
await script({github, context, core})

137
.github/workflows/assign-to-project.yml vendored Normal file
View File

@ -0,0 +1,137 @@
name: Assign PRs to Project
on:
#issues:
# types: [ opened ]
#pull_request:
# types: [ opened ]
# important to use pull_request_target here to run code from 'main' not the PR,
# with access to PAT - and safe permission to make changes to the project
pull_request_target:
types: [ opened, labeled ]
# github-script: https://github.com/actions/github-script
# -> points to github rest (octokit) reference doc
# github PAT: https://github.com/settings/tokens
# must have full repo access
# FIXME how can I prevent a user from creating a PR and stealing my token?
# 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
# curl -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ghp_..." https://api.github.com/projects/1/columns?owner=zpqrtbnk&repo=test-repo
# curl -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ghp_..." https://api.github.com/projects/1/columns?owner=zpqrtbnk-alt&repo=test-repo-alt
jobs:
assign:
runs-on: ubuntu-latest
name: Assign
steps:
- name: Assign
uses: actions/github-script@v4
with:
github-token: ${{ secrets.MY_GITHUB_TOKEN_TESTREPO }}
script: |
//const project_name = 'The API Team Board'
//const column_name = 'Drafting'
const project_name = 'test-project'
const column_name = 'To do'
function firstOrDefault(items, predicate) {
for (const item of items) {
if (predicate(item)) {
return item
}
}
return null
}
// find the project
console.log('find project...')
const projects = await github.projects.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo
})
console.log(`retrieved ${projects.data.length} projects.`)
const project = firstOrDefault(projects.data, (x) => x.name === project_name)
if (!project) {
core.setFailed(`Failed to find project "${project_name}".`)
return
}
else {
console.log(`project '${project_name}' id: ${project.id}.`)
}
// find the column
console.log('find column...')
const columns = await github.projects.listColumns({
project_id: project.id
})
console.log(`retrieved ${columns.data.length} columns.`)
const column = firstOrDefault(columns.data, (x) => x.name === column_name)
if (!column) {
core.setFailed(`Failed to find column "${column_name}" in project ${project.name}.`)
return
}
else {
console.log(`column '${column_name}' id: ${column.id}.`)
}
// determine content type
console.log('determine content type...')
const event_name = context.eventName
var content_type = null
var item_number = null
var item_id = null
if (event_name === 'issues') {
content_type = 'Issue'
// temp!
core.setFailed(`Unsupported: issue.`)
return
item_number = context.issue.number
item_id = context.issue.id
}
if (event_name === 'pull_request' || event_name === 'pull_request_target') {
content_type = 'PullRequest'
item_number = context.payload.pull_request.number
item_id = context.payload.pull_request.id
}
if (!content_type) {
core.setFailed(`Unexpected event name "${event_name}".`)
return
}
else {
console.log(`content type: ${content_type}.`)
}
// get the item
console.log('get the item...')
const item = await github.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: item_number
})
if (!item) {
core.setFailed(`Failed to get item ${item_number}.`)
return
}
else {
console.log(`${content_type} #${context.issue.number} id: ${item.data.id}.`)
if (item_id === item.data.id) {
console.log(`item_id: ${item_id}`)
}
else {
console.log(`but 'context.payload' provides item_id: ${item_id} and meh?`)
}
}
console.log('create the card...')
console.log(`in column ${column.id} for item ${item_id} of type ${content_type}`)
await github.projects.createCard({
column_id: column.id,
//note:,
content_id: item_id,
content_type: content_type
})
console.log('created')

23
.github/workflows/build-pr.yml vendored Normal file
View File

@ -0,0 +1,23 @@
#
# Workflow: Build PR
#
name: Build PR
on: pull_request
jobs:
build-pr:
name: "Build PR #${{ github.event.pull_request.number }}: ${{ github.event.pull_request.title }}"
runs-on: ubuntu-latest
steps:
- name: Step 1
shell: bash
run: echo "step 1 of \#${{ github.event.pull_request.number }}"
- name: Step 2
shell: bash
run: echo "step 2 of \#${{ github.event.pull_request.number }}"

40
.github/workflows/exp.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: Experiment
on: push
jobs:
experiment:
name: Experiment
runs-on: ubuntu-latest
steps:
- name: Experiment
uses: zpqrtbnk/gh-actions/experiment@master
with:
mode: woot
- name: Script
uses: zpqrtbnk/gh-actions/jsaction@master
with:
githubToken: ${{ github.token }}
text: zoot
- name: Infos
shell: bash
run: |
echo "github.ref: '${{ github.ref }}'"
echo "github.sha: '${{ github.sha }}'"
- name: Checkout
uses: actions/checkout@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Embedded
uses: ./.github/actions/test-action
with:
name: NAME
path: PATH
version: VERSION

137
.github/workflows/publish-release.js vendored Normal file
View File

@ -0,0 +1,137 @@
module.exports = /*async*/ ({github, context, core}) => {
const restapi = github.rest
var dryrun = context.payload.inputs.dryrun
function firstOrDefault(items, predicate) {
for (const item of items) {
if (predicate(item)) {
return item
}
}
return null
}
async function validateRelease() {
const version = context.payload.inputs.version
const tag = "v" + version
console.log(`Validate version '${version}'.`)
// git branch must exist
const branchRefs = await restapi.git.listMatchingRefs({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `heads/release/${version}`
})
if (firstOrDefault(branchRefs.data, (x) => x.ref == `refs/heads/release/${version}`) == null) {
core.setFailed(`Could not find branch 'release/${version}'.`)
return
}
console.log(`Found branch 'release/${version}'.`)
// github milestone must exist and be open
const milestone = await getMilestone()
if (milestone == null) {
core.setFailed(`Could not find milestone '${version}'.`)
return
}
if (milestone.state != "open") {
core.setFailed(`Milestone '${version}' is already closed.`)
return
}
console.log(`Found open milestone '${version}'.`)
// github release must exist and not be published yet
const release = await getRelease()
if (release === null) {
core.setFailed(`Could not find a GitHub release for tag '${tag}'.`)
return
}
if (!release.draft) {
core.setFailed(`GitHub release for tag '${tag}' is already published.`)
return
}
console.log(`Found yet-unpublished GitHub release for tag '${tag}'.`)
// tag must not exist
const tagRefs = await restapi.git.listMatchingRefs({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `tags/${tag}`
})
if (firstOrDefault(tagRefs.data, (x) => x.ref == `tags/${tag}`) != null) {
core.setFailed(`Tag '${tag}' already exists.`)
return
}
console.log(`Verified that tag '${tag}' does not exist yet.`)
console.log('Release is valid.')
}
async function publishRelease() {
const version = context.payload.inputs.version
const tag = "v" + version
console.log(`Publish GitHub release '${version}'.`)
const release = await getRelease()
await restapi.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.id,
draft: false
})
}
async function closeMilestone() {
const version = context.payload.inputs.version
const tag = "v" + version
console.log(`Close milestone '${version}'.`)
const milestone = await getMilestone()
await restapi.issues.updateMilestone({
owner: context.repo.owner,
repo: context.repo.repo,
milestone_number: milestone.number,
state: "closed"
})
}
async function getRelease() {
// note: getReleaseByTag only returns published releases
// note: we may eventually need to paginate
// and then releases.headers should contain what we need?
// https://octokit.github.io/rest.js/v18#pagination
const version = context.payload.inputs.version
const tag = `v${version}`
const releases = await restapi.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo
})
const release = firstOrDefault(releases.data, (x) => x.tag_name == tag)
return release
}
async function getMilestone() {
const version = context.payload.inputs.version
const milestonesResponse = await restapi.issues.listMilestones({
owner: context.repo.owner,
repo: context.repo.repo
})
const milestones = milestonesResponse.data
return firstOrDefault(milestones, (x) => x.title == version)
}
return {
validateRelease: validateRelease,
publishRelease: publishRelease,
closeMilestone: closeMilestone
}
}

46
.github/workflows/publish-release.yml vendored Normal file
View File

@ -0,0 +1,46 @@
name: Publish Release
on:
workflow_dispatch:
inputs:
version:
description: 'Version'
required: true
dryrun:
description: 'DryRun'
required: true
type: boolean
default: true
jobs:
job:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Configure repository
shell: bash
run: |
git config user.email "github-actions@hazelcast.com"
git config user.name "GitHub Actions (Build Release)"
- name: Validate the release
uses: actions/github-script@v5
with:
script: |
const scriptf = require('./.github/workflows/publish-release.js')
const script = scriptf({github, context, core})
await script.validateRelease()
- name: Finalize GitHub release and milestone
if: ${{ github.event.inputs.dryrun == 'false' }}
uses: actions/github-script@v5
with:
script: |
const scriptf = require('./.github/workflows/publish-release.js')
const script = scriptf({github, context, core})
await script.publishRelease()
await script.closeMilestone()

26
.github/workflows/rest-description.yml vendored Normal file
View File

@ -0,0 +1,26 @@
name: Toy with issue description
on:
issues:
types: labeled
jobs:
toy-desc:
runs-on: ubuntu-latest
if: |
!contains(github.event.issue.title, '!exclude!') ||
contains(github.event.issue.title, '!force!')
steps:
- name: Toy with issue description
uses: actions/github-script@v4.0.2
with:
script: |
const title = `${{ github.event.issue.title }} !`
const body = `updated\n${{ github.event.issue.body }}`
github.issues.update({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
title: title,
body: body
})

82
.github/workflows/symlink-test.yml vendored Normal file
View File

@ -0,0 +1,82 @@
name: Symlink Test
on:
# trigger on push to any branch
push:
branches-ignore:
- 'release/*'
tags-ignore:
- '*'
jobs:
# try to create and push the symlink
symlink-test:
name: Symlink Test
runs-on: windows-latest
steps:
# checkout the code
- name: Checkout code
uses: actions/checkout@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
# symlink via bash
# this does *not* create a symlink, but a directory
#- name: Symlink Bash
# shell: bash
# run: |
# if ! [ -L bang ]; then
# ln -s duh bang
# ls -l
# git config --global user.email "stephan@REDACTED.com"
# git config --global user.name "Stephan"
# git config --global core.symlinks "true"
# git add bang
# git commit -m "created symlink"
# fi
# symlink via pwsh
# this creates a 'bang' file that contains 'duh'
# on local machine, it fails 'New-Item: Administrator privilege required for this operation.'
#
# update: it creates *something* that is listed as a directory in the log,
# and that GitHub represents as a link, so it has to be a link, but when
# I check the thing out, it's a file
# because Windows won't create the link but on Linux, it's checked out as a link
#
#- name: Symlink Pwsh
# shell: pwsh
# run: |
# if (! (test-path bang)) {
# New-Item -ItemType SymbolicLink -Name bang -Target duh
# write-output "DIR:"
# ls .
# write-output "DIR:"
# ls bang
# git config --global user.email "stephan@REDACTED.com"
# git config --global user.name "Stephan"
# git config --global core.symlinks "true"
# git add bang
# git commit -m "created symlink"
# }
# see
# this just creates the symlink in Git - works on Windows
# BUT will be checked out as a file and we don't care
- name: Symlink Git
shell: bash
run: |
if ! [ -f "bang" ]; then
git update-index --add --cacheinfo 120000 "$(echo "duh" | git hash-object -w --stdin)" "bang"
git config --global user.email "stephan@REDACTED.com"
git config --global user.name "Stephan"
git commit -m "created symlink"
fi
# push changes back
- name: Push
shell: bash
run: git push

25
.github/workflows/test-push.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: Test Push
on: push
jobs:
foo:
name: Foo
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: ${{github.ref}}
- name: Foo
shell: bash
run: |
echo "foo" >> foo.txt
- name: Push
shell: bash
run: |
git config --global user.name "GitHub Actions"
git config --global user.email "github-actions@hazelcast.com"
git add foo.txt
git commit -m "Foo"
git push

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules/

View File

@ -1,27 +1,32 @@
test-repo
=========
# A Git(Hub) Test Repository
Test Repository
Hey! This is my personal Git(Hub) Test Repository where I experiment with Git and GitHub.
`git clone https://github.com/zpqrtbnk/test-repo.git .`
If you are new to Git and GitHub and found this repository through Google: feel free to clone the repository and experiment with it! You will not be able to push back to the repository, as it is *my* repository and I cannot let everybody push to it. The right way to do it on GitHub is:
We have pages at : http://zpqrtbnk.github.io/test-repo/
1. fork the repository in your own account,
2. make changes and push them in a branch of your own fork,
3. create a Pull Request in my repository.
Edit the file
Add an image
Can't get a newline? Must add two spaces
I will get notified, will review the changes that you propose, and eventually will either merge the changes, or reject them. This *may* take some time as I am not actively monitoring nor maintaining this repository, as you can guess, but I try to be helpful ;)
Include
![Image](https://raw.github.com/zpqrtbnk/test-repo/master/wtf.jpg)
Don't expect to find anything meaningful nor useful in the repository. Also, I happen to force-push a reset of everything from time to time. This means that I reset all history, including changes that you may have submitted. In theory, noone ever does this to a repository. But hey, this is a *test* repository after all.
But I don't know how to float the image left or right, nor how to center it, nor how to size
it so it's very basic anyway...
The rest of this README file is mostly random stuff.
Clone the repository with: `git clone https://github.com/zpqrtbnk/test-repo.git .`
`git add`
`git push origin master`
`git pull`
`git checkout`
We have test GitHUb pages (from the `gh-pages` branch) at: http://zpqrtbnk.github.io/test-repo/
We have an image in the README (markdown)
![Image](wtf.jpg)
We have an image in the README (html)
<img src="./wtf.jpg" />
We have an image in the README (more html)
<p align="center" style="background:#000;padding:5px;color:#fff;font-size:150%;margin-bottom:64px">
<img src="./wtf.jpg" />
<span style="margin-left:48px;">wubble</span>
</p>
etc
etc

View File

@ -1 +0,0 @@
xx

1
bang Symbolic link
View File

@ -0,0 +1 @@
duh

View File

View File

@ -1 +0,0 @@
test

View File

View File

View File

1
duh/bah.txt Normal file
View File

@ -0,0 +1 @@
bah

1
duh/duh.txt Normal file
View File

@ -0,0 +1 @@
duh

View File

View File

View File

View File

@ -1,5 +0,0 @@
Index!
some *more* random stuff to test pages
A test pr!

View File

View File

View File

@ -1 +0,0 @@
mod

View File

@ -1,4 +0,0 @@
premier
deuxieme

View File

View File

View File

View File

1
test.txt Normal file
View File

@ -0,0 +1 @@
test

View File

@ -1 +0,0 @@
iiii

View File

View File

@ -1,3 +0,0 @@
premiers
deuxiemes

View File

@ -1,5 +0,0 @@
premier
deuxieme
troisieme

View File

View File