2

I manage my automatic release and deployment processes with Github actions.

In my yml file, things increase by npm version and according to the label in the pull request, respectively. Make a new commit and do the deployment process and complete the actions.

My problem here is my version number in the development branch, for example, I am updating the 1.2.3 patch version. It becomes 1.2.4 and reflects on the development branch, but when deploying, it sends version 1.2.3. How can i solve this problem.

An example from my yml file

name: development deploy

on:
    pull_request:
        types:
            - closed
        branches:
            - development
    push:
        branches:
            - development

jobs:
    automatic-version-update:
        name: Automatic version update
        runs-on: ubuntu-latest
        if: github.event.pull_request.merged == true
        steps:
            - name: Check Out Repository
              uses: actions/checkout@v3
            - name: Setup Node.js
              uses: actions/setup-node@v2
              with:
                  node-version: '16.15'
            - name: Update Version
              run: |
                  git config --local user.email "action@github.com"
                  git config --local user.name "GitHub Action"
                  PR_LABELS=$(jq --raw-output '.pull_request.labels[].name' $GITHUB_EVENT_PATH)

                  if [[ $PR_LABELS == *"minor version"* ]]; then
                    npm version minor -m "Updated to minor version %s"

                  elif [[ $PR_LABELS == *"major version"* ]]; then
                    npm version major -m "Updated to major version %s"

                  elif [[ $PR_LABELS == *"patch version"* ]]; then
                    npm version patch -m "Updated to patch version %s"
                  fi

            - name: Push Changes
              uses: ad-m/github-push-action@master
              with:
                  github_token: ${{ secrets.GITHUB_TOKEN }}
                  branch: ${{ github.event.pull_request.base.ref }}
    build-deploy:
        needs: automatic-version-update
        name: Deployment jobs
        runs-on: ubuntu-latest
        steps:
            - name: Check Out Repository
              uses: actions/checkout@v3
            - name: Install Node.js
              uses: actions/setup-node@v1
              with:
                  node-version: '16.15'
            - name: Install packages
              run: yarn install
            - name: React build
              run: yarn run build:dev
            - name: Deploy to Server
              uses: easingthemes/ssh-deploy@main
              env:
                  SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }}
                  SOURCE: '.'
                  REMOTE_HOST: ${{ secrets.SERVER_HOST }}
                  REMOTE_USER: ${{ secrets.SERVER_USERNAME }}
                  TARGET: ${{ secrets.SERVER_ROOT_FOLDER }}

hakre
  • 193,403
  • 52
  • 435
  • 836
phoique
  • 97
  • 3
  • 7

1 Answers1

1

TLDR; Checkout the correct branch.

Microsoft Github Actions just adds a couple layers of abstractions around git(1). When something unexpected happens, double-check the real git(1) workflow is clear (e.g. works locally), then verify the Microsoft Github Action Workflow uses the correct actions with the correct configuration step by step.


Thank you for sharing your question, you asked:

When deploying, it sends version 1.2.3. How can i [sic!] solve this problem. [sic!]

The solution may not be directly visible, so let's uncover what happens here first.

The commit you're creating is in the git repository at the HEAD commanded per uses: actions/checkout@v3 (Cf. GitHub - jobs : what is : use actions/checkout. IIRC in a pull_request event, this is a merge reference, like as-if already merged (refs/pull/...¹); this is not a branch reference (refs/heads/...).

Now when you command Microsoft Github Actions to push with the following instructions:

            - name: Push Changes
              uses: ad-m/github-push-action@master
              with:
                  github_token: ${{ secrets.GITHUB_TOKEN }}
                  branch: ${{ github.event.pull_request.base.ref }}

You're specifically instructing to not push any committed changes, but the (unchanged) pull request target branch ${{ github.event.pull_request.base.ref }}.


Now the fix is easy, you may already think so: checkout the correct branch with the ref property:

        steps:
            - name: Check Out Repository
              uses: actions/checkout@v3
              with:
                ref: ${{ github.event.pull_request.base.ref }}
              

TLDR; Checkout the correct branch.

Microsoft Github Actions just adds a couple layers of abstractions around git(1). When something unexpected happens, double-check the real git(1) workflow is clear (e.g. like your local testing), then verify the Microsoft Github Action Workflow uses the correct actions with the correct configuration step by step.


Cf. How to get the current branch within Github Actions?

hakre
  • 193,403
  • 52
  • 435
  • 836
  • Thank you, it worked when I wrote it the way you said. That's the part I missed. – phoique May 29 '23 at 14:31
  • @phoique: You're welcome. It's easy to miss as the cause is in the very beginning but can be validated only after the last step, the pushing. So easy to miss. – hakre May 29 '23 at 14:56