Merge pull request #4597 from mempool/knorrium/cache_assets_gha
Cache build assets to prevent rate limiting
This commit is contained in:
		
						commit
						6339cc8d59
					
				
							
								
								
									
										221
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										221
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @ -63,7 +63,96 @@ jobs: | |||||||
|         run: npm run build |         run: npm run build | ||||||
|         working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/backend |         working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/backend | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  |   cache: | ||||||
|  |     name: "Cache assets for builds" | ||||||
|  |     runs-on: "ubuntu-latest" | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout | ||||||
|  |         uses: actions/checkout@v3 | ||||||
|  |         with: | ||||||
|  |           path: assets | ||||||
|  | 
 | ||||||
|  |       - name: Setup Node | ||||||
|  |         uses: actions/setup-node@v3 | ||||||
|  |         with: | ||||||
|  |           node-version: ${{ matrix.node }} | ||||||
|  |           registry-url: "https://registry.npmjs.org" | ||||||
|  | 
 | ||||||
|  |       - name: Install (Prod dependencies only) | ||||||
|  |         run: npm ci --omit=dev --omit=optional | ||||||
|  |         working-directory: assets/frontend | ||||||
|  | 
 | ||||||
|  |       - name: Restore cached mining pool assets | ||||||
|  |         continue-on-error: true | ||||||
|  |         id: cache-mining-pool-restore | ||||||
|  |         uses: actions/cache/restore@v4 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             mining-pool-assets.zip | ||||||
|  |           key: mining-pool-assets-cache | ||||||
|  | 
 | ||||||
|  |       - name: Restore promo video assets | ||||||
|  |         continue-on-error: true | ||||||
|  |         id: cache-promo-video-restore | ||||||
|  |         uses: actions/cache/restore@v4 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             promo-video-assets.zip | ||||||
|  |           key: promo-video-assets-cache | ||||||
|  | 
 | ||||||
|  |       - name: Unzip assets before building (src/resources) | ||||||
|  |         continue-on-error: true | ||||||
|  |         run: unzip -o mining-pool-assets.zip -d assets/frontend/src/resources/mining-pools | ||||||
|  | 
 | ||||||
|  |       - name: Unzip assets before building (src/resources) | ||||||
|  |         continue-on-error: true | ||||||
|  |         run: unzip -o promo-video-assets.zip -d assets/frontend/src/resources/promo-video | ||||||
|  | 
 | ||||||
|  |       # - name: Unzip assets before building (dist) | ||||||
|  |       #   continue-on-error: true | ||||||
|  |       #   run: unzip assets.zip -d assets/frontend/dist/mempool/browser/resources | ||||||
|  | 
 | ||||||
|  |       - name: Sync-assets | ||||||
|  |         run: npm run sync-assets-dev | ||||||
|  |         working-directory: assets/frontend | ||||||
|  | 
 | ||||||
