Simplify Docker run command in CI workflow #268
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: git-fame | |
on: push | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
permissions: | |
contents: write | |
pull-requests: write | |
jobs: | |
rubocop: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Set up Docker | |
uses: docker/setup-buildx-action@v3 | |
- name: Start Docker service | |
run: sudo service docker start | |
- name: Set up Docker cache | |
uses: actions/cache@v3 | |
with: | |
path: /tmp/.buildx-cache | |
key: ${{ runner.os }}-buildx-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-buildx- | |
- name: Build Docker image with Ruby version | |
run: | | |
docker buildx create --use | |
docker buildx build --build-arg RUBY_VERSION=3.3 \ | |
--cache-from=type=local,src=/tmp/.buildx-cache \ | |
--cache-to=type=local,dest=/tmp/.buildx-cache,mode=max \ | |
--load -t git-fame -f .devcontainer/Dockerfile . | |
- name: Run Rubocop | |
run: docker run --rm -v $(pwd):/workspace git-fame bundle exec rubocop | |
rspec: | |
runs-on: ${{ matrix.os }} | |
# needs: rubocop | |
strategy: | |
matrix: | |
ruby: ["3.0", "3.1", "3.2", "3.3"] | |
os: [ubuntu-latest] | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Docker | |
uses: docker/setup-buildx-action@v3 | |
with: | |
install: true | |
- name: Start Docker service | |
run: sudo service docker start | |
- name: Set up Docker cache | |
uses: actions/cache@v3 | |
with: | |
path: /tmp/.buildx-cache | |
key: ${{ runner.os }}-buildx-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-buildx- | |
- name: Build Docker image with Ruby version | |
run: | | |
docker buildx create --use | |
docker buildx build --build-arg RUBY_VERSION=${{ matrix.ruby }} \ | |
--cache-from=type=local,src=/tmp/.buildx-cache \ | |
--cache-to=type=local,dest=/tmp/.buildx-cache,mode=max \ | |
--load -t git-fame -f .devcontainer/Dockerfile . | |
- name: Run git-fame | |
run: docker run --rm -v $(pwd):/workspace git-fame bundle exec exe/git-fame --log-level debug | |
- name: Upload coverage to CodeClimate | |
uses: paambaati/codeclimate-action@v9 | |
env: | |
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} | |
CI: true | |
with: | |
coverageLocations: ${{ github.workspace }}/coverage/coverage.xml:cobertura | |
coverageCommand: docker run --rm git-fame bundle exec rspec --format RSpec::Github::Formatter | |
devcontainer: | |
runs-on: ubuntu-latest | |
needs: rubocop | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "20.x" | |
- name: Set up DevContainer CLI | |
run: npm install -g @devcontainers/cli | |
- name: Build and start DevContainer | |
run: | | |
devcontainer build --workspace-folder . | |
devcontainer up --workspace-folder . | |
- name: Run tests inside DevContainer | |
run: devcontainer exec --workspace-folder . bundle exec rspec | |
release: | |
runs-on: ubuntu-latest | |
needs: rspec | |
if: github.ref == 'refs/heads/main' | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
ruby-version: 3.3 | |
- name: Setup git | |
run: | | |
git config --global user.email "actions@github.com" | |
git config --global user.name "GitHub Actions" | |
- name: Install gem-release | |
run: gem install gem-release | |
- name: Install dependencies | |
run: bundle install --jobs 4 --retry 3 | |
- name: Increment version | |
run: gem bump --version patch --tag --push --skip-ci --release --file lib/git_fame/version.rb --remote origin --branch main | |
env: | |
GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }} |