Merge pull request #464 from rtfpessoa/test-actions
Migrate to GitHub Actions
This commit is contained in:
commit
88b06ef3e3
5 changed files with 189 additions and 270 deletions
|
|
@ -1,219 +0,0 @@
|
|||
version: 2.1
|
||||
|
||||
jobs:
|
||||
checkout-and-version:
|
||||
docker:
|
||||
- image: codacy/git-version
|
||||
working_directory: ~/workdir
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Get next version
|
||||
command: |
|
||||
export NEXT_VERSION="$(/bin/git-version --folder=$PWD --release-branch=master)"
|
||||
echo "Next version is ${NEXT_VERSION}"
|
||||
echo "${NEXT_VERSION}" > .version
|
||||
- run:
|
||||
name: Get next npm tag name
|
||||
command: |
|
||||
if [ "${CIRCLE_BRANCH}" = "master" ]; then
|
||||
export PUBLISH_TAG="latest"
|
||||
elif [ "${CIRCLE_BRANCH}" = "next" ]; then
|
||||
export PUBLISH_TAG="next"
|
||||
else
|
||||
export PUBLISH_TAG="pr"
|
||||
fi
|
||||
echo "Next tag is ${PUBLISH_TAG}"
|
||||
echo "${PUBLISH_TAG}" > .tag
|
||||
- persist_to_workspace:
|
||||
root: ~/workdir
|
||||
paths:
|
||||
- '*'
|
||||
|
||||
build-common: &build-common
|
||||
docker:
|
||||
- image: node
|
||||
working_directory: ~/workdir
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: ~/workdir
|
||||
- restore_cache:
|
||||
key: yarn-cache-{{ checksum "yarn.lock" }}
|
||||
- run:
|
||||
name: Log environment setup
|
||||
command: |
|
||||
node -v
|
||||
yarn -v
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: yarn install --ignore-engines
|
||||
- save_cache:
|
||||
key: yarn-cache-{{ checksum "yarn.lock" }}
|
||||
paths:
|
||||
- /usr/local/share/.cache/yarn
|
||||
- run:
|
||||
name: Build templates
|
||||
command: yarn run build:templates
|
||||
- run:
|
||||
name: Build library
|
||||
command: yarn run build
|
||||
|
||||
build-stable: &build-stable
|
||||
docker:
|
||||
- image: node
|
||||
working_directory: ~/workdir
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: ~/workdir
|
||||
- restore_cache:
|
||||
key: yarn-cache-{{ checksum "yarn.lock" }}
|
||||
- run:
|
||||
name: Log environment setup
|
||||
command: |
|
||||
node -v
|
||||
yarn -v
|
||||
- run:
|
||||
name: Install dependencies
|
||||
command: yarn
|
||||
- save_cache:
|
||||
key: yarn-cache-{{ checksum "yarn.lock" }}
|
||||
paths:
|
||||
- /usr/local/share/.cache/yarn
|
||||
- run:
|
||||
name: Validate & Build
|
||||
command: yarn run validate
|
||||
- store_artifacts:
|
||||
path: coverage
|
||||
- store_test_results:
|
||||
path: coverage
|
||||
- run: yarn run coverage:push
|
||||
- persist_to_workspace:
|
||||
root: ~/workdir
|
||||
paths:
|
||||
- '*'
|
||||
|
||||
build-node-18:
|
||||
<<: *build-stable
|
||||
docker:
|
||||
- image: node:18
|
||||
|
||||
build-node-16:
|
||||
<<: *build-common
|
||||
docker:
|
||||
- image: node:16
|
||||
|
||||
tag_version:
|
||||
docker:
|
||||
- image: node:18
|
||||
working_directory: ~/workdir
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: ~/workdir
|
||||
- run:
|
||||
name: Configure Git
|
||||
command: |
|
||||
git config user.email "circleci@users.noreply.github.com"
|
||||
git config user.name "CircleCI"
|
||||
- run:
|
||||
name: Tag version
|
||||
command: |
|
||||
git tag "$(cat .version)"
|
||||
git push --tags "https://rtfpessoa:$GPR_AUTH_TOKEN@github.com/rtfpessoa/diff2html"
|
||||
|
||||
publish_library:
|
||||
docker:
|
||||
- image: node:18
|
||||
working_directory: ~/workdir
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: ~/workdir
|
||||
- run:
|
||||
name: Configure Yarn version
|
||||
command: |
|
||||
yarn config set version-tag-prefix ""
|
||||
yarn config set version-git-message "Release version %s"
|
||||
- run:
|
||||
name: Configure Git
|
||||
command: |
|
||||
git config user.email "circleci@users.noreply.github.com"
|
||||
git config user.name "CircleCI"
|
||||
- run:
|
||||
name: Version package
|
||||
command: |
|
||||
# Update version in packages to publish
|
||||
yarn version --non-interactive --new-version $(cat .version)
|
||||
- run:
|
||||
name: Setup npm credentials
|
||||
command: |
|
||||
rm -f .npmrc
|
||||
touch .npmrc
|
||||
echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}" >> .npmrc
|
||||
echo "registry=https://registry.npmjs.org/" >> .npmrc
|
||||
echo "access=public" >> .npmrc
|
||||
echo "save-exact=true" >> .npmrc
|
||||
- run:
|
||||
name: Publish npm package
|
||||
command: |
|
||||
# Publish package versions to npmjs.org
|
||||
yarn publish --tag $(cat .tag) --non-interactive --new-version $(cat .version)
|
||||
- run:
|
||||
name: Setup gpr credentials
|
||||
command: |
|
||||
rm -f .npmrc
|
||||
touch .npmrc
|
||||
echo "//npm.pkg.github.com/:_authToken=${GPR_AUTH_TOKEN}" >> .npmrc
|
||||
echo "@rtfpessoa:registry=https://npm.pkg.github.com/" >> .npmrc
|
||||
echo "access=public" >> .npmrc
|
||||
echo "save-exact=true" >> .npmrc
|
||||
- run:
|
||||
name: Publish gpr package
|
||||
command: |
|
||||
# HACK: Override npm package name to be able to publish in GitHub
|
||||
sed -i 's/^ "name":.*/ "name": "@rtfpessoa\/diff2html",/g' package.json
|
||||
echo "Going to publish version $(cat .version) to GitHub"
|
||||
yarn publish --tag $(cat .tag) --non-interactive --new-version $(cat .version)
|
||||
# HACK: Restore npm package name
|
||||
sed -i 's/^ "name":.*/ "name": "diff2html",/g' package.json
|
||||
|
||||
publish_website:
|
||||
machine:
|
||||
image: ubuntu-2204:current
|
||||
working_directory: ~/workdir
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: ~/workdir
|
||||
- run:
|
||||
name: Deploy
|
||||
working_directory: ~/workdir/docs
|
||||
command: |
|
||||
aws s3 sync --region eu-west-1 --delete . s3://diff2html.xyz --metadata-directive REPLACE --cache-control max-age=31557600
|
||||
aws cloudfront create-invalidation --region eu-west-1 --distribution-id $AWS_CF_DISTRIBUTION_ID --paths /index.html /demo.html /sitemap.xml /robots.txt
|
||||
|
||||
workflows:
|
||||
validate-and-publish:
|
||||
jobs:
|
||||
- checkout-and-version
|
||||
- build-node-16:
|
||||
requires:
|
||||
- checkout-and-version
|
||||
- build-node-18:
|
||||
requires:
|
||||
- checkout-and-version
|
||||
- publish_approval:
|
||||
type: approval
|
||||
requires:
|
||||
- build-node-16
|
||||
- build-node-18
|
||||
- tag_version:
|
||||
requires:
|
||||
- publish_approval
|
||||
- publish_library:
|
||||
requires:
|
||||
- tag_version
|
||||
- publish_website:
|
||||
requires:
|
||||
- tag_version
|
||||
filters:
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
12
.github/workflows/ci.yml
vendored
Normal file
12
.github/workflows/ci.yml
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
name: ci
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
test-and-publish:
|
||||
uses: ./.github/workflows/test-and-publish.yml
|
||||
with:
|
||||
environment: dev
|
||||
secrets: inherit
|
||||
51
.github/workflows/codeql-analysis.yml
vendored
51
.github/workflows/codeql-analysis.yml
vendored
|
|
@ -1,51 +0,0 @@
|
|||
name: "Code scanning - action"
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: '0 19 * * 1'
|
||||
|
||||
jobs:
|
||||
CodeQL-Build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
# We must fetch at least the immediate parents so that if this is
|
||||
# a pull request then we can checkout the head.
|
||||
fetch-depth: 2
|
||||
|
||||
# If this run was triggered by a pull request event, then checkout
|
||||
# the head of the pull request instead of the merge commit.
|
||||
- run: git checkout HEAD^2
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
# Override language selection by uncommenting this and choosing your languages
|
||||
# with:
|
||||
# languages: go, javascript, csharp, python, cpp, java
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
29
.github/workflows/release.yml
vendored
Normal file
29
.github/workflows/release.yml
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
name: release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
test-and-publish:
|
||||
uses: ./.github/workflows/test-and-publish.yml
|
||||
with:
|
||||
environment: production
|
||||
secrets: inherit
|
||||
|
||||
publish-website:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: amazon/aws-cli
|
||||
needs: [test-and-publish]
|
||||
environment: 'production'
|
||||
steps:
|
||||
- name: Download docs
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: docs
|
||||
- name: Publish to S3
|
||||
run: |
|
||||
cd docs
|
||||
aws s3 sync --region eu-west-1 --delete . s3://diff2html.xyz --metadata-directive REPLACE --cache-control max-age=31557600
|
||||
aws cloudfront create-invalidation --region eu-west-1 --distribution-id $AWS_CF_DISTRIBUTION_ID --paths /index.html /demo.html /sitemap.xml /robots.txt
|
||||
148
.github/workflows/test-and-publish.yml
vendored
Normal file
148
.github/workflows/test-and-publish.yml
vendored
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
name: test-and-publish
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
environment:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
version:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: codacy/git-version
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Fix tar access
|
||||
run: apk add --update --no-progress tar
|
||||
- name: Fix git access
|
||||
run: |
|
||||
git config --global --add safe.directory /__w/diff2html/diff2html
|
||||
- name: Get next version
|
||||
run: |
|
||||
export NEXT_VERSION="$(/bin/git-version --folder=$PWD --release-branch=master)"
|
||||
echo "Next version is ${NEXT_VERSION}"
|
||||
echo "${NEXT_VERSION}" > .version
|
||||
- name: Get next npm tag name
|
||||
run: |
|
||||
if [ "${GITHUB_REF_NAME}" = "master" ]; then
|
||||
export PUBLISH_TAG="latest"
|
||||
elif [ "${GITHUB_REF_NAME}" = "next" ]; then
|
||||
export PUBLISH_TAG="next"
|
||||
else
|
||||
export PUBLISH_TAG="pr"
|
||||
fi
|
||||
echo "Next tag is ${PUBLISH_TAG}"
|
||||
echo "${PUBLISH_TAG}" > .tag
|
||||
- name: Upload versions
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: versions
|
||||
if-no-files-found: error
|
||||
path: |
|
||||
.version
|
||||
.tag
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [version]
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [16.x, 18.x]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'yarn'
|
||||
- name: Log environment setup
|
||||
run: |
|
||||
node -v
|
||||
yarn -v
|
||||
- name: Install dependencies
|
||||
run: yarn install --ignore-engines
|
||||
- name: Build templates
|
||||
run: yarn run build:templates
|
||||
- name: Build library
|
||||
run: yarn run build
|
||||
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build]
|
||||
environment: ${{ inputs.environment }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download versions
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: versions
|
||||
- name: Configure Git
|
||||
run: |
|
||||
git config user.email "gh-actions@users.noreply.github.com"
|
||||
git config user.name "GitHub Actions"
|
||||
- name: Install dependencies
|
||||
run: yarn
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
node-version: '18.x'
|
||||
- name: Configure Yarn version
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
run: |
|
||||
rm -f .npmrc
|
||||
touch .npmrc
|
||||
echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}" >> .npmrc
|
||||
echo "registry=https://registry.npmjs.org/" >> .npmrc
|
||||
echo "access=public" >> .npmrc
|
||||
echo "save-exact=true" >> .npmrc
|
||||
yarn config set version-tag-prefix ""
|
||||
yarn config set version-git-message "Release version %s"
|
||||
- name: Version package
|
||||
run: |
|
||||
# Update version in packages to publish
|
||||
yarn version --non-interactive --new-version $(cat .version)
|
||||
- name: Publish to NPM
|
||||
run: yarn publish --tag $(cat .tag) --non-interactive --new-version $(cat .version)
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '18.x'
|
||||
registry-url: 'https://npm.pkg.github.com'
|
||||
- name: Configure Yarn version
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
rm -f .npmrc
|
||||
touch .npmrc
|
||||
echo "//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}" >> .npmrc
|
||||
echo "@rtfpessoa:registry=https://npm.pkg.github.com/" >> .npmrc
|
||||
echo "access=public" >> .npmrc
|
||||
echo "save-exact=true" >> .npmrc
|
||||
yarn config set version-tag-prefix ""
|
||||
yarn config set version-git-message "Release version %s"
|
||||
- name: Version package
|
||||
run: |
|
||||
# Update version in packages to publish
|
||||
yarn version --non-interactive --new-version $(cat .version)
|
||||
- name: Publish to GPR
|
||||
run: |
|
||||
# HACK: Override npm package name to be able to publish in GitHub
|
||||
sed -i 's/^ "name":.*/ "name": "@rtfpessoa\/diff2html",/g' package.json
|
||||
echo "Going to publish version $(cat .version) to GitHub"
|
||||
yarn publish --tag $(cat .tag) --non-interactive --new-version $(cat .version)
|
||||
# HACK: Restore npm package name
|
||||
sed -i 's/^ "name":.*/ "name": "diff2html",/g' package.json
|
||||
- name: Upload docs
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: docs
|
||||
if-no-files-found: error
|
||||
path: docs/
|
||||
Loading…
Reference in a new issue