728x90

actions/setup-python

actions/setup-python@v5 - latest version (2024/01/03)

 

GitHub - actions/setup-python: Set up your GitHub Actions workflow with a specific version of Python

Set up your GitHub Actions workflow with a specific version of Python - actions/setup-python

github.com

 

python-version (Optional) : python ๋ฒ„์ „ ๋ช…์‹œ. (default: .python-version > pypy version)

  • semver ๋ฒ„์ „ ์‚ฌ์šฉ(์œ ์˜์  ๋ฒ„์ „ 2.0.0 ) ex) 3.11.4
  • ๋ฒ„์ „ ์ž…๋ ฅ์‹œ ์œ ์˜ ์‚ฌํ•ญ
    • ํ•„์š”ํ•œ ํŠน์ • ๋ฒ„์ „์˜ Python ์„ค์น˜ ์‹œ ๋ฒ„์ „ ๋ณ„ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ƒ๊ด€ ์—†์„ ๊ฒฝ์šฐ ์ฃผ, ๋ถ€ ๋ฒ„์ „ ๋ฐ ํŒจ์น˜ ๋ฒ„์ „ (์˜ˆ: ์ฒ˜๋Ÿผ ):3.7.6, 3.7.5 ๊ธฐ์ž…
    • semver์— ์ง€์ •๋œ ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ ๋ฒ”์œ„ ์‚ฌ์šฉ (`>=3.9 <3.10`)
    • check-latest : ์ตœ์‹  ๋ฒ„์ „ ์‚ฌ์šฉ (default: false)

 

workflow_dispatch ๊ธฐ๋Šฅ

์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ๋˜๋„๋ก ํ•˜๋ ค๋ฉด workflow_dispatch ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผํ•œ๋‹ค.

on: workflow_dispatch

 

 

์›Œํฌํ”Œ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์ด๋ฒคํŠธ - GitHub Docs

GitHub์— ๋Œ€ํ•œ ํŠน์ • ์ž‘์—…์ด ์˜ˆ์•ฝ๋œ ์‹œ๊ฐ„์— ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ GitHub ์™ธ๋ถ€์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‹คํ–‰๋˜๋„๋ก ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docs.github.com

name: Action  # Use tags to trigger the action
on:
  workflow_dispatch:
    inputs:
      statement:
        description: Question
        required: true
        default: "\"How is the weather?\""
jobs:
  app-build: 
    name: ELIZA build on Ubuntu-latest
    runs-on: ubuntu-latest
    steps:
      - name: Checkout & Set Environment Variables
        uses: actions/checkout@v3
        
      - name: Qustion ELIZA ${{ inputs.statement }} 
        run: |
          cd $GITHUB_WORKSPACE
          python action.py --statement ${{ inputs.statement }} >> answer_sheet.txt
      - name: ELIZA Answer $GITHUB_ENV
        run: |
          echo "::group:: Result"
          echo "Q: ${{ inputs.statement }}"
          echo "A: $(cat answer_sheet.txt)"

 

 

 

formatter

Black formatter

  • ์ž๋™ Python PEP8 format ๊ต์ •(๊ฐ„ํ˜น query๋ฌธ์ด๋‚˜ ์ฝ”๋“œ \t ๋„์–ด์“ฐ๊ธฐ ๋ฌธ์ œ๋กœ Error) โ†’ ๊ฐ•์ œ ๋ณ€๊ฒฝ
jobs:
  black:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v1
        with:
          python-version: 3.9
      - run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      - run: |
          black --check --verbose .

 

pull_request ์ƒ์„ฑ

