11name : org.update
22
3+ env :
4+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 : true
5+
36on :
47 workflow_dispatch :
58 inputs :
69 etc :
710 description : ' base64 encoded json string'
811 required : true
912
13+ release :
14+ description : ' create a release'
15+ required : false
16+ default : ' true'
17+
18+ readme :
19+ description : ' create a readme'
20+ required : false
21+ default : ' true'
22+
1023jobs :
1124 update :
1225 runs-on : ubuntu-latest
@@ -17,27 +30,34 @@ jobs:
1730
1831 steps :
1932 - name : init / checkout
20- uses : actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2
33+ uses : actions/checkout@0c366fd6a839edf440554fa01a7085ccba70ac98 # v6.0.2
2134 with :
2235 ref : ' master'
2336 fetch-depth : 0
2437
2538 - name : update / setup node
26- uses : actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
39+ uses : actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
2740 with :
28- node-version : ' 20 '
41+ node-version : ' 24 '
2942 - run : npm i semver
3043
3144 - name : update / compare latest with current version
32- uses : actions/github-script@62c3794a3eb6788d9a2a72b219504732c0c9a298
45+ uses : actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
3346 with :
3447 script : |
3548 (async()=>{
3649 const { Buffer } = require('node:buffer');
3750 const { inspect } = require('node:util');
3851 const { existsSync, readFileSync, writeFileSync } = require('node:fs');
3952 const { resolve } = require('node:path');
40- const semver = require('semver')
53+ const semver = require('semver');
54+
55+ const semverExceptions = (s) => {
56+ switch('${{ github.event.repository.name }}'){
57+ case 'docker-chrony': core.warning(`semver exception found for chrony version ${s}, setting version to major.minor`); return(s.split('.').slice(0, 2).join('.'));
58+ }
59+ return(s);
60+ }
4161
4262 // defaults
4363 const json = `${{ toJSON(github.event.inputs) }}`;
5474 core.setFailed(`input does not contain valid semver version: ${inspect(job.inputs, {showHidden:false, depth:null, colors:true})}`);
5575 }else if(!job.inputs?.tag){
5676 core.setFailed(`input does not contain valid git tag: ${inspect(job.inputs, {showHidden:false, depth:null, colors:true})}`);
77+ }else if(job.inputs.version == 'null' || null === job.inputs.version){
78+ core.setFailed(`input version is null: ${inspect(job.inputs, {showHidden:false, depth:null, colors:true})}`);
5779 }
5880 }catch(e){
5981 core.setFailed(`could not parse github.event.inputs.etc: ${n.etc} (${Buffer.from(n.etc, 'base64').toString('ascii')})`);
@@ -81,28 +103,35 @@ jobs:
81103 }
82104
83105 // semver
84- const latest = semver.valid(semver.coerce(job.inputs.version));
85- const current = semver.valid(semver.coerce(job.json.semver.version));
106+ const latest = semverExceptions( semver.valid(semver.coerce(job.inputs.version) ));
107+ const current = semverExceptions( semver.valid(semver.coerce(job.json.semver.version) ));
86108 const tag = semver.valid(semver.coerce(job.inputs.tag));
87- const checks = {latestTagExists:true };
109+ const checks = {latestTagExists:false };
88110
89111 try{
90112 const tag = await fetch(`https://hub.docker.com/v2/repositories/${job.json.image}/tags/${latest}`);
91- if(tag.status === 404 ){
92- checks.latestTagExists = false ;
113+ if(tag.status === 200 ){
114+ checks.latestTagExists = true ;
93115 }
94116 }catch(e){
95117 core.warning(e);
96118 }
97119
98120 // compare
99- if(( latest && latest !== current) || !checks.latestTagExists){
121+ if(latest && latest !== current && !checks.latestTagExists){
100122 core.info(`new ${semver.diff(current, latest)} release found (${latest}), updating ...`)
101123 job.json.semver.version = latest;
102124
103- // check if app has a build version
104- if(job.inputs?.build){
125+ // check if app has additional parameters
126+ const build = {};
127+ if(job.inputs?.build && typeof(job.inputs.build) === 'string'){
128+ build.args = {
129+ version_build:job.inputs.build,
130+ };
105131 job.json.build.args.version_build = job.inputs.build;
132+ }else if(job.inputs?.build?.args){
133+ build.args = job.inputs.build.args;
134+ job.json.build.args.version_build = job.inputs.build.args;
106135 }
107136
108137 // update .json
@@ -111,13 +140,14 @@ jobs:
111140
112141 // export variables
113142 core.exportVariable('WORKFLOW_UPDATE', true);
143+ core.exportVariable('WORKFLOW_UPDATE_BASE64JSON', Buffer.from(JSON.stringify({build:build})).toString('base64'));
114144 if(job.inputs?.unraid){
115145 core.exportVariable('WORKFLOW_UPDATE_UNRAID', 'true');
116- core.exportVariable('WORKFLOW_UPDATE_UNRAID_BASE64JSON', Buffer.from(JSON.stringify({semversuffix:"unraid", uid:99, gid:100})).toString('base64'));
146+ core.exportVariable('WORKFLOW_UPDATE_UNRAID_BASE64JSON', Buffer.from(JSON.stringify({semversuffix:"unraid", uid:99, gid:100, build:build })).toString('base64'));
117147 }
118148 if(job.inputs?.nobody){
119149 core.exportVariable('WORKFLOW_UPDATE_NOBODY', 'true');
120- core.exportVariable('WORKFLOW_UPDATE_NOBODY_BASE64JSON', Buffer.from(JSON.stringify({semversuffix:"nobody", uid:65534, gid:65534})).toString('base64'));
150+ core.exportVariable('WORKFLOW_UPDATE_NOBODY_BASE64JSON', Buffer.from(JSON.stringify({semversuffix:"nobody", uid:65534, gid:65534, build:build })).toString('base64'));
121151 }
122152 core.exportVariable('LATEST_TAG', semver.inc(tag, semver.diff(current, latest)));
123153 core.exportVariable('LATEST_VERSION', latest);
@@ -155,13 +185,13 @@ jobs:
155185 uses : the-actions-org/workflow-dispatch@3133c5d135c7dbe4be4f9793872b6ef331b53bc7
156186 with :
157187 workflow : docker.yml
158- wait-for-completion : false
188+ wait-for-completion : true
159189 token : " ${{ secrets.REPOSITORY_TOKEN }}"
160- inputs : ' { "release":"true ", "readme":"true ", "run-name":"update v${{ env.LATEST_VERSION }}" }'
190+ inputs : ' { "release":"${{ github.event.inputs.release }} ", "readme":"${{ github.event.inputs.readme }} ", "run-name":"update v${{ env.LATEST_VERSION }}", "etc":"${{ env.WORKFLOW_UPDATE_BASE64JSON }}" }'
161191 ref : " v${{ env.LATEST_TAG }}"
162192
163193 - name : update / build container image for unraid
164- if : env.WORKFLOW_UPDATE_UNRAID == 'true' && steps.checkout.outcome == 'success' && steps. build.outcome == 'success'
194+ if : env.WORKFLOW_UPDATE_UNRAID == 'true' && steps.build.outputs.workflow-conclusion == 'success'
165195 uses : the-actions-org/workflow-dispatch@3133c5d135c7dbe4be4f9793872b6ef331b53bc7
166196 with :
167197 workflow : docker.yml
@@ -171,7 +201,7 @@ jobs:
171201 ref : " v${{ env.LATEST_TAG }}"
172202
173203 - name : update / build container image for nobody
174- if : env.WORKFLOW_UPDATE_NOBODY == 'true' && steps.checkout.outcome == 'success' && steps. build.outcome == 'success'
204+ if : env.WORKFLOW_UPDATE_NOBODY == 'true' && steps.build.outputs.workflow-conclusion == 'success'
175205 uses : the-actions-org/workflow-dispatch@3133c5d135c7dbe4be4f9793872b6ef331b53bc7
176206 with :
177207 workflow : docker.yml
0 commit comments