|  |       - name: Zip mining-pool assets | ||||||
|  |         run: zip -jrq mining-pool-assets.zip assets/frontend/src/resources/mining-pools/* | ||||||
|  | 
 | ||||||
|  |       - name: Zip promo-video assets | ||||||
|  |         run: zip -jrq promo-video-assets.zip assets/frontend/src/resources/promo-video/* | ||||||
|  | 
 | ||||||
|  |       - name: Upload mining pool assets as artifact | ||||||
|  |         uses: actions/upload-artifact@v4 | ||||||
|  |         with: | ||||||
|  |           name: mining-pool-assets | ||||||
|  |           path: mining-pool-assets.zip | ||||||
|  | 
 | ||||||
|  |       - name: Upload promo video assets as artifact | ||||||
|  |         uses: actions/upload-artifact@v4 | ||||||
|  |         with: | ||||||
|  |           name: promo-video-assets | ||||||
|  |           path: promo-video-assets.zip | ||||||
|  | 
 | ||||||
|  |       - name: Save mining pool assets cache | ||||||
|  |         id: cache-mining-pool-save | ||||||
|  |         uses: actions/cache/save@v4 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             mining-pool-assets.zip | ||||||
|  |           key: mining-pool-assets-cache | ||||||
|  | 
 | ||||||
|  |       - name: Save promo video assets cache | ||||||
|  |         id: cache-promo-video-save | ||||||
|  |         uses: actions/cache/save@v4 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             promo-video-assets.zip | ||||||
|  |           key: promo-video-assets-cache | ||||||
|  | 
 | ||||||
|   frontend: |   frontend: | ||||||
|  |     needs: cache | ||||||
|     if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" |     if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" | ||||||
|     strategy: |     strategy: | ||||||
|       matrix: |       matrix: | ||||||
| @ -103,9 +192,141 @@ jobs: | |||||||
|       # - name: Test |       # - name: Test | ||||||
|       #   run: npm run test |       #   run: npm run test | ||||||
| 
 | 
 | ||||||
|  |       - name: Restore cached mining pool assets | ||||||
|  |         continue-on-error: true | ||||||
|  |         id: cache-mining-pool-restore | ||||||
|  |         uses: actions/cache/restore@v4 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             mining-pool-assets.zip | ||||||
|  |           key: mining-pool-assets-cache | ||||||
|  | 
 | ||||||
|  |       - name: Restore promo video assets | ||||||
|  |         continue-on-error: true | ||||||
|  |         id: cache-promo-video-restore | ||||||
|  |         uses: actions/cache/restore@v4 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             promo-video-assets.zip | ||||||
|  |           key: promo-video-assets-cache | ||||||
|  | 
 | ||||||
|  |       - name: Download artifact | ||||||
|  |         uses: actions/download-artifact@v4 | ||||||
|  |         with: | ||||||
|  |           name: mining-pool-assets | ||||||
|  | 
 | ||||||
|  |       - name: Unzip assets before building (src/resources) | ||||||
|  |         run: unzip -o mining-pool-assets.zip -d ${{ matrix.node }}/${{ matrix.flavor }}/frontend/src/resources/mining-pools | ||||||
|  | 
 | ||||||
|  |       - name: Download artifact | ||||||
|  |         uses: actions/download-artifact@v4 | ||||||
|  |         with: | ||||||
|  |           name: promo-video-assets | ||||||
|  | 
 | ||||||
|  |       - name: Unzip assets before building (src/resources) | ||||||
|  |         run: unzip -o promo-video-assets.zip -d ${{ matrix.node }}/${{ matrix.flavor }}/frontend/src/resources/promo-video | ||||||
|  | 
 | ||||||
|  |       # - name: Unzip assets before building (dist) | ||||||
|  |       #   run: unzip assets.zip -d ${{ matrix.node }}/${{ matrix.flavor }}/frontend/dist/mempool/browser/resources | ||||||
|  | 
 | ||||||
|  |       - name: Display resulting source tree | ||||||
|  |         run: ls -R | ||||||
|  | 
 | ||||||
|       - name: Build |       - name: Build | ||||||
|         run: npm run build |         run: npm run build | ||||||
|         working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/frontend |         working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/frontend | ||||||
|         env:  |         env:  | ||||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
|    |    | ||||||
|  |   e2e: | ||||||
|  |     if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" | ||||||
|  |     runs-on: "ubuntu-latest" | ||||||
|  |     needs: frontend | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         # module: ["mempool", "liquid", "bisq"] Disabling bisq support for now | ||||||
|  |         module: ["mempool", "liquid"] | ||||||
|  |         include: | ||||||
|  |           - module: "mempool" | ||||||
|  |             spec: | | ||||||
|  |               cypress/e2e/mainnet/*.spec.ts | ||||||
|  |               cypress/e2e/signet/*.spec.ts | ||||||
|  |               cypress/e2e/testnet/*.spec.ts | ||||||
|  |           - module: "liquid" | ||||||
|  |             spec: | | ||||||
|  |               cypress/e2e/liquid/liquid.spec.ts | ||||||
|  |               cypress/e2e/liquidtestnet/liquidtestnet.spec.ts | ||||||
|  |           # - module: "bisq" | ||||||
|  |           #   spec: | | ||||||
|  |           #     cypress/e2e/bisq/bisq.spec.ts | ||||||
|  | 
 | ||||||
|  |     name: E2E tests for ${{ matrix.module }} | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout | ||||||
|  |         uses: actions/checkout@v3 | ||||||
|  |         with: | ||||||
|  |           path: ${{ matrix.module }} | ||||||
|  | 
 | ||||||
|  |       - name: Setup node | ||||||
|  |         uses: actions/setup-node@v3 | ||||||
|  |         with: | ||||||
|  |           node-version: 20 | ||||||
|  |           cache: "npm" | ||||||
|  |           cache-dependency-path: ${{ matrix.module }}/frontend/package-lock.json | ||||||
|  | 
 | ||||||
|  |       - name: Restore cached mining pool assets | ||||||
|  |         continue-on-error: true | ||||||
|  |         id: cache-mining-pool-restore | ||||||
|  |         uses: actions/cache/restore@v4 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             mining-pool-assets.zip | ||||||
|  |           key: mining-pool-assets-cache | ||||||
|  |    | ||||||
|  |       - name: Restore cached promo video assets | ||||||
|  |         continue-on-error: true | ||||||
|  |         id: cache-promo-video-restore | ||||||
|  |         uses: actions/cache/restore@v4 | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             promo-video-assets.zip | ||||||
|  |           key: promo-video-assets-cache | ||||||
|  | 
 | ||||||
|  |       - name: Download artifact | ||||||
|  |         uses: actions/download-artifact@v4 | ||||||
|  |         with: | ||||||
|  |           name: mining-pool-assets | ||||||
|  | 
 | ||||||
|  |       - name: Unzip assets before building (src/resources) | ||||||
|  |         run: unzip -o mining-pool-assets.zip -d ${{ matrix.module }}/frontend/src/resources/mining-pools | ||||||
|  | 
 | ||||||
|  |       - name: Download artifact | ||||||
|  |         uses: actions/download-artifact@v4 | ||||||
|  |         with: | ||||||
|  |           name: promo-video-assets | ||||||
|  | 
 | ||||||
|  |       - name: Unzip assets before building (src/resources) | ||||||
|  |         run: unzip -o promo-video-assets.zip -d ${{ matrix.module }}/frontend/src/resources/promo-video | ||||||
|  |        | ||||||
|  |       - name: Chrome browser tests (${{ matrix.module }}) | ||||||
|  |         uses: cypress-io/github-action@v5 | ||||||
|  |         with: | ||||||
|  |           tag: ${{ github.event_name }} | ||||||
|  |           working-directory: ${{ matrix.module }}/frontend | ||||||
|  |           build: npm run config:defaults:${{ matrix.module }} | ||||||
|  |           start: npm run start:local-staging | ||||||
|  |           wait-on: "http://localhost:4200" | ||||||
|  |           wait-on-timeout: 120 | ||||||
|  |           record: true | ||||||
|  |           parallel: true | ||||||
|  |           spec: ${{ matrix.spec }} | ||||||
|  |           group: Tests on Chrome (${{ matrix.module }}) | ||||||
|  |           browser: "chrome" | ||||||
|  |           ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}" | ||||||
|  |         env: | ||||||
|  |           COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }} | ||||||
|  |           CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} | ||||||
|  |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |           CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} | ||||||
|  |          | ||||||
							
								
								
									
										64
									
								
								.github/workflows/cypress.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										64
									
								
								.github/workflows/cypress.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,64 +0,0 @@ | |||||||
| name: Cypress Tests |  | ||||||
| 
 |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     branches: [master] |  | ||||||
|   pull_request: |  | ||||||
|     types: [opened, synchronize] |  | ||||||
| 
 |  | ||||||
| jobs: |  | ||||||
|   cypress: |  | ||||||
|     if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" |  | ||||||
|     runs-on: "ubuntu-latest" |  | ||||||
|     strategy: |  | ||||||
|       fail-fast: false |  | ||||||
|       matrix: |  | ||||||
|         module: ["mempool", "liquid", "bisq"] |  | ||||||
|         include: |  | ||||||
|           - module: "mempool" |  | ||||||
|             spec: | |  | ||||||
|               cypress/e2e/mainnet/*.spec.ts |  | ||||||
|               cypress/e2e/signet/*.spec.ts |  | ||||||
|               cypress/e2e/testnet/*.spec.ts |  | ||||||
|           - module: "liquid" |  | ||||||
|             spec: | |  | ||||||
|               cypress/e2e/liquid/liquid.spec.ts |  | ||||||
|               cypress/e2e/liquidtestnet/liquidtestnet.spec.ts |  | ||||||
|           - module: "bisq" |  | ||||||
|             spec: | |  | ||||||
|               cypress/e2e/bisq/bisq.spec.ts |  | ||||||
| 
 |  | ||||||
|     name: E2E tests for ${{ matrix.module }} |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout |  | ||||||
|         uses: actions/checkout@v3 |  | ||||||
|         with: |  | ||||||
|           path: ${{ matrix.module }} |  | ||||||
| 
 |  | ||||||
|       - name: Setup node |  | ||||||
|         uses: actions/setup-node@v3 |  | ||||||
|         with: |  | ||||||
|           node-version: 20 |  | ||||||
|           cache: "npm" |  | ||||||
|           cache-dependency-path: ${{ matrix.module }}/frontend/package-lock.json |  | ||||||
| 
 |  | ||||||
|       - name: Chrome browser tests (${{ matrix.module }}) |  | ||||||
|         uses: cypress-io/github-action@v5 |  | ||||||
|         with: |  | ||||||
|           tag: ${{ github.event_name }} |  | ||||||
|           working-directory: ${{ matrix.module }}/frontend |  | ||||||
|           build: npm run config:defaults:${{ matrix.module }} |  | ||||||
|           start: npm run start:local-staging |  | ||||||
|           wait-on: "http://localhost:4200" |  | ||||||
|           wait-on-timeout: 120 |  | ||||||
|           record: true |  | ||||||
|           parallel: true |  | ||||||
|           spec: ${{ matrix.spec }} |  | ||||||
|           group: Tests on Chrome (${{ matrix.module }}) |  | ||||||
|           browser: "chrome" |  | ||||||
|           ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}" |  | ||||||
|         env: |  | ||||||
|           COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }} |  | ||||||
|           CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} |  | ||||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|           CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} |  | ||||||
| @ -22,7 +22,7 @@ var PATH; | |||||||
| if (process.argv[2]) { | if (process.argv[2]) { | ||||||
|   PATH = process.argv[2]; |   PATH = process.argv[2]; | ||||||
|   PATH += PATH.endsWith("/") ? "" : "/" |   PATH += PATH.endsWith("/") ? "" : "/" | ||||||
|   PATH = path.normalize(PATH); |   PATH = path.resolve(path.normalize(PATH)); | ||||||
|   console.log(`[sync-assets] using PATH ${PATH}`); |   console.log(`[sync-assets] using PATH ${PATH}`); | ||||||
|   if (!fs.existsSync(PATH)){ |   if (!fs.existsSync(PATH)){ | ||||||
|     console.log(`${LOG_TAG} ${PATH} does not exist, creating`); |     console.log(`${LOG_TAG} ${PATH} does not exist, creating`); | ||||||
| @ -110,7 +110,7 @@ function downloadMiningPoolLogos$() { | |||||||
|           } |           } | ||||||
|           let downloadedCount = 0; |           let downloadedCount = 0; | ||||||
|           for (const poolLogo of poolLogos) { |           for (const poolLogo of poolLogos) { | ||||||
|             const filePath = PATH + `mining-pools/${poolLogo.name}`; |             const filePath = `${PATH}/mining-pools/${poolLogo.name}`; | ||||||
|             if (fs.existsSync(filePath)) { |             if (fs.existsSync(filePath)) { | ||||||
|               const localHash = getLocalHash(filePath); |               const localHash = getLocalHash(filePath); | ||||||
|               if (verbose) { |               if (verbose) { | ||||||
| @ -124,7 +124,7 @@ function downloadMiningPoolLogos$() { | |||||||
|               } |               } | ||||||
|             } else { |             } else { | ||||||
|               console.log(`${LOG_TAG} ${poolLogo.name} is missing, downloading...`); |               console.log(`${LOG_TAG} ${poolLogo.name} is missing, downloading...`); | ||||||
|               const miningPoolsDir = PATH + `mining-pools/`; |               const miningPoolsDir = `${PATH}/mining-pools/`; | ||||||
|               if (!fs.existsSync(miningPoolsDir)){ |               if (!fs.existsSync(miningPoolsDir)){ | ||||||
|                 fs.mkdirSync(miningPoolsDir, { recursive: true }); |                 fs.mkdirSync(miningPoolsDir, { recursive: true }); | ||||||
|               } |               } | ||||||
| @ -179,7 +179,7 @@ function downloadPromoVideoSubtiles$() { | |||||||
|           } |           } | ||||||
|           let downloadedCount = 0; |           let downloadedCount = 0; | ||||||
|           for (const language of videoLanguages) { |           for (const language of videoLanguages) { | ||||||
|             const filePath = PATH + `promo-video/${language.name}`; |             const filePath = `${PATH}/promo-video/${language.name}`; | ||||||
|             if (fs.existsSync(filePath)) { |             if (fs.existsSync(filePath)) { | ||||||
|               if (verbose) { |               if (verbose) { | ||||||
|                 console.log(`${LOG_TAG} ${language.name} remote promo video hash ${language.sha}`); |                 console.log(`${LOG_TAG} ${language.name} remote promo video hash ${language.sha}`); | ||||||
| @ -193,7 +193,7 @@ function downloadPromoVideoSubtiles$() { | |||||||
|               } |               } | ||||||
|             } else { |             } else { | ||||||
|               console.log(`${LOG_TAG} ${language.name} is missing, downloading`); |               console.log(`${LOG_TAG} ${language.name} is missing, downloading`); | ||||||
|               const promoVideosDir = PATH + `promo-video/`; |               const promoVideosDir = `${PATH}/promo-video/`; | ||||||
|               if (!fs.existsSync(promoVideosDir)){ |               if (!fs.existsSync(promoVideosDir)){ | ||||||
|                 fs.mkdirSync(promoVideosDir, { recursive: true }); |                 fs.mkdirSync(promoVideosDir, { recursive: true }); | ||||||
|               } |               } | ||||||
| @ -250,7 +250,7 @@ function downloadPromoVideo$() { | |||||||
|             if (item.name !== 'promo.mp4') { |             if (item.name !== 'promo.mp4') { | ||||||
|               continue; |               continue; | ||||||
|             } |             } | ||||||
|             const filePath = PATH + `promo-video/mempool-promo.mp4`; |             const filePath = `${PATH}/promo-video/mempool-promo.mp4`; | ||||||
|             if (fs.existsSync(filePath)) { |             if (fs.existsSync(filePath)) { | ||||||
|               const localHash = getLocalHash(filePath); |               const localHash = getLocalHash(filePath); | ||||||
| 
 | 
 | ||||||
| @ -288,16 +288,16 @@ if (configContent.BASE_MODULE && configContent.BASE_MODULE === 'liquid') { | |||||||
|   const testnetAssetsMinimalJsonUrl = 'https://raw.githubusercontent.com/Blockstream/asset_registry_testnet_db/master/index.minimal.json'; |   const testnetAssetsMinimalJsonUrl = 'https://raw.githubusercontent.com/Blockstream/asset_registry_testnet_db/master/index.minimal.json'; | ||||||
| 
 | 
 | ||||||
|   console.log(`${LOG_TAG} Downloading assets`); |   console.log(`${LOG_TAG} Downloading assets`); | ||||||
|   download(PATH + 'assets.json', assetsJsonUrl); |   download(`${PATH}/assets.json`, assetsJsonUrl); | ||||||
| 
 | 
 | ||||||
|   console.log(`${LOG_TAG} Downloading assets minimal`); |   console.log(`${LOG_TAG} Downloading assets minimal`); | ||||||
|   download(PATH + 'assets.minimal.json', assetsMinimalJsonUrl); |   download(`${PATH}/assets.minimal.json`, assetsMinimalJsonUrl); | ||||||
| 
 | 
 | ||||||
|   console.log(`${LOG_TAG} Downloading testnet assets`); |   console.log(`${LOG_TAG} Downloading testnet assets`); | ||||||
|   download(PATH + 'assets-testnet.json', testnetAssetsJsonUrl); |   download(`${PATH}/assets-testnet.json`, testnetAssetsJsonUrl); | ||||||
| 
 | 
 | ||||||
|   console.log(`${LOG_TAG} Downloading testnet assets minimal`); |   console.log(`${LOG_TAG} Downloading testnet assets minimal`); | ||||||
|   download(PATH + 'assets-testnet.minimal.json', testnetAssetsMinimalJsonUrl); |   download(`${PATH}/assets-testnet.minimal.json`, testnetAssetsMinimalJsonUrl); | ||||||
| } else { | } else { | ||||||
|   if (verbose) { |   if (verbose) { | ||||||
|     console.log(`${LOG_TAG} BASE_MODULE is not set to Liquid (${configContent.BASE_MODULE}), skipping downloading assets`); |     console.log(`${LOG_TAG} BASE_MODULE is not set to Liquid (${configContent.BASE_MODULE}), skipping downloading assets`); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user