1- module . exports = async function ( { github, workspace, publishedPackages } ) {
2- const { readFile } = require ( 'fs' ) . promises ;
1+ const sleep = ms => new Promise ( res => setTimeout ( res , ms ) ) ;
2+
3+ /** exponential back-off function to await results while avoiding rate limits */
4+ async function backoff ( fn , depth = 0 ) {
5+ try {
6+ return await fn ( ) ;
7+ } catch ( e ) {
8+ if ( depth > 7 ) {
9+ throw e ;
10+ } else {
11+ await sleep ( 2 ** depth * 10 ) ;
12+ return backoff ( fn , depth + 1 ) ;
13+ }
14+ }
15+ }
16+
17+ module . exports = async function ( { github, glob, workspace, publishedPackages } ) {
18+ const tar = require ( 'tar' ) ;
19+ const { readFile, copyFile } = require ( 'fs' ) . promises ;
20+
321 const { singleFileBuild } = await import ( '../tools/pfe-tools/esbuild.js' ) ;
422 const { execaCommand } = await import ( 'execa' ) ;
523
@@ -13,34 +31,40 @@ module.exports = async function({ github, workspace, publishedPackages }) {
1331
1432 await singleFileBuild ( { outfile } ) ;
1533
34+ async function getRelease ( { owner, repo, tag } ) {
35+ const release = await github . request ( `GET /repos/{owner}/{repo}/releases/tags/{tag}` , { owner, repo, tag } ) ;
36+ if ( ! release . id ) {
37+ throw new Error ( `Could not find release for tag: ${ tag } ` ) ;
38+ }
39+ }
40+
1641 for ( const { name : packageName , version } of publishedPackages ) {
1742 // get the tag for the release for this package
1843 const tag = `${ packageName } @${ version } ` ;
1944
20- // const release = await github.rest.repos.getReleaseByTag({ owner, repo, tag });
21- const release =
22- await github . request ( `GET /repos/{owner}/{repo}/releases/tags/{tag}` , { owner, repo, tag } ) ;
45+ // wait until the release is created
46+ const release = await backoff ( ( ) => getRelease ( { owner, repo, tag } ) ) ;
2347
24- if ( ! release . id ) {
25- throw new Error ( `Could not find release for tag: ${ tag } ` ) ;
26- }
48+ const params = {
49+ owner,
50+ release_id : release . id ,
51+ repo
52+ } ;
2753
28- const params = { owner , release_id : release . id , repo } ;
54+ await copyFile ( ` ${ cwd } /core/pfe-styles/pfe.min.css` , ` ${ cwd } /pfe.min.css` ) ;
2955
30- // eslint-disable-next-line
31- console . log ( { tag , ... params } ) ;
56+ const globber = await glob . create ( 'pfe.min.*' ) ;
57+ const files = await globber . glob ( ) ;
3258
33- // upload the bundle to each release
34- await github . rest . repos . uploadReleaseAsset ( {
35- ...params ,
36- name : 'pfe.min.js' ,
37- data : await readFile ( outfile ) ,
38- } ) ;
59+ console . log ( 'creating tarball for' , files ) ;
3960
61+ await tar . c ( { gzip : true , file : 'pfe.min.tgz' } , files ) ;
62+
63+ // upload the bundle to each release
4064 await github . rest . repos . uploadReleaseAsset ( {
4165 ...params ,
42- name : 'pfe.min.js.map ' ,
43- data : await readFile ( `${ outfile } .map ` ) ,
66+ name : 'pfe.min.tgz ' ,
67+ data : await readFile ( `${ cwd } /pfe.min.tgz ` ) ,
4468 } ) ;
4569
4670 // make a tarball for the package
0 commit comments