Test and Release #650
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test and Release | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: '42 */160 * * *' | |
release: | |
types: | |
- published | |
pull_request: | |
branches: | |
- master | |
- v[0-9]+.[0-9]+-dev | |
jobs: | |
test: | |
name: Run DAPI tests | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 10 | |
steps: | |
- name: Cancel previous runs | |
uses: styfle/cancel-workflow-action@0.9.0 | |
with: | |
access_token: ${{ github.token }} | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: '16' | |
- name: Enable NPM cache | |
uses: actions/cache@v2 | |
with: | |
path: '~/.npm' | |
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Check NPM package lock version is updated | |
uses: dashevo/gh-action-check-package-lock@v1 | |
- name: Install NPM dependencies | |
run: npm ci | |
- name: Run ESLinter | |
run: npm run lint | |
- name: Create dotenv file | |
run: cp .env.example .env | |
- name: Run tests | |
run: npm run test:coverage | |
test_suite: | |
name: Run Platform Test Suite | |
needs: test | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 60 | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-python@v2 | |
with: | |
python-version: '3.8.6' | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: '16' | |
- name: Set up Docker BuildX | |
id: buildx | |
uses: docker/setup-buildx-action@v1 | |
with: | |
version: v0.6.1 | |
install: true | |
driver-opts: image=moby/buildkit:buildx-stable-1 | |
# Temporary fix until Docker Compose V2 is GA | |
- name: Set up Docker Compose V2 | |
run: | | |
curl https://github.com/docker/compose-cli/releases/download/v2.0.0-beta.6/docker-compose-linux-amd64 --location --create-dirs -o $HOME/.docker/cli-plugins/docker-compose | |
chmod +x $HOME/.docker/cli-plugins/docker-compose | |
docker version | |
docker info | |
# - name: Set up QEMU | |
# uses: docker/setup-qemu-action@v1 | |
- name: Enable NPM cache | |
uses: actions/cache@v2 | |
with: | |
path: '~/.npm' | |
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Enable buildkit cache | |
uses: actions/cache@v2 | |
with: | |
path: /tmp/buildkit-cache/buildkit-state.tar | |
key: ${{ runner.os }}-buildkit-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-buildkit- | |
- name: Load buildkit state from cache | |
uses: dashevo/gh-action-cache-buildkit-state@v1 | |
with: | |
builder: buildx_buildkit_${{ steps.buildx.outputs.name }}0 | |
cache-path: /tmp/buildkit-cache | |
cache-max-size: 2g | |
- name: Load workflow dotenv file | |
uses: c-py/action-dotenv-to-setenv@v3 | |
with: | |
env-file: .github/workflows/.env | |
- name: Set compatible branches for Platform components | |
uses: dashevo/gh-action-platform-branches@v1 | |
id: platform-branches | |
with: | |
override-dashmate-branch: ${{ env.DASHMATE_BRANCH }} | |
override-testsuite-branch: ${{ env.TEST_SUITE_BRANCH }} | |
- name: Start Dash local network | |
uses: dashevo/gh-action-start-local-network@v1 | |
id: start-local-network | |
with: | |
drive-branch: ${{ env.DRIVE_BRANCH }} | |
dapi-branch: ${{ steps.platform-branches.outputs.current-branch }} | |
dashmate-branch: ${{ steps.platform-branches.outputs.dashmate-branch }} | |
sdk-branch: ${{ env.SDK_BRANCH }} | |
- name: Run Platform Test Suite | |
uses: dashevo/gh-action-run-platform-test-suite@v1 | |
with: | |
sdk-branch: ${{ env.SDK_BRANCH }} | |
faucet-private-key: ${{ steps.start-local-network.outputs.faucet-private-key }} | |
dpns-contract-id: ${{ steps.start-local-network.outputs.dpns-contract-id }} | |
dpns-top-level-identity-id: ${{ steps.start-local-network.outputs.dpns-top-level-identity-id }} | |
dpns-top-level-identity-private-key: ${{ steps.start-local-network.outputs.dpns-top-level-identity-private-key }} | |
platform-test-suite-branch: ${{ steps.platform-branches.outputs.testsuite-branch }} | |
feature-flags-identity-id: ${{ steps.start-local-network.outputs.feature-flags-identity-id }} | |
feature-flags-contract-id: ${{ steps.start-local-network.outputs.feature-flags-contract-id }} | |
- name: Show Docker logs | |
if: ${{ failure() }} | |
uses: jwalton/gh-docker-logs@v1 | |
release: | |
name: Release Docker Image | |
runs-on: ubuntu-20.04 | |
needs: test_suite | |
if: ${{ github.event_name == 'release' }} | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Check package version matches tag | |
uses: geritol/match-tag-to-package-version@0.1.0 | |
env: | |
TAG_PREFIX: refs/tags/v | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v1 | |
- name: Set up Docker BuildX | |
id: buildx | |
uses: docker/setup-buildx-action@v1 | |
with: | |
version: v0.6.1 | |
install: true | |
driver-opts: image=moby/buildkit:latest | |
- name: Enable buildkit cache | |
uses: actions/cache@v2 | |
with: | |
path: /tmp/buildkit-cache/buildkit-state.tar | |
key: ${{ runner.os }}-buildkit-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-buildkit- | |
- name: Load buildkit state from cache | |
uses: dashevo/gh-action-cache-buildkit-state@v1 | |
with: | |
builder: buildx_buildkit_${{ steps.buildx.outputs.name }}0 | |
cache-path: /tmp/buildkit-cache | |
cache-max-size: 2g | |
- name: Login to DockerHub | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set suffix to Docker tags | |
uses: actions/github-script@v3 | |
id: suffix | |
with: | |
result-encoding: string | |
script: "return (context.payload.release.tag_name.includes('-dev') ? '-dev' : '');" | |
- name: Set Docker tags and labels | |
id: docker_meta | |
uses: docker/metadata-action@v3 | |
with: | |
images: dashpay/dapi | |
tags: | | |
type=match,pattern=v(\d+),group=1 | |
type=match,pattern=v(\d+.\d+),group=1 | |
type=match,pattern=v(\d+.\d+.\d+),group=1 | |
type=match,pattern=v(.*),group=1,suffix=,enable=${{ contains(github.event.release.tag_name, '-dev') }} | |
flavor: | | |
latest=${{ !contains(github.event.release.tag_name, '-dev') }} | |
suffix=${{ steps.suffix.outputs.result }} | |
- name: Build and push Docker image | |
id: docker_build | |
uses: docker/build-push-action@v2 | |
with: | |
context: . | |
builder: ${{ steps.buildx.outputs.name }} | |
file: ./Dockerfile | |
push: true | |
tags: ${{ steps.docker_meta.outputs.tags }} | |
labels: ${{ steps.docker_meta.outputs.labels }} | |
platforms: linux/amd64,linux/arm64 | |
- name: Show Docker image digest | |
run: echo ${{ steps.docker_build.outputs.digest }} |