diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml new file mode 100644 index 0000000..dbdfd98 --- /dev/null +++ b/.github/workflows/check-dist.yml @@ -0,0 +1,65 @@ +# In JavaScript actions, `dist/index.js` is a special file. When you reference +# an action with `uses:`, `dist/index.js` is the code that will be run. For this +# project, the `dist/index.js` file is generated from other source files through +# the build process. We need to make sure that the checked-in `dist/index.js` +# file matches what is expected from the build. +# +# This workflow will fail if the checked-in `dist/index.js` file does not match +# what is expected from the build. +name: Check dist/ + +on: + push: + branches: + - main + paths-ignore: + - '**.md' + pull_request: + paths-ignore: + - '**.md' + workflow_dispatch: + +jobs: + check-dist: + name: Check dist/ + runs-on: ubuntu-latest + + permissions: + contents: read + statuses: write + + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 20 + cache: npm + + - name: Install Dependencies + id: install + run: npm ci + + - name: Build dist/ Directory + id: build + run: npm run bundle + + - name: Compare Expected and Actual Directories + id: diff + run: | + if [ "$(git diff --ignore-space-at-eol --text dist/ | wc -l)" -gt "0" ]; then + echo "Detected uncommitted changes after build. See status below:" + git diff --ignore-space-at-eol --text dist/ + exit 1 + fi + + # If index.js was different than expected, upload the expected version as + # a workflow artifact. + - uses: actions/upload-artifact@v3 + if: ${{ failure() && steps.diff.conclusion == 'failure' }} + with: + name: dist + path: dist/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cb13640..03dd2fe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,19 +1,15 @@ -name: CI/CD Pipeline +name: Continuous Integration on: + pull_request: push: branches: - main - "releases/*" - pull_request: - workflow_dispatch: - -permissions: - contents: write - statuses: write jobs: - build-test-deploy: + test-javascript: + name: JavaScript Tests runs-on: ubuntu-latest steps: @@ -29,9 +25,6 @@ jobs: - name: Install Dependencies run: npm ci - - name: Print ncc version - run: npx ncc --version - - name: Check Format run: npm run format:check @@ -41,11 +34,15 @@ jobs: - name: Test run: npm run ci-test - - name: Build dist/ Directory - if: github.ref == 'refs/heads/main' - run: npm run bundle + test-action: + name: GitHub Actions Test + runs-on: ubuntu-latest - - name: GitHub Actions Test with JSON + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Test Local Action with JSON uses: ./ with: feed_url: "https://modelingmarkets.substack.com/feed" @@ -54,7 +51,7 @@ jobs: - name: Validate JSON run: node -e "const fs = require('fs'); const data = fs.readFileSync('temp.json', 'utf8'); const obj = JSON.parse(data); if (!obj || !obj.rss || !obj.rss.$) { console.error('Invalid object'); process.exit(1); }" - - name: GitHub Actions Test with XML + - name: Test Local Action with XML uses: ./ with: feed_url: "https://modelingmarkets.substack.com/feed" @@ -62,9 +59,3 @@ jobs: - name: Validate XML run: node -e "const fs = require('fs'); const data = fs.readFileSync('temp.xml', 'utf8'); if (!data.includes('')) { console.error('Invalid XML'); process.exit(1); }" - - - name: Push dist/ Directory - if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[ci skip]') - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: 'Automated build & deploy [skip ci]'