From 18f6df9398b646c7cfcd800f0b1b1b696b19b1c3 Mon Sep 17 00:00:00 2001 From: Dany Pellerin Date: Thu, 7 Nov 2024 15:06:34 -0500 Subject: [PATCH] Rework workflows --- .github/workflows/pull-request.yml | 189 +---------------------- .github/workflows/release.yml | 144 +++++++++++++++++ .github/workflows/reusable-lint-test.yml | 46 ++++++ 3 files changed, 192 insertions(+), 187 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/reusable-lint-test.yml diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 0ec5b91..8426554 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -1,8 +1,5 @@ name: CI to build the sdk on: - push: - branches: - - master pull_request: types: - opened @@ -12,187 +9,5 @@ on: workflow_dispatch: jobs: - tests: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Cache dependencies - id: cache-node-modules - uses: actions/cache@v4 - with: - path: node_modules - key: node-${{ hashFiles('package-lock.json') }} - - - name: Install dependencies - if: steps.cache-node-modules.outputs.cache-hit != 'true' - run: npm ci - - - name: Test - run: npm run test - - prettier: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Cache dependencies - id: cache-node-modules - uses: actions/cache@v4 - with: - path: node_modules - key: node-${{ hashFiles('package-lock.json') }} - - - name: Install dependencies - if: steps.cache-node-modules.outputs.cache-hit != 'true' - run: npm ci - - - name: Run prettier - run: npm run format - - - name: Check if prettier changed files - run: git diff --exit-code || (echo "ESLint fixed some files. Please commit the changes." && exit 1) - - build-web-prod: - needs: [tests, prettier] - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Cache dependencies - id: cache-node-modules - uses: actions/cache@v4 - with: - path: node_modules - key: node-${{ hashFiles('package-lock.json') }} - - - name: Install dependencies - if: steps.cache-node-modules.outputs.cache-hit != 'true' - run: npm ci - - - name: Build web production - run: npm run build-web -- --mode=production - - transpile-lib: - needs: [tests, prettier] - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Cache dependencies - id: cache-node-modules - uses: actions/cache@v4 - with: - path: node_modules - key: node-${{ hashFiles('**/package-lock.json') }} - - - name: Install dependencies - if: steps.cache-node-modules.outputs.cache-hit != 'true' - run: npm ci - - - name: Transpile lib - run: npm run build-lib - - create-demo-html-templates: - needs: [tests, prettier] - runs-on: ubuntu-latest - env: - SDK_URI: https://cdn.optable.co/web-sdk/latest/sdk.js - ADS_HOST: ads.optable.co - ADS_REGION: ca - ADS_SITE: 4fe7c1ce-7c7d-4718-a0b8-5195e489319f - DCN_HOST: sandbox.optable.co - DCN_SITE: web-sdk-demo - DCN_ID: optable - DCN_INSECURE: "false" - DCN_INIT: "true" - UID2_BASE_URL: https://operator-integ.uidapi.com - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Generate templates - run: | - export SDK_URI=${{ env.SDK_URI }} - export DCN_HOST=${{ env.DCN_HOST }} - export DCN_SITE=${{ env.DCN_SITE }} - export DCN_ID=${{ env.DCN_ID }} - export DCN_INSECURE=${{ env.DCN_INSECURE }} - export DCN_INIT=${{ env.DCN_INIT }} - export ADS_SITE=${{ env.ADS_SITE }} - export ADS_HOST=${{ env.ADS_HOST }} - export ADS_REGION=${{ env.ADS_REGION }} - export UID2_BASE_URL=${{ env.UID2_BASE_URL }} - - envsubst < demos/vanilla/identify.html.tpl > demos/vanilla/identify.html - envsubst < demos/vanilla/witness.html.tpl > demos/vanilla/witness.html - envsubst < demos/vanilla/profile.html.tpl > demos/vanilla/profile.html - envsubst < demos/vanilla/targeting/gam360.html.tpl > demos/vanilla/targeting/gam360.html - envsubst < demos/vanilla/targeting/gam360-cached.html.tpl > demos/vanilla/targeting/gam360-cached.html - envsubst < demos/vanilla/targeting/prebid.html.tpl > demos/vanilla/targeting/prebid.html - envsubst < demos/vanilla/nocookies/identify.html.tpl > demos/vanilla/nocookies/identify.html - envsubst < demos/vanilla/nocookies/witness.html.tpl > demos/vanilla/nocookies/witness.html - envsubst < demos/vanilla/nocookies/profile.html.tpl > demos/vanilla/nocookies/profile.html - envsubst < demos/vanilla/nocookies/targeting/gam360.html.tpl > demos/vanilla/nocookies/targeting/gam360.html - envsubst < demos/vanilla/nocookies/targeting/gam360-cached.html.tpl > demos/vanilla/nocookies/targeting/gam360-cached.html - envsubst < demos/vanilla/nocookies/targeting/prebid.html.tpl > demos/vanilla/nocookies/targeting/prebid.html - envsubst < demos/integration/lmpid-prebid-gpt.html.tpl > demos/integration/lmpid-prebid-gpt.html - envsubst < demos/integration/lmpid-signal-gpt.html.tpl > demos/integration/lmpid-signal-gpt.html - envsubst < demos/ads/protected-audience/advertiser.html.tpl > demos/ads/protected-audience/advertiser.html - envsubst < demos/ads/protected-audience/publisher.html.tpl > demos/ads/protected-audience/publisher.html - envsubst < demos/ads/protected-audience/publisher-gam.html.tpl > demos/ads/protected-audience/publisher-gam.html - envsubst < demos/ads/protected-audience/publisher-prebid.html.tpl > demos/ads/protected-audience/publisher-prebid.html - envsubst < demos/ads/protected-audience/ad.html.tpl > demos/ads/protected-audience/ad.html - envsubst < demos/ads/topics/publisher.html.tpl > demos/ads/topics/publisher.html - envsubst < demos/vanilla/uid2_token/login.html.tpl > demos/vanilla/uid2_token/login.html - envsubst < demos/vanilla/uid2_token/index.html.tpl > demos/vanilla/uid2_token/index.html - - create-demo-react: - needs: [tests, prettier] - runs-on: ubuntu-latest - env: - DEMO_REACT_PATH: demos/npm - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Cache dependencies - id: cache-node-modules - uses: actions/cache@v4 - with: - path: ${{ env.DEMO_REACT_PATH }}/node_modules - key: node-demo-react-${{ hashFiles('demos/react/package-lock.json') }} - - - name: Install dependencies - if: steps.cache-node-modules.outputs.cache-hit != 'true' - run: npm --prefix ${{ env.DEMO_REACT_PATH }} ci - - - name: Build react demo - run: npm --prefix ${{ env.DEMO_REACT_PATH }} run build - - create-demo-npm: - needs: [tests, prettier] - runs-on: ubuntu-latest - env: - DEMO_NPM_PATH: demos/npm - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Cache dependencies - id: cache-node-modules - uses: actions/cache@v4 - with: - path: ${{ env.DEMO_NPM_PATH }}/node_modules - key: node-demo-npm-${{ hashFiles('demos/npm/package-lock.json') }} - - - name: Install dependencies - if: steps.cache-node-modules.outputs.cache-hit != 'true' - run: npm --prefix ${{ env.DEMO_NPM_PATH }} ci - - - name: Build react demo - run: npm --prefix ${{ env.DEMO_NPM_PATH }} run build + tests-prettier: + uses: ./.github/workflows/reusable-lint-test.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..54f5ec3 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,144 @@ +name: Release new version of Optable SDK and demos +on: + push: + branches: + - migrate-to-gh-actions + # push: + # tags: + # - 'v.*' + +jobs: + tests-prettier: + uses: ./.github/workflows/reusable-lint-test.yml + + publish-to-npm: + needs: [tests-prettier] + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Cache dependencies + id: cache-node-modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-${{ hashFiles('package-lock.json') }} + + - name: Install dependencies + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: npm ci + + - name: Build web production + run: npm run build-web -- --mode=production + + - name: Transpile lib + run: npm run build-lib + + - name: Setup registry access + run: | + echo '@optable:registry=https://registry.npmjs.org/' > ~/.npmrc + echo "//registry.npmjs.org/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> ~/.npmrc + + - name: List files in the repository + run: | + ls ${{ github.workspace }}/lib/dist + ls ${{ github.workspace }}/browser/dist + + # - name: Publish to NPM + # run: npm publish --dry-run + # run: npm publish --access public + + deploy-demo: + needs: [tests-prettier, publish-to-npm] + runs-on: ubuntu-latest + env: + SDK_URI: https://cdn.optable.co/web-sdk/latest/sdk.js + ADS_HOST: ads.optable.co + ADS_REGION: ca + ADS_SITE: 4fe7c1ce-7c7d-4718-a0b8-5195e489319f + DCN_HOST: sandbox.optable.co + DCN_SITE: web-sdk-demo + DCN_ID: optable + DCN_INSECURE: "false" + DCN_INIT: "true" + UID2_BASE_URL: https://operator-integ.uidapi.com + + DEMO_REACT_PATH: demos/npm + DEMO_NPM_PATH: demos/npm + permissions: + packages: write + contents: read + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Build vanilla demo + run: | + export SDK_URI=${{ env.SDK_URI }} + export DCN_HOST=${{ env.DCN_HOST }} + export DCN_SITE=${{ env.DCN_SITE }} + export DCN_ID=${{ env.DCN_ID }} + export DCN_INSECURE=${{ env.DCN_INSECURE }} + export DCN_INIT=${{ env.DCN_INIT }} + export ADS_SITE=${{ env.ADS_SITE }} + export ADS_HOST=${{ env.ADS_HOST }} + export ADS_REGION=${{ env.ADS_REGION }} + export UID2_BASE_URL=${{ env.UID2_BASE_URL }} + + envsubst < demos/vanilla/identify.html.tpl > demos/vanilla/identify.html + envsubst < demos/vanilla/witness.html.tpl > demos/vanilla/witness.html + envsubst < demos/vanilla/profile.html.tpl > demos/vanilla/profile.html + envsubst < demos/vanilla/targeting/gam360.html.tpl > demos/vanilla/targeting/gam360.html + envsubst < demos/vanilla/targeting/gam360-cached.html.tpl > demos/vanilla/targeting/gam360-cached.html + envsubst < demos/vanilla/targeting/prebid.html.tpl > demos/vanilla/targeting/prebid.html + envsubst < demos/vanilla/nocookies/identify.html.tpl > demos/vanilla/nocookies/identify.html + envsubst < demos/vanilla/nocookies/witness.html.tpl > demos/vanilla/nocookies/witness.html + envsubst < demos/vanilla/nocookies/profile.html.tpl > demos/vanilla/nocookies/profile.html + envsubst < demos/vanilla/nocookies/targeting/gam360.html.tpl > demos/vanilla/nocookies/targeting/gam360.html + envsubst < demos/vanilla/nocookies/targeting/gam360-cached.html.tpl > demos/vanilla/nocookies/targeting/gam360-cached.html + envsubst < demos/vanilla/nocookies/targeting/prebid.html.tpl > demos/vanilla/nocookies/targeting/prebid.html + envsubst < demos/integration/lmpid-prebid-gpt.html.tpl > demos/integration/lmpid-prebid-gpt.html + envsubst < demos/integration/lmpid-signal-gpt.html.tpl > demos/integration/lmpid-signal-gpt.html + envsubst < demos/ads/protected-audience/advertiser.html.tpl > demos/ads/protected-audience/advertiser.html + envsubst < demos/ads/protected-audience/publisher.html.tpl > demos/ads/protected-audience/publisher.html + envsubst < demos/ads/protected-audience/publisher-gam.html.tpl > demos/ads/protected-audience/publisher-gam.html + envsubst < demos/ads/protected-audience/publisher-prebid.html.tpl > demos/ads/protected-audience/publisher-prebid.html + envsubst < demos/ads/protected-audience/ad.html.tpl > demos/ads/protected-audience/ad.html + envsubst < demos/ads/topics/publisher.html.tpl > demos/ads/topics/publisher.html + envsubst < demos/vanilla/uid2_token/login.html.tpl > demos/vanilla/uid2_token/login.html + envsubst < demos/vanilla/uid2_token/index.html.tpl > demos/vanilla/uid2_token/index.html + + - name: Cache dependencies + id: cache-node-modules-react-demo + uses: actions/cache@v4 + with: + path: ${{ env.DEMO_REACT_PATH }}/node_modules + key: node-demo-react-${{ hashFiles('demos/react/package-lock.json') }} + + - name: Install react demo dependencies + if: steps.cache-node-modules-react-demo.outputs.cache-hit != 'true' + run: npm --prefix ${{ env.DEMO_REACT_PATH }} ci + + - name: Build react demo + run: npm --prefix ${{ env.DEMO_REACT_PATH }} run build + + - name: Cache dependencies + id: cache-node-modules-npm-demo + uses: actions/cache@v4 + with: + path: ${{ env.DEMO_NPM_PATH }}/node_modules + key: node-demo-npm-${{ hashFiles('demos/npm/package-lock.json') }} + + - name: Install dependencies + if: steps.cache-node-modules-npm-demo.outputs.cache-hit != 'true' + run: npm --prefix ${{ env.DEMO_NPM_PATH }} ci + + - name: Build npm demo + run: npm --prefix ${{ env.DEMO_NPM_PATH }} run build + + - name: List files in the repository + run: | + ls ${{ github.workspace }}/demos/vanilla + ls ${{ github.workspace }}/demos/integration + ls ${{ github.workspace }}/demos/ads diff --git a/.github/workflows/reusable-lint-test.yml b/.github/workflows/reusable-lint-test.yml new file mode 100644 index 0000000..e266982 --- /dev/null +++ b/.github/workflows/reusable-lint-test.yml @@ -0,0 +1,46 @@ +name: CI to build the sdk +on: workflow_call + +jobs: + tests: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Cache dependencies + id: cache-node-modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-${{ hashFiles('package-lock.json') }} + + - name: Install dependencies + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: npm ci + + - name: Test + run: npm run test + + prettier: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Cache dependencies + id: cache-node-modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-${{ hashFiles('package-lock.json') }} + + - name: Install dependencies + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: npm ci + + - name: Run prettier + run: npm run format + + - name: Check if prettier changed files + run: git diff --exit-code || (echo "ESLint fixed some files. Please commit the changes." && exit 1)