diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 65b95bdd..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,137 +0,0 @@ -version: 2.1 -orbs: - node: circleci/node@2.1.0 - slack: circleci/slack@3.4.2 -defaults: &defaults - working_directory: ~/project - executor: - name: node/default - tag: '16.18.0' -jobs: - build-and-test: - <<: *defaults - steps: - - checkout - - node/install-packages #node orb cmd caches - - run: npm run test - - persist_to_workspace: - root: ~/project - paths: . - deploy-npm: - <<: *defaults - steps: - - attach_workspace: - at: ~/project - - add_ssh_keys: - fingerprints: - - "be:38:fa:65:8c:8b:cc:04:db:f5:2b:6e:22:9d:82:55" - - run: ssh-keyscan -H github.com >> ~/.ssh/known_hosts - - run: - name: "configure release version" - command: | - VPKG=$($(npm bin)/json -f package.json version) - echo "export VERSION=${VPKG/%?/}$(date +%Y%m%d%H%M%S)" >> $BASH_ENV - - run: - name: "publish" - command: | - npm --no-git-tag-version version $VERSION - npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN - npm publish - - run: - name: "tag release" - command: | - git tag $VERSION - git push $CIRCLE_REPOSITORY_URL $VERSION - pull-translations: - <<: *defaults - steps: - - checkout - - node/install-packages - - run: - name: "pull editor and www translations" - command: | - npm run pull:editor - npm run pull:www - npm run test - no_output_timeout: 30m - - persist_to_workspace: - root: ~/project - paths: . - - slack/status: - fail_only: true - failure_message: ":explosion: Pull editor and www translations failed, for help see: https://github.com/LLK/scratch-l10n/wiki/Developer-Guide#weekly-editor-and-website-update" - only_for_branches: "master" - commit-translations: - <<: *defaults - steps: - - attach_workspace: - at: ~/project - - add_ssh_keys: - fingerprints: - - "be:38:fa:65:8c:8b:cc:04:db:f5:2b:6e:22:9d:82:55" - - run: ssh-keyscan -H github.com >> ~/.ssh/known_hosts - - run: - name: "commit translation updates" - command: | - git config --global user.email $(git log --pretty=format:"%ae" -n1) - git config --global user.name $(git log --pretty=format:"%an" -n1) - git add . - if git diff --cached --exit-code --quiet; then - echo "Nothing to commit." - else - git commit -m "pull new editor translations from Transifex" - git push $CIRCLE_REPOSITORY_URL HEAD:master - fi - sync-help: - <<: *defaults - steps: - - checkout - - node/install-packages - - run: npm run sync:help - - slack/status: - fail_only: true - failure_message: ":boom: Scratch Help update failed, for help see: https://github.com/LLK/scratch-l10n/wiki/Developer-Guide#daily-help-update" - only_for_branches: "master" -workflows: - version: 2 - build-test-and-deploy: - jobs: - - build-and-test - - deploy-npm: - requires: - - build-and-test - filters: - branches: - only: master - manual-pull: - when: - equal: [ tx-pull-manual, << pipeline.git.branch >> ] - jobs: - - pull-translations - - commit-translations: - requires: - - pull-translations - filters: - branches: - only: tx-pull-manual - daily-tx-pull: - triggers: - - schedule: # daily at 3am UTC (10pm EST) - cron: "0 3 * * *" - filters: - branches: - only: master - jobs: - - pull-translations - - commit-translations: - requires: - - pull-translations # don't commit if there were errors - daily-help-update: - triggers: - - schedule: # daily at 5am UTC - cron: "0 5 * * *" - filters: - branches: - only: master - jobs: - - sync-help diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml new file mode 100644 index 00000000..87fbca85 --- /dev/null +++ b/.github/workflows/ci-cd.yml @@ -0,0 +1,137 @@ +name: CI/CD + +on: + workflow_dispatch: # Allows you to run this workflow manually from the Actions tab + pull_request: # Runs whenever a pull request is created or updated + push: # Runs whenever a commit is pushed to the repository + branches: [master, tx-pull-manual] + schedule: + # daily-tx-pull (e.g., daily at 3 AM UTC) + - cron: "0 3 * * *" + # daily-help-update (e.g., daily at 5 AM UTC) + - cron: "0 5 * * *" + +concurrency: + group: "${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}" + cancel-in-progress: true + +permissions: + contents: write # publish a GitHub release + pages: write # deploy to GitHub Pages + issues: write # comment on released issues + pull-requests: write # comment on released pull requests + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + env: + TRIGGER_DEPLOY: ${{ startsWith(github.ref, 'refs/heads/master') }} + steps: + - uses: actions/checkout@v4 + - uses: wagoid/commitlint-github-action@v5 + if: github.event_name == 'pull_request' + - uses: actions/setup-node@v3 + with: + cache: "npm" + node-version-file: ".nvmrc" + + - name: Info + run: | + cat <> $GITHUB_ENV + + - name: Deploy to NPM (do a dry-run if not on master) + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TAG: "latest" + run: | + message=$([[ "$TRIGGER_DEPLOY" == "false" ]] && echo "DRY RUN of" || echo "Deploying") + echo "$message version $RELEASE_VERSION to $NPM_TAG" + npm --no-git-tag-version version $RELEASE_VERSION + npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN + npm publish --tag $NPM_TAG $([[ "$TRIGGER_DEPLOY" == "false" ]] && echo "--dry-run") + + - name: Check Release Version and Create Tag + run: | + if npm info | grep -q $RELEASE_VERSION; then + git tag $RELEASE_VERSION + git push origin $RELEASE_VERSION + fi + + daily-help-update: + runs-on: ubuntu-latest + + env: + # Organization-wide secrets + FRESHDESK_TOKEN: ${{ secrets.FRESHDESK_TOKEN }} + TX_TOKEN: ${{ secrets.TX_TOKEN }} + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + cache: "npm" + node-version-file: ".nvmrc" + + - name: Install dependencies + run: | + npm ci + npx browserslist@latest --update-db + + - name: Sync help + run: npm run sync:help + + daily-tx-pull: + runs-on: ubuntu-latest + + env: + # Organization-wide secrets + TX_TOKEN: ${{ secrets.TX_TOKEN }} + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + cache: "npm" + node-version-file: ".nvmrc" + + - name: Install dependencies + run: npm ci + + - name: Pull editor and www translations + run: | + npm run pull:editor + npm run pull:www + npm run test + + - name: Commit translation updates + run: | + git config --global user.email $(git log --pretty=format:"%ae" -n1) + git config --global user.name $(git log --pretty=format:"%an" -n1) + git add . + if git diff --cached --exit-code --quiet; then + echo "Nothing to commit." + else + git commit -m "pull new editor translations from Transifex" + git push origin HEAD:master + fi diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..6f7f377b --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v16