From 65b0a03f97531e0ee01bd957714f5db04b6e1ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20L=C3=A4derach?= Date: Tue, 22 Mar 2022 12:27:52 +0100 Subject: [PATCH 1/4] feat(docker): use github.ref_name variable for image name --- .github/workflows/main.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ec7dfa4c..342a90d4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,6 +2,7 @@ on: push: branches: - master + workflow_dispatch: jobs: @@ -14,16 +15,16 @@ jobs: uses: actions/checkout@v2 - name: Build PostgreSQL container image - run: | + run: | docker build --build-arg DATABASE_TYPE=postgresql \ - --tag ghcr.io/$GITHUB_ACTOR/umami:postgresql-$(echo $GITHUB_SHA | head -c7) \ + --tag ghcr.io/$GITHUB_ACTOR/umami:postgresql-${github.ref_name} \ --tag ghcr.io/$GITHUB_ACTOR/umami:postgresql-latest \ . - name: Build MySQL container image run: | docker build --build-arg DATABASE_TYPE=mysql \ - --tag ghcr.io/$GITHUB_ACTOR/umami:mysql-$(echo $GITHUB_SHA | head -c7) \ + --tag ghcr.io/$GITHUB_ACTOR/umami:mysql-${github.ref_name} \ --tag ghcr.io/$GITHUB_ACTOR/umami:mysql-latest \ . @@ -36,7 +37,7 @@ jobs: run: | # Push each image individually, avoiding pushing to umami:latest # as MySQL or PostgreSQL are required - docker push ghcr.io/$GITHUB_ACTOR/umami:postgresql-$(echo $GITHUB_SHA | head -c7) + docker push ghcr.io/$GITHUB_ACTOR/umami:postgresql-${github.ref_name} docker push ghcr.io/$GITHUB_ACTOR/umami:postgresql-latest - docker push ghcr.io/$GITHUB_ACTOR/umami:mysql-$(echo $GITHUB_SHA | head -c7) + docker push ghcr.io/$GITHUB_ACTOR/umami:mysql-${github.ref_name} docker push ghcr.io/$GITHUB_ACTOR/umami:mysql-latest From 65454842b0694e24ee25fea400bf869b1299f217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20L=C3=A4derach?= Date: Tue, 22 Mar 2022 15:37:03 +0100 Subject: [PATCH 2/4] feat(ci): add ci action --- .github/workflows/node.js.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/node.js.yml diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml new file mode 100644 index 00000000..571f6dd5 --- /dev/null +++ b/.github/workflows/node.js.yml @@ -0,0 +1,28 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Node.js CI + +on: [push] + +env: + DATABASE_TYPE: postgresql + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [12.x, 14.x, 16.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - run: npm install + - run: npm run build --if-present From a2eadf76fe49129442b764c1182dd779eaa4e6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20L=C3=A4derach?= Date: Tue, 22 Mar 2022 14:06:46 +0100 Subject: [PATCH 3/4] feat(ci): use matrix build to target databases --- .github/workflows/{node.js.yml => ci.yml} | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) rename .github/workflows/{node.js.yml => ci.yml} (62%) diff --git a/.github/workflows/node.js.yml b/.github/workflows/ci.yml similarity index 62% rename from .github/workflows/node.js.yml rename to .github/workflows/ci.yml index 571f6dd5..d204d88c 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/ci.yml @@ -14,8 +14,19 @@ jobs: strategy: matrix: - node-version: [12.x, 14.x, 16.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + include: + - node-version: 12.x + db-type: postgresql + - node-version: 12.x + db-type: mysql + - node-version: 14.x + db-type: postgresql + - node-version: 14.x + db-type: mysql + - node-version: 16.x + db-type: postgresql + - node-version: 16.x + db-type: mysql steps: - uses: actions/checkout@v2 @@ -24,5 +35,7 @@ jobs: with: node-version: ${{ matrix.node-version }} cache: 'npm' + env: + DATABASE_TYPE: ${{ matrix.db-type }} - run: npm install - run: npm run build --if-present From 9a0c1dff9d885c5bed05af8e222cc74a87997aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20L=C3=A4derach?= Date: Tue, 22 Mar 2022 15:03:55 +0100 Subject: [PATCH 4/4] feat(cd): use semantic release for docker images --- .github/workflows/cd.yml | 30 ++++++++++++++++++++++++++ .github/workflows/main.yml | 43 -------------------------------------- 2 files changed, 30 insertions(+), 43 deletions(-) create mode 100644 .github/workflows/cd.yml delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 00000000..cb8f3e59 --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,30 @@ +name: Create docker images + +on: [create] + +jobs: + + build: + name: Build, push, and deploy + if: ${{ startsWith(github.ref, 'refs/tags/v') }} + runs-on: ubuntu-latest + + strategy: + matrix: + db-type: [postgresql, mysql] + + steps: + - uses: actions/checkout@v2 + + - name: Set env + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + + - uses: mr-smithers-excellent/docker-build-push@v5 + name: Build & push Docker image for ${{ matrix.db-type }} + with: + image: umami + tags: ${{ matrix.db-type }}-${{ env.RELEASE_VERSION }}, ${{ matrix.db-type }}-latest + buildArgs: DATABASE_TYPE=${{ matrix.db-type }} + registry: ghcr.io/${{ github.actor }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 342a90d4..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,43 +0,0 @@ -on: - push: - branches: - - master - workflow_dispatch: - -jobs: - - build: - name: Build, push, and deploy - runs-on: ubuntu-latest - steps: - - - name: Checkout master - uses: actions/checkout@v2 - - - name: Build PostgreSQL container image - run: | - docker build --build-arg DATABASE_TYPE=postgresql \ - --tag ghcr.io/$GITHUB_ACTOR/umami:postgresql-${github.ref_name} \ - --tag ghcr.io/$GITHUB_ACTOR/umami:postgresql-latest \ - . - - - name: Build MySQL container image - run: | - docker build --build-arg DATABASE_TYPE=mysql \ - --tag ghcr.io/$GITHUB_ACTOR/umami:mysql-${github.ref_name} \ - --tag ghcr.io/$GITHUB_ACTOR/umami:mysql-latest \ - . - - - name: Docker login - run: >- - echo "${{ secrets.GITHUB_TOKEN }}" - | docker login -u "${{ github.actor }}" --password-stdin ghcr.io - - - name: Push image to GitHub - run: | - # Push each image individually, avoiding pushing to umami:latest - # as MySQL or PostgreSQL are required - docker push ghcr.io/$GITHUB_ACTOR/umami:postgresql-${github.ref_name} - docker push ghcr.io/$GITHUB_ACTOR/umami:postgresql-latest - docker push ghcr.io/$GITHUB_ACTOR/umami:mysql-${github.ref_name} - docker push ghcr.io/$GITHUB_ACTOR/umami:mysql-latest