A long-lived project that still receives updates
Create GitHub PullRequest of bundle update in CircleCI
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

Runtime

 Project Readme

Circleci::Bundle::Update::Pr

CircleCI Status CI Schedule Gem Version Ask DeepWiki

README in English 日本語のREADME

circleci-bundle-update-pr is an automation script for continuous bundle update and for sending a pull request using Scheduling a Workflow of CircleCI.

By requesting a nightly build to CircleCI with an environment variable configured in circle.yml or .circleci/config.yml to execute this script, bundle update is invoked, then commit changes and send a pull request to GitHub repository if there some changes exist.

Installation

$ gem install circleci-bundle-update-pr

Prerequisites

The application on which you want to run continuous bundle update must be configured to be built on CircleCI.

Usage

Setting GitHub fine-grained personal access token to CircleCI

GitHub fine-grained personal access token is required for sending pull requests to your repository.

  1. Go to your account's settings page and generate a fine-grained personal access token
    • Repository access: Select your repository
    • Repository permissions:
      • Contents: Read and write
      • Pull requests: Read and write
  2. On CircleCI dashboard, go to your application's "Project Settings" -> "Environment Variables"
  3. Add an environment variable GITHUB_ACCESS_TOKEN with your GitHub fine-grained personal access token
    • If use GitHub Enterprise
      • ENTERPRISE_OCTOKIT_ACCESS_TOKEN with your GitHub Enterprise fine-grained personal access token
      • ENTERPRISE_OCTOKIT_API_ENDPOINT with your GitHub Enterprise api endpoint (e.g. https://www.example.com/api/v3)

Configure circle.yml

Configure your circle.yml or .circleci/config.yml to run circleci-bundle-update-pr, for example:

version: 2
jobs:
  build:
    # snip
  continuous_bundle_update:
    docker:
      - image: cimg/ruby:4.0
    working_directory: ~/repo
    steps:
      - run:
          name: Set timezone to Asia/Tokyo
          command: sudo cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
      - checkout
      - restore_cache:
          name: Restore bundler cache
          keys:
            - gems-{{ .Environment.COMMON_CACHE_KEY }}-{{ checksum "Gemfile.lock" }}
            - gems-{{ .Environment.COMMON_CACHE_KEY }}-
      - run:
          name: Setup requirements for continuous bundle update
          command: gem install -N circleci-bundle-update-pr
      - run:
          name: Continuous bundle update
          command: circleci-bundle-update-pr <username> <email>

workflows:
  version: 2
  build:
    jobs:
      - build:
          # snip
  nightly:
    triggers:
      - schedule:
          cron: "00 10 * * 5"
          filters:
            branches:
              only: main
    jobs:
      - continuous_bundle_update

NOTE: Please make sure you replace <username> and <email> with yours.

circleci-bundle-update-pr regularly updates myself. See also .circleci/config.yml.

CLI command references

General usage:

$ circleci-bundle-update-pr <git username> <git email address>

By default, it works only on master or main branches, but you can also explicitly specify any branches rather than only these branches by adding them to the arguments.

$ circleci-bundle-update-pr <git username> <git email address> main develop topic

You can also add the following options:

$ circleci-bundle-update-pr -h
Usage: circleci-bundle-update-pr [options]
    -a, --assignees alice,bob,carol  Assign the PR to them
    -r, --reviewers alice,bob,carol  Request PR review to them
    -l, --labels "In Review, Update" Add labels to the PR
    -d, --duplicate                  Make PR even if it has already existed

Tips

Customize PR description

If .circleci/BUNDLE_UPDATE_NOTE.md exists, the content will be appended to PR description.

e.g. .circleci/BUNDLE_UPDATE_NOTE.md is the below.

## Notice

* example1
* example2

PR description will be created as the below.

**Updated RubyGems:**

* [ ] [octokit](https://github.com/octokit/octokit.rb): [`4.9.0...4.10.0`](https://github.com/octokit/octokit.rb/compare/v4.9.0...v4.10.0)
* [ ] [public_suffix](https://github.com/weppos/publicsuffix-ruby): [`3.0.2...3.0.3`](https://github.com/weppos/publicsuffix-ruby/compare/v3.0.2...v3.0.3)

Powered by [circleci-bundle-update-pr](https://rubygems.org/gems/circleci-bundle-update-pr)

---

## Notice

* example1
* example2

.circleci/BUNDLE_UPDATE_NOTE.md or CIRCLECI_BUNDLE_UPDATE_NOTE.md, either one is OK. It gives priority .circleci/BUNDLE_UPDATE_NOTE.md over CIRCLECI_BUNDLE_UPDATE_NOTE.md.

Run on GitHub Actions

Warning

GitHub Actions are NOT officially supported. This is just a tip.

Configure your .github/workflows/bundle-update-pr.yml to run circleci-bundle-update-pr, for example:

name: bundle-update-pr

on:
  schedule:
    - cron: "00 10 * * 5" # JST 19:00 (Fri)

jobs:
  build:
    runs-on: ubuntu-latest

    permissions:
      contents: write
      pull-requests: write

    steps:
      - uses: actions/checkout@v7

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '4.0'

      - name: Install dependencies
        run: |
          set -x
          gem install -N bundler circleci-bundle-update-pr

      - name: Set timezone to Asia/Tokyo
        run: |
          set -x
          cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

      - name: run circleci-bundle-update-pr
        run: |
          set -x

          export CIRCLE_BRANCH=$(echo $GITHUB_REF | sed -e 's!refs/heads/!!g')
          export CIRCLE_PROJECT_USERNAME=$(echo $GITHUB_REPOSITORY | cut -d "/" -f 1)
          export CIRCLE_PROJECT_REPONAME=$(echo $GITHUB_REPOSITORY | cut -d "/" -f 2)

          git checkout -b $CIRCLE_BRANCH

          circleci-bundle-update-pr "${GIT_USER_NAME}" "${GIT_USER_EMAIL}"
        env:
          GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GIT_USER_NAME:       "your name"
          GIT_USER_EMAIL:      "ci@example.com"

Contributing

  1. Fork it ( https://github.com/masutaka/circleci-bundle-update-pr/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

Made with contrib.rocks.