fix: fix file permission #131
Workflow file for this run
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: CI/CD | |
on: | |
pull_request: | |
branches: [ master ] | |
push: | |
branches: [ master ] | |
jobs: | |
commit-check: | |
name: Check Commit Messages | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Needed to fetch all history for checking commits | |
- name: "Check commit messages match angular style" | |
run: | | |
! git log origin/master..HEAD --oneline --pretty=format:%s | \ | |
grep -Ev '^(build|chore|ci|docs|feat|fix|perf|style|refactor|test):|^Merge ' | |
lint: | |
name: Lint Checks | |
needs: commit-check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Cache Poetry dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/poetry | |
key: ${{ runner.os }}-poetry-${{ hashFiles('poetry.lock') }} | |
restore-keys: | | |
${{ runner.os }}-poetry- | |
- name: Install dependencies | |
run: | | |
curl -sSL https://install.python-poetry.org | python3 - | |
poetry config virtualenvs.create false | |
poetry install | |
- name: Run lint | |
run: make lint | |
- name: Generate Pylint Badge | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
run: | | |
SCORE=$(pylint portfolio_analytics --output-format=text **/*.py | sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p') | |
echo "PYLINT_SCORE=$SCORE" >> $GITHUB_ENV | |
- name: Create Pylint Badge | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
uses: schneegans/[email protected] | |
with: | |
auth: ${{ secrets.GIST_SECRET }} | |
gistID: b149841cbef1088a8bf7671efee16734 | |
filename: pylint.txt | |
label: Pylint | |
message: ${{ env.PYLINT_SCORE }} | |
color: ${{ env.PYLINT_SCORE >= 9 && 'brightgreen' || env.PYLINT_SCORE >= 7 && 'yellow' || 'red' }} | |
test: | |
name: Run Tests | |
needs: commit-check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Cache Poetry dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/poetry | |
key: ${{ runner.os }}-poetry-${{ hashFiles('poetry.lock') }} | |
restore-keys: | | |
${{ runner.os }}-poetry- | |
- name: Install dependencies | |
run: | | |
curl -sSL https://install.python-poetry.org | python3 - | |
poetry config virtualenvs.create false | |
poetry install | |
- name: Run tests | |
run: make test | |
- name: Upload coverage reports | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: ./coverage.xml | |
fail_ci_if_error: false | |
build: | |
name: Build Docker Images | |
needs: commit-check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Cache Poetry dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/poetry | |
key: ${{ runner.os }}-poetry-${{ hashFiles('poetry.lock') }} | |
restore-keys: | | |
${{ runner.os }}-poetry- | |
- name: Install dependencies | |
run: | | |
curl -sSL https://install.python-poetry.org | python3 - | |
poetry config virtualenvs.create false | |
poetry install | |
- name: Set up Docker | |
uses: docker/setup-buildx-action@v3 | |
- name: Run build | |
run: make build | |
integration-tests: | |
name: Integration Tests (${{ matrix.component }}) | |
needs: [lint, test, build] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
component: [api, dashboard] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Docker | |
uses: docker/setup-buildx-action@v3 | |
- name: Run integration tests | |
run: make test-${{ matrix.component }} | |
release: | |
name: Release | |
needs: [integration-tests] | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Configure Git | |
run: | | |
git config --global user.name "GitHub Actions" | |
git config --global user.email "[email protected]" | |
- name: Semantic Release | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
pip install python-semantic-release==7.34.6 | |
git pull --rebase | |
python -m semantic_release publish --patch | |
publish: | |
name: Publish Docker Images | |
needs: [release] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Docker | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Get latest git tag | |
run: | | |
git fetch --tags | |
git pull --tags | |
TAG=$(git tag --sort=-v:refname | head -n 1) | |
echo "RELEASE_VERSION=${TAG}" >> $GITHUB_ENV | |
- name: Build and push application images | |
run: | | |
# Build images | |
docker compose build | |
# Define services and tag/push images | |
for service in api dashboard data; do | |
IMAGE="ghcr.io/gbourniq/portfolio_analytics/$service" | |
docker tag $IMAGE $IMAGE:${{ env.RELEASE_VERSION }} | |
docker tag $IMAGE $IMAGE:latest | |
docker push $IMAGE:${{ env.RELEASE_VERSION }} | |
docker push $IMAGE:latest | |
done |