Skip to content
This repository has been archived by the owner on May 3, 2024. It is now read-only.

Commit

Permalink
chore(release): release process improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
nellyk authored Aug 19, 2020
1 parent 5c955a8 commit e70eea2
Show file tree
Hide file tree
Showing 8 changed files with 264 additions and 90 deletions.
6 changes: 6 additions & 0 deletions .github/pr_labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
feature: ['feature/*', 'feat/*']
fix: ['fix/*', 'bug/*']
chore: chore/*
documentation: docs/*
refactor: refactor/*
test: test/*
61 changes: 61 additions & 0 deletions .github/workflows/docker_development_image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: One App Development Image Build and Push
on:
workflow_dispatch:
inputs:
docker_tag_version:
description: 'Semantic Version'
required: true
repository_dispatch:
types: [one-app-docker-dev-build]
jobs:
one-app-docker-dev-build:
name: One App Development Image Build and Push
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Docker Image Versions
id: set_docker_version
run: |
#Runs when the action is triggered by the dispatch function
if [[ "${{ github.event.inputs.docker_tag_version }}" == "" ]]; then
echo ::set-output name=docker_version::${{ github.event.client_payload.docker_tag_version }}
echo ::set-output name=major_version::${{ github.event.client_payload.major_version }}
echo ::set-output name=minor_version::${{ github.event.client_payload.minor_version }}
else
#Runs when a tag is triggered manually
echo ::set-output name=docker_version::${{ github.event.inputs.docker_tag_version }}
MAJOR="$(echo ${{ github.event.inputs.docker_tag_version}} | cut -d'.' -f1)"
MINOR="$(echo ${{ github.event.inputs.docker_tag_version}} | cut -d'.' -f2)"
echo ::set-output name=major_version::${MAJOR}
echo ::set-output name=minor_version::${MINOR}
fi
- name: Print docker version
run: |
echo "tag: ${{ github.event.inputs.docker_tag_version }}"
- name: Docker login
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login --username ${{ secrets.DOCKER_USER }} --password-stdin
- name: Build development docker image
run: docker build -t dev . --target=development
- name: Tag Docker Images
run: |
docker tag dev ${{ secrets.DOCKER_USER }}/one-app-dev:${{ steps.set_docker_version.outputs.major_version }}
docker tag dev ${{ secrets.DOCKER_USER }}/one-app-dev:${{ steps.set_docker_version.outputs.major_version}}.${{ steps.set_docker_version.outputs.minor_version }}
docker tag dev ${{ secrets.DOCKER_USER }}/one-app-dev:${{ steps.set_docker_version.outputs.docker_version }}
docker tag dev ${{ secrets.DOCKER_USER }}/one-app-dev:latest
- name: Push Docker Images
run: |
docker push ${{ secrets.DOCKER_USER }}/one-app-dev:${{ steps.set_docker_version.outputs.major_version}}
docker push ${{ secrets.DOCKER_USER }}/one-app-dev:${{ steps.set_docker_version.outputs.major_version}}.${{ steps.set_docker_version.outputs.minor_version }}
docker push ${{ secrets.DOCKER_USER }}/one-app-dev:${{ steps.set_docker_version.outputs.docker_version}}
docker push ${{ secrets.DOCKER_USER }}/one-app-dev:latest
- name: Publish One App Statics
uses: octokit/request-action@v2.x
id: dispatch_publish_statics_npm
with:
route: POST /repos/:repository/dispatches
repository: ${{ github.repository }}
mediaType: '{"previews": ["everest"]}'
event_type: "publish-statics-npm"
client_payload: '{"docker_tag_version": "${{ steps.set_docker_version.outputs.docker_version }}"}'
env:
GITHUB_TOKEN: ${{ secrets.PA_TOKEN }}
66 changes: 66 additions & 0 deletions .github/workflows/docker_production_image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: One App Production Image Build and Push
on:
workflow_dispatch:
inputs:
docker_tag_version:
description: 'Semantic Version'
required: true
repository_dispatch:
types: [one-app-docker-prod-build]
jobs:
one-app-docker-prod-build:
name: One App Production Image Build and Push
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Docker login
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login --username ${{ secrets.DOCKER_USER }} --password-stdin
- name: Build production docker image
run: docker build -t prod .
- name: Extract sem versions
id: get_sem_version
run: |
MAJOR="$(echo ${{ github.event.client_payload.docker_tag_version}} | cut -d'.' -f1)"
MINOR="$(echo ${{ github.event.client_payload.docker_tag_version}} | cut -d'.' -f2)"
PATCH="$(echo ${{ github.event.client_payload.docker_tag_version}} | cut -d'.' -f3)"
echo ::set-output name=major_version::${MAJOR}
echo ::set-output name=minor_version::${MINOR}
- name: Docker Image Versions
id: set_docker_version
run: |
#Runs when the action is triggered by the dispatch function
if [[ "${{ github.event.inputs.docker_tag_version }}" == "" ]]; then
echo ::set-output name=docker_version::${{ github.event.client_payload.docker_tag_version }}
echo ::set-output name=major_version::${{ steps.get_sem_version.outputs.major_version }}
echo ::set-output name=minor_version::${{ steps.get_sem_version.outputs.minor_version }}
else
#Runs when a tag is triggered manually
echo ::set-output name=docker_version::${{ github.event.inputs.docker_tag_version }}
MAJOR="$(echo ${{ github.event.inputs.docker_tag_version}} | cut -d'.' -f1)"
MINOR="$(echo ${{ github.event.inputs.docker_tag_version}} | cut -d'.' -f2)"
echo ::set-output name=major_version::${MAJOR}
echo ::set-output name=minor_version::${MINOR}
fi
- name: Tag Docker Images
run: |
docker tag prod ${{ secrets.DOCKER_USER }}/one-app:${{ steps.set_docker_version.outputs.major_version}}
docker tag prod ${{ secrets.DOCKER_USER }}/one-app:${{ steps.set_docker_version.outputs.major_version}}.${{steps.set_docker_version.outputs.minor_version}}
docker tag prod ${{ secrets.DOCKER_USER }}/one-app:${{ steps.set_docker_version.outputs.docker_version}}
docker tag prod ${{ secrets.DOCKER_USER }}/one-app:latest
- name: Push Docker Images
run: |
docker push ${{ secrets.DOCKER_USER }}/one-app:${{ steps.set_docker_version.outputs.major_version}}
docker push ${{ secrets.DOCKER_USER }}/one-app:${{ steps.set_docker_version.outputs.major_version}}.${{ steps.set_docker_version.outputs.minor_version}}
docker push ${{ secrets.DOCKER_USER }}/one-app:${{ steps.set_docker_version.outputs.docker_version}}
docker push ${{ secrets.DOCKER_USER }}/one-app:latest
- name: Trigger Development Image Publishing
uses: octokit/request-action@v2.x
id: dispatch_one_app_docker_dev_build
with:
route: POST /repos/:repository/dispatches
repository: ${{ github.repository }}
mediaType: '{"previews": ["everest"]}'
event_type: "one-app-docker-dev-build"
client_payload: '{"docker_tag_version": "${{ steps.set_docker_version.outputs.docker_version }}","major_version":"${{ steps.set_docker_version.outputs.major_version}}","minor_version":"${{ steps.set_docker_version.outputs.minor_version}}"}'
env:
GITHUB_TOKEN: ${{ secrets.PA_TOKEN }}
88 changes: 0 additions & 88 deletions .github/workflows/docker_release.yml

This file was deleted.

55 changes: 55 additions & 0 deletions .github/workflows/docker_tag_check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Docker Tag Version Check
on:
workflow_dispatch:
inputs:
tag_version:
description: 'Semantic Version'
required: true
push:
tags:
- '*'
repository_dispatch:
types: [one-app-docker-tag-check]
jobs:
one-app-docker-tag-check:
name: Docker Tag Version Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set env
id: set_tag_version
run: |
#Checks for when a valid tag is manually pushed
if [[ $GITHUB_REF != "" && "${{ github.event.client_payload.tagversion }}" == "" ]];
then
echo ::set-output name=tagversion::$(egrep -o '(v[0-9]+\.[0-9]+\.[0-9]+)(-\S*)?' <<< $GITHUB_REF)
else
echo ::set-output name=tagversion::${{ github.event.client_payload.tagversion }}
fi
if [[ "${{ github.event.inputs.tag_version }}" != "" ]]
then
echo ::set-output name=tagversion::${{ github.event.inputs.tag_version }}
fi
echo $tagversion
- name: Check Tag Version
run: |
if [[ "${{ steps.set_tag_version.outputs.tagversion }}" == "" ]]; then
echo "::error::Incorrect tag provided, please provide a tag with the correct format and try again"
exit 1
fi
- name: Docker tag version
id: set_docker_tag_version
run: |
tagversion=${{ steps.set_tag_version.outputs.tagversion}}
echo ::set-output name=dockertag::$(sed 's/^v*//' <<< "$tagversion")
- name: Trigger Production Image Publishing
uses: octokit/request-action@v2.x
id: dispatch_one-app-docker-prod-build
with:
route: POST /repos/:repository/dispatches
repository: ${{ github.repository }}
mediaType: '{"previews": ["everest"]}'
event_type: "one-app-docker-prod-build"
client_payload: '{"docker_tag_version": "${{ steps.set_docker_tag_version.outputs.dockertag }}"}'
env:
GITHUB_TOKEN: ${{ secrets.PA_TOKEN }}
14 changes: 14 additions & 0 deletions .github/workflows/pr_labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: PR Labeler
on:
pull_request:
types: [opened]

