Files
alfresco-content-app/.github/workflows/upstream-adf.yml
T

186 lines
9.1 KiB
YAML

name: Upstream adf
on:
schedule:
- cron: '0 10,14,17 * * 1-5' #At 10,14,17 on every day-of-week from Monday through Friday.
workflow_dispatch:
inputs:
tag:
description: 'Type of the tag the latest version should be fetched with'
required: false
type: string
default: 'alpha'
jobs:
upstream:
runs-on: ubuntu-latest
outputs:
hasNewVersion: ${{ steps.fetchLatestPkg.outputs.hasNewVersion }}
hasNewADFVersion: ${{ steps.fetchLatestPkg.outputs.hasNewADFVersion }}
latestADFVersion: ${{ steps.fetchLatestPkg.outputs.latestADFVersion }}
hasNewJSVersion: ${{ steps.fetchLatestPkg.outputs.hasNewJSVersion }}
latestJSVersion: ${{ steps.fetchLatestPkg.outputs.latestJSVersion }}
hasNewVersionWithoutPR: ${{ steps.checkPrAlreadyExist.outputs.hasNewVersionWithoutPR }}
steps:
- id: checkoutRepo
name: Checkout repository
uses: actions/checkout@v7
with:
fetch-depth: 1
- name: Generate app token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
with:
client-id: ${{ vars.GH_APP_ENGINEERING_RO_CLIENT_ID }}
private-key: ${{ secrets.GH_APP_ENGINEERING_RO_PRIVATE_KEY }}
permission-contents: read
permission-pull-requests: read
- id: fetchLatestPkg
name: Fetch the latest package version
uses: actions/github-script@v9
with:
github-token: ${{ steps.app-token.outputs.token }}
script: |
const getLatestVersionOf = require('./scripts/gh/update/latest-version-of.js');
const { hasNewVersion: hasNewADFVersion , remoteVersion: latestADFVersion } = await getLatestVersionOf({exec, github, dependencyName: 'adf-core', tag: '${{ inputs.tag }}'});
console.log('hasNewADFVersion', hasNewADFVersion);
console.log('latestADFVersion', latestADFVersion?.name);
const { hasNewVersion: hasNewJSVersion, remoteVersion: latestJSVersion } = await getLatestVersionOf({exec, github, dependencyName: 'js-api', tag: '${{ inputs.tag }}'});
console.log('hasNewJSVersion', hasNewJSVersion);
console.log('latestJSVersion', latestJSVersion?.name);
if (hasNewADFVersion === 'true' || hasNewJSVersion === 'true' ) {
core.setOutput('hasNewVersion', 'true');
if (hasNewADFVersion === 'true') {
core.setOutput('hasNewADFVersion', 'true');
core.setOutput('latestADFVersion', latestADFVersion?.name);
}
if (hasNewJSVersion === 'true') {
core.setOutput('hasNewJSVersion', 'true');
core.setOutput('latestJSVersion', latestJSVersion?.name);
}
} else {
core.setOutput('hasNewVersion', 'false');
console.log('No new version available, skipping upstream!');
}
- name: Check value after
run: |
echo "The value hasNewVersion is: ${{ steps.fetchLatestPkg.outputs.hasNewVersion }}"
echo "The value hasNewADFVersion is: ${{ steps.fetchLatestPkg.outputs.hasNewADFVersion }}"
echo "The value latestADFVersion is: ${{ steps.fetchLatestPkg.outputs.latestADFVersion }}"
echo "The value hasNewJSVersion is: ${{ steps.fetchLatestPkg.outputs.hasNewJSVersion }}"
echo "The value latestJSVersion is: ${{ steps.fetchLatestPkg.outputs.latestJSVersion }}"
- id: checkPrAlreadyExist
name: Check if PR with latest already exist
if: ${{ steps.fetchLatestPkg.outputs.hasNewVersion == 'true' }}
uses: actions/github-script@v9
env:
HAS_NEW_ADF_VERSION: ${{ steps.fetchLatestPkg.outputs.hasNewADFVersion }}
LATEST_ADF_VERSION: ${{ steps.fetchLatestPkg.outputs.latestADFVersion }}
HAS_NEW_JS_VERSION: ${{ steps.fetchLatestPkg.outputs.hasNewJSVersion }}
LATEST_JS_VERSION: ${{ steps.fetchLatestPkg.outputs.latestJSVersion }}
with:
github-token: ${{ steps.app-token.outputs.token }}
script: |
// verify if there is already an Upstream PR pending
const hasNewADFVersion = process.env.HAS_NEW_ADF_VERSION;
const latestADFVersion = process.env.LATEST_ADF_VERSION;
const hasNewJSVersion = process.env.HAS_NEW_JS_VERSION;
const latestJSVersion = process.env.LATEST_JS_VERSION;
const checkPRAlreadyExist = require('./scripts/gh/update/check-pr-already-exists.js');
let isPRWithLatestADFAlreadyAvailable = false;
let isPRWithLatestJSAlreadyAvailable = false;
if (hasNewADFVersion === 'true') {
isPRWithLatestADFAlreadyAvailable = await checkPRAlreadyExist({github, context, version: latestADFVersion});
console.log('isPRWithLatestADFAlreadyAvailable', isPRWithLatestADFAlreadyAvailable);
}
if (hasNewJSVersion === 'true') {
isPRWithLatestJSAlreadyAvailable = await checkPRAlreadyExist({github, context, version: latestADFVersion});
console.log('isPRWithLatestJSAlreadyAvailable', isPRWithLatestJSAlreadyAvailable);
}
if (isPRWithLatestADFAlreadyAvailable || isPRWithLatestJSAlreadyAvailable) {
console.log('Warning: Upstream PR already exist, stop the migration execution!');
core.setOutput('hasNewVersionWithoutPR', 'false');
} else {
core.setOutput('hasNewVersionWithoutPR', 'true');
}
migrate:
if: ${{ needs.upstream.outputs.hasNewVersionWithoutPR == 'true' }}
runs-on: ubuntu-latest
needs: upstream
steps:
- name: Generate app token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
with:
client-id: ${{ vars.GH_APP_ENGINEERING_CONTRIB_CLIENT_ID }}
private-key: ${{ secrets.GH_APP_ENGINEERING_CONTRIB_PRIVATE_KEY }}
permission-contents: write
permission-pull-requests: write
- name: Checkout repository
uses: actions/checkout@v7
with:
fetch-depth: 1
- name: setup NPM
uses: actions/setup-node@v6
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: Migration
shell: bash
env:
IS_ADF_AFFECTED: ${{ needs.upstream.outputs.hasNewADFVersion }}
IS_JS_AFFECTED: ${{ needs.upstream.outputs.hasNewJSVersion }}
PACKAGE_VERSION_ADF: ${{ needs.upstream.outputs.latestADFVersion }}
PACKAGE_VERSION_JS: ${{ needs.upstream.outputs.latestJSVersion }}
run: |
migrateDependenciesADF() {
echo "Update ADF dependencies to: ${PACKAGE_VERSION_ADF}"
./scripts/update-version.sh -v ${PACKAGE_VERSION_ADF} -vj latest
echo "Migration ADF done"
}
migrateDependenciesJS() {
echo "Update JS dependencies to: ${PACKAGE_VERSION_JS}"
./scripts/update-version.sh -v latest -vj ${PACKAGE_VERSION_JS}
echo "Migration JS done"
}
migrateAllDependencies() {
echo "Update ADF dependencies to: ${PACKAGE_VERSION_ADF} and JS dependencies to: ${PACKAGE_VERSION_JS}"
./scripts/update-version.sh -v ${PACKAGE_VERSION_ADF} -vj ${PACKAGE_VERSION_JS}
echo "Migration done"
}
if [[ "$IS_ADF_AFFECTED" == "true" ]] && [[ "$IS_JS_AFFECTED" == "true" ]]; then
migrateAllDependencies
elif [[ "$IS_ADF_AFFECTED" == "true" ]]; then
migrateDependenciesADF
elif [[ "$IS_JS_AFFECTED" == "true" ]]; then
migrateDependenciesJS
fi
- name: Prepare PR title
id: pr-meta
if: ${{ needs.upstream.outputs.hasNewVersion == 'true' }}
env:
PACKAGE_VERSION_ADF: ${{ needs.upstream.outputs.latestADFVersion }}
PACKAGE_VERSION_JS: ${{ needs.upstream.outputs.latestJSVersion }}
run: |
if [[ "$PACKAGE_VERSION_ADF" == "next" || "$PACKAGE_VERSION_ADF" == "latest" ]]; then
title="GH Auto: Upstream dependencies ADF and JS-API using Tag:${PACKAGE_VERSION_ADF}"
else
title="GH Auto: Upstream dependencies ADF:${PACKAGE_VERSION_ADF} JS-API:${PACKAGE_VERSION_JS} using Tag:${PACKAGE_VERSION_ADF}"
fi
echo "title=$title" >> "$GITHUB_OUTPUT"
- name: Create a Pull request
if: ${{ needs.upstream.outputs.hasNewVersion == 'true' }}
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
with:
token: ${{ steps.app-token.outputs.token }}
base: develop
branch: upstream-dependencies
sign-commits: true
commit-message: "[ci:force][auto-commit] Update dependencies ADF:${{ needs.upstream.outputs.latestADFVersion }} JS:${{ needs.upstream.outputs.latestJSVersion }}"
title: ${{ steps.pr-meta.outputs.title }}
body: Automatic PR
add-paths: |
package.json
package-lock.json