name: black-action
on: [push, pull_request]
jobs:
  linter_name:
    name: runner / black
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Check files using the black formatter
        uses: rickstaa/action-black@v1
        id: action_black
        with:
          black_args: "."
      - name: Create Pull Request
        if: steps.action_black.outputs.is_formatted == 'true'
        uses: peter-evans/create-pull-request@v5
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          title: "Format Python code with psf/black push"
          commit-message: ":art: Format Python code with psf/black"
          body: |
            There appear to be some python formatting errors in ${{ github.sha }}. This pull request
            uses the [psf/black](https://github.com/psf/black) formatter to fix these issues.
          base: ${{ github.head_ref }} # Creates pull request onto pull request or commit branch
          branch: actions/black

 

ruff formatter

  • Flake8๊ณผ black์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด rust๋กœ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ python linter ์ค‘ ๊ฐ€์žฅ ๋น ๋ฆ„
  • check: linter check
  • format: linter ์ ์šฉ
name: Apply Linter
runs-on: ubuntu-latest
steps:   
  - uses: actions/checkout@v4
  - uses: chartboost/ruff-action@v1 
    with:
      args: 'check --diff'
  - uses: chartboost/ruff-action@v1
    with:
      args: 'format --check'

 

 

docker setup buildx

  • QEMU (optional) : ๋‹ค์–‘ํ•œ virtual env ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฃผ๋กœ ํŠน์ˆ˜ํ•œ ํ™˜๊ฒฝ (iot module)์—์„œ ๋งŽ์ด ์‚ฌ์šฉ.
  • Buildx : docker build ํ™˜๊ฒฝ ๊ตฌ์ถ•
jobs:
  buildx:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
      -
        # Add support for more platforms with QEMU (optional)
        # https://github.com/docker/setup-qemu-action
        name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

 

Slack Webhook

 Slack ๋ฉ”์„ธ์ง€ ๋ฐœ์†ก

[Custom CI Result]

 

      - name: Send custom JSON data to Slack workflow
        id: slack
        uses: slackapi/slack-github-action@v1.24.0
        with:
          # For posting a rich message using Block Kit
          payload: |
            {
              "text": "GitHub Action build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}",
              "blocks": [
                {
                  "type": "section",
                  "text": {
                    "type": "mrkdwn",
                    "text": "GitHub Action build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}"
                  }
                }
              ]
            }
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
          SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK

 

Secret Json

Secret Variable์„ ์‚ฌ์šฉํ•  ๋•Œ json format์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ฌธ์ž์—ด์˜ format์„ ์ฝ์„ ์ˆ˜ ์—†์–ด error๊ฐ€ ๋‚จ.

์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด base64 string์„ ์‚ฌ์šฉํ•ด credential_file์„ ์ƒ์„ฑ

env:
  PREFECT_API_KEY: ${{ secrets.PREFECT_API_KEY }}
  PREFECT_API_URL: ${{ secrets.PREFECT_API_URL }}
  BASE64: ${{ secrets.BASE64 }}
  GCP_RESOURCE_REGION: ${{ secrets.GCP_RESOURCE_REGION }}
  GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
  GCP_ARTIFACT_REPOSITORY_NAME: ${{ secrets.GCP_ARTIFACT_REPOSITORY_NAME }}
  FLOW_IMAGE_NAME: ${{ secrets.FLOW_IMAGE_NAME }}
# authenticating with Gcloud example
- name: Authenticate to Google Cloud
  uses: google-github-actions/auth@v1
  with:
    credentials_json: ${{ secrets.BASE64 }}
# authenticating with Docker example
- name: Build and push image to GAR
  run: |
    RAW_IMAGE=$GCP_RESOURCE_REGION-docker.pkg.dev/$GCP_PROJECT/$GCP_ARTIFACT_REPOSITORY_NAME/$FLOW_IMAGE_NAME
    IMAGE_URI=$GCP_RESOURCE_REGION-docker.pkg.dev/$GCP_PROJECT/$GCP_ARTIFACT_REPOSITORY_NAME/$FLOW_IMAGE_NAME:$GITHUB_SHA
    docker build -q \
    --build-arg PREFECT_API_KEY=$PREFECT_API_KEY \
    --build-arg PREFECT_API_URL=$PREFECT_API_URL \
    --build-arg BASE64=$BASE64 \
    -t $RAW_IMAGE \
    -f ./Dockerfiles/flows.Dockerfile .
    docker tag $RAW_IMAGE $IMAGE_URI
    docker push $RAW_IMAGE
    docker push $IMAGE_URI
    echo "IMAGE_URI=$IMAGE_URI" >> $GITHUB_OUTPUT
  shell: bash

https://medium.com/@verazabeida/using-json-in-your-github-actions-when-authenticating-with-gcp-856089db28cf

 

 

Using JSON in your GitHub Actions when authenticating with GCP

If you try to input raw JSON into your GitHub action, itโ€™s likely that youโ€™re going to be in for a few surprises. Especially if your JSONโ€ฆ

medium.com

 

Reference

https://github.com/peter-evans/create-pull-request

 

GitHub - peter-evans/create-pull-request: A GitHub action to create a pull request for changes to your repository in the actions

A GitHub action to create a pull request for changes to your repository in the actions workspace - peter-evans/create-pull-request

github.com

 

https://github.com/marketplace/actions/run-black-formatter

 

Run black formatter - GitHub Marketplace

Run the black formatter on your codebase to improve code review experience

github.com

https://velog.io/@thovy/CICD-FastAPI-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0-AWS-EC2-Github-Actions-Docker

 

[CI/CD] FastAPI ๋ฐฐํฌํ•˜๊ธฐ - AWS EC2, Github Actions, Docker

fastAPI ์™€ react ๋ฅผ ์ด์šฉํ•œ ์„œ๋น„์Šค๋ฅผ ๋‹ค ์™„์„ฑํ–ˆ์œผ๋‹ˆ ๋ฐฐํฌ๋ฅผ ํ•ด์•ผ์ง€.AWS EC2 - Linux (๋‹น์—ฐํžˆ putty ๋„ ํ•„์š”)Github Respository์กฐ๊ธˆ์žˆ๋‹ค ํ•˜๊ฒ ์ง€๋งŒ python ์„ค์น˜ ๋ชจ๋“ˆ์„ ๊ด€๋ฆฌํ•˜๋Š” requirements.txt ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ์˜คํƒ€ ์—†๋Š”

velog.io

 

 

๋ฐ˜์‘ํ˜•
๋‹คํ–ˆ๋‹ค