jobs:
pr-labeler:
runs-on: ubuntu-latest
steps:
- uses: TimonVS/pr-labeler-action@v3
with:
configuration-path: .github/pr_labeler.yml # optional, .github/pr-labeler.yml is the default value
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
60 changes: 60 additions & 0 deletions .github/workflows/publish_statics_npm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: One App Statics Publish to NPM
on:
workflow_dispatch:
inputs:
tag_version:
description: 'Semantic Version'
required: true
repository_dispatch:
types: [publish-statics-npm]
jobs:
publish-statics-npm:
name: One App Statics Publish to NPM
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v1
with:
node-version: '12.x'
registry-url: 'https://registry.npmjs.org'
- name: Docker login
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login --username ${{ secrets.DOCKER_USER }} --password-stdin
- name: Tag Version
id: set_tag_version
run: |
if [[ "${{ github.event.inputs.tag_version }}" == "" ]]
then
echo ::set-output name=tagversion::${{ github.event.client_payload.docker_tag_version }}
else
echo ::set-output name=tagversion::${{ github.event.inputs.tag_version }}
fi
- name: Extract and zip production statics
run: |
docker create --name prod ${{ secrets.DOCKER_USER }}/one-app:${{ steps.set_tag_version.outputs.tagversion}}
docker cp prod:opt/one-app/build ./one-app-statics
zip -r one-app-static-assets one-app-statics/build
- name: Publish statics to NPM
run: npm publish ./one-app-statics --access public
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.event.client_payload.docker_tag_version }}
release_name: Release ${{ github.event.client_payload.docker_tag_version }}
draft: false
prerelease: false
- name: Upload Release Assets
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./one-app-static-assets.zip
asset_name: one-app-static-assets.zip
asset_content_type: application/zip
4 changes: 2 additions & 2 deletions .github/workflows/tagging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ jobs:
echo ::set-output name=action_tag::v${tagversion}
- name: Trigger Image Publishing
uses: octokit/request-action@v2.x
id: dispatch_one-app-docker-release
id: dispatch_one-app-docker-tag-check
with:
route: POST /repos/:repository/dispatches
repository: ${{ github.repository }}
mediaType: '{"previews": ["everest"]}'
event_type: "one-app-docker-release"
event_type: "one-app-docker-tag-check"
client_payload: '{"tagversion": "${{ steps.set_tag_version.outputs.action_tag }}"}'
env:
GITHUB_TOKEN: ${{ secrets.PA_TOKEN }}

0 comments on commit e70eea2

Please sign in to comment.