diff --git a/.github/workflows/release-IPA-metrics.yml b/.github/workflows/release-IPA-metrics.yml index babe3867a9..e7fc2da172 100644 --- a/.github/workflows/release-IPA-metrics.yml +++ b/.github/workflows/release-IPA-metrics.yml @@ -41,6 +41,9 @@ jobs: console.error(error.message); process.exit(1) }) + if (!shouldRunRelease) { + console.log('Skipping release') + } return shouldRunRelease release-IPA-metrics: @@ -61,16 +64,16 @@ jobs: - name: Install npm dependencies run: npm install - - name: Download openapi-foas - uses: actions/download-artifact@v4 - with: - name: openapi-foas-${{ inputs.env }} - github-token: ${{ secrets.api_bot_pat }} - run-id: ${{ github.run_id }} +# - name: Download openapi-foas +# uses: actions/download-artifact@v4 +# with: +# name: openapi-foas-${{ inputs.env }} +# github-token: ${{ secrets.api_bot_pat }} +# run-id: ${{ github.run_id }} - name: Run Metric Collection Job working-directory: ./tools/spectral/ipa/metrics/scripts - run: node runMetricCollection.js ../../../../../openapi-foas.json + run: node runMetricCollection.js ../../../../../openapi/v2.json - name: Dump Metric Collection Job Data to S3 env: diff --git a/tools/spectral/ipa/metrics/metricS3Upload.js b/tools/spectral/ipa/metrics/metricS3Upload.js index e4645aefa3..88f01dfae7 100644 --- a/tools/spectral/ipa/metrics/metricS3Upload.js +++ b/tools/spectral/ipa/metrics/metricS3Upload.js @@ -36,7 +36,8 @@ export async function uploadMetricCollectionDataToS3(filePath = config.defaultMe }); console.log('Dumping data to S3...'); - return await client.send(command); + //return await client.send(command); + return 'testing'; } catch (caught) { if (caught instanceof S3ServiceException && caught.name === 'EntityTooLarge') { console.error( diff --git a/tools/spectral/ipa/metrics/scripts/getShouldRunMetricsRelease.js b/tools/spectral/ipa/metrics/scripts/getShouldRunMetricsRelease.js index 13e3cc3083..0c0dca585a 100644 --- a/tools/spectral/ipa/metrics/scripts/getShouldRunMetricsRelease.js +++ b/tools/spectral/ipa/metrics/scripts/getShouldRunMetricsRelease.js @@ -1,6 +1,11 @@ // Used in .github/workflows/release-IPA-metrics.yml +// Checks if workflow failed or if job 'Release IPA Validation Metrics' didn't run today + +const releaseJobName = 'Release IPA Validation Metrics'; + export default async function getShouldRunMetricsRelease({ github, context }) { - const response = await github.rest.actions.listWorkflowRuns({ + // Get last workflow run + const workflowRuns = await github.rest.actions.listWorkflowRuns({ owner: context.repo.owner, repo: context.repo.repo, workflow_id: 'release-IPA-metrics.yml', @@ -8,20 +13,53 @@ export default async function getShouldRunMetricsRelease({ github, context }) { page: 1, }); - if (!response || !response.data) { + if (!workflowRuns || !workflowRuns.data) { throw Error('listWorkFlowRuns response is empty'); } - const { workflow_runs: runs } = response.data; + const { workflow_runs: runs } = workflowRuns.data; + + if (!runs || runs.length === 0) { + throw Error('workflowRuns is empty'); + } + + const previousWorkflowRun = runs[1]; + + // Check if job 'Release IPA Validation Metrics' already ran today + const runJobs = await github.rest.actions.listJobsForWorkflowRun({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: runs[1].id, + per_page: 2, + page: 1, + }); + + if (!runJobs || !runJobs.data) { + throw Error('listJobsForWorkflowRun response is empty'); + } + + const { jobs } = runJobs.data; - if (runs === undefined || runs.length === 0) { - throw Error('response.data.workflow_runs is empty'); + if (!jobs || jobs.length === 0) { + throw Error('Jobs for workflow is empty'); } - const previousResult = runs[1].conclusion; + const previousReleaseJob = jobs.find((job) => job.name === releaseJobName); - const lastRunDate = new Date(runs[1].created_at); + if (!previousReleaseJob) { + throw Error('Could not find previous release job with name' + releaseJobName); + } + + const lastRunDate = new Date(previousReleaseJob.completed_at); const today = new Date(); - return previousResult === 'failure' || today.toDateString() !== lastRunDate.toDateString(); + //Remove + console.log('Previous workflow run created at', new Date(previousWorkflowRun.created_at)); + console.log('Previous workflow run updated', new Date(previousWorkflowRun.updated_at)); + console.log('Previous workflow run started at', new Date(previousWorkflowRun.run_started_at)); + + console.log('Last workflow run status was', previousWorkflowRun.conclusion); + console.log('Last release job run was', lastRunDate.toDateString(), 'with status', previousReleaseJob.conclusion); + + return previousWorkflowRun.conclusion === 'failure' || today.toDateString() !== lastRunDate.toDateString(); }