'Daily automatic Bitbucket deploy with manual step when pushed to branch

I'm trying to set up a pipeline in Bitbucket with a daily schedule for two branches.

develop : There a scheduled daily deployment running + when I push to this branch the pipeline runs again

master : This is the tricky one. I want to have a daily deployment because the page need to be rebuild daily, but I would like to have a security that if anyone pushes to this branch by mistake or the code is bad, it only runs the deployment after a manual trigger.

So my question is that is it possible to set up a rule to track if there was a push and in this case let the admin manually start the pipeline ?


pipelines:
  branches:
    develop:
      - step:
          name: Deploy staging
          deployment: staging
          caches:
            - node
          script:
            - npm run staging:auto
            - npm install firebase
            - npm install firebase-functions
            - npm install -g firebase-tools
            - firebase deploy --token=$FIREBASE_TOKEN --project $FIREBASE_PROJECT_STAGING --only functions,hosting
          artifacts:
            - build/**
    master:
      - step:
          name: Deploy to production
          deployment: production
          caches:
            - node
          script:
            - npm run deploy:auto
            - npm install firebase
            - npm install firebase-functions
            - npm install -g firebase-tools
            - firebase deploy --token=$FIREBASE_TOKEN_STAGING --project $FIREBASE_PROJECT_PRODUCTION --only functions,hosting
          artifacts:
            - build/** ```


Solution 1:[1]

I'd suggest to schedule a different custom pipeline other than the one that runs on pushes to the production branch. The same steps definition can be reused with a yaml anchor and you can replace the trigger in one of them.

E.g:

definitions:

  # write whatever is meaningful to you,
  # just avoid "caches" or "services" or
  # anything bitbucket-pipelines could expect
  yaml-anchors:

    - &deploy-pro-step
        name: Deploy production
        trigger: manual
        deployment: production
        script:
          - do your thing

pipelines:

  custom:

    deploy-pro-scheduled:
      - step:
          <<: *deploy-pro-step
          trigger: automatic

  branches:

    release/production:
      - step: *deploy-pro-step

Sorry if I make some yaml mistakes, but this should be the general idea. The branch where the scheduled custom pipeline will run is configured in the web interface when the schedule is set up.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 N1ngu