Skip to content

fix(README): fixed README.md for v2.0 ctf #673

fix(README): fixed README.md for v2.0 ctf

fix(README): fixed README.md for v2.0 ctf #673

Workflow file for this run

# .github/workflows/ci.yml
name: Docker Compose CI
on:
push:
branches: [ dev ]
pull_request:
branches: [ dev ]
jobs:
build-and-run:
runs-on: ubuntu-latest
env:
DB_NAME: ${{ secrets.DB_NAME }}
DB_USERNAME: ${{ secrets.DB_USERNAME }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
DB_PORT: 3306
SPRING_SECURITY_USER_NAME: ${{ secrets.SPRING_SECURITY_USER_NAME }}
SPRING_SECURITY_USER_PASSWORD: ${{ secrets.SPRING_SECURITY_USER_PASSWORD }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
GMAIL_USERNAME: ${{ secrets.GMAIL_USERNAME }}
GMAIL_APP_PASSWORD: ${{ secrets.GMAIL_APP_PASSWORD }}
API_KEY: ${{ secrets.API_KEY }}
API_URL: ${{ secrets.API_URL }}
BUCKET: ${{ secrets.BUCKET }}
LOCATION: ${{ secrets.LOCATION }}
PROJECT_ID: ${{ secrets.PROJECT_ID }}
GCP_JSON_FILE: ${{ secrets.GCP_JSON_FILE }}
IMAGE_TAG: latest
SPRING_CLOUD_GCP_STORAGE_CREDENTIALS_LOCATION: /dev/null
SPRING_CLOUD_GCP_STORAGE_BUCKET: ${{ secrets.BUCKET }}
DOMAIN: localhost
WWW_DOMAIN: localhost
# >>> Discord alert bot (CI에서는 호출 방지 권장)
CTF_ALERT_ENABLED: "false"
CTF_ALERT_ENDPOINT: ${{ secrets.CTF_ALERT_ENDPOINT }}
CTF_ALERT_API_KEY: ${{ secrets.CTF_ALERT_API_KEY }}
CTF_ALERT_ENVIRONMENT: "ci"
steps:
- uses: actions/checkout@v4
- name: Create .env
run: |
{
echo "DB_NAME=${{ env.DB_NAME }}"
echo "DB_USERNAME=${{ env.DB_USERNAME }}"
echo "DB_PASSWORD=${{ env.DB_PASSWORD }}"
echo "DB_PORT=${{ env.DB_PORT }}"
echo "SPRING_SECURITY_USER_NAME=${{ env.SPRING_SECURITY_USER_NAME }}"
echo "SPRING_SECURITY_USER_PASSWORD=${{ env.SPRING_SECURITY_USER_PASSWORD }}"
echo "JWT_SECRET=${{ env.JWT_SECRET }}"
echo "GMAIL_USERNAME=${{ env.GMAIL_USERNAME }}"
echo "GMAIL_APP_PASSWORD=${{ env.GMAIL_APP_PASSWORD }}"
echo "API_KEY=${{ env.API_KEY }}"
echo "API_URL=${{ env.API_URL }}"
echo "BUCKET=${{ env.BUCKET }}"
echo "LOCATION=${{ env.LOCATION }}"
echo "PROJECT_ID=${{ env.PROJECT_ID }}"
echo "GCP_JSON_FILE=${{ env.GCP_JSON_FILE }}"
echo "HOST_GCP_JSON_PATH=/dev/null"
echo "DOCKER_HUB_USERNAME=${{ env.DOCKER_HUB_USERNAME }}"
echo "IMAGE_TAG=${{ env.IMAGE_TAG }}"
echo "SPRING_CLOUD_GCP_STORAGE_CREDENTIALS_LOCATION=${{ env.SPRING_CLOUD_GCP_STORAGE_CREDENTIALS_LOCATION }}"
echo "SPRING_CLOUD_GCP_STORAGE_BUCKET=${{ env.SPRING_CLOUD_GCP_STORAGE_BUCKET }}"
echo "DOMAIN=${{ env.DOMAIN }}"
echo "WWW_DOMAIN=${{ env.WWW_DOMAIN }}"
# >>> Discord alert bot
echo "CTF_ALERT_ENABLED=${{ env.CTF_ALERT_ENABLED }}"
echo "CTF_ALERT_ENDPOINT=${{ env.CTF_ALERT_ENDPOINT }}"
echo "CTF_ALERT_API_KEY=${{ env.CTF_ALERT_API_KEY }}"
echo "CTF_ALERT_ENVIRONMENT=${{ env.CTF_ALERT_ENVIRONMENT }}"
} > .env
# mask secrets in logs
cat .env | sed 's/^\(.*PASSWORD\|JWT_SECRET\|CTF_ALERT_API_KEY\|API_KEY\)=.*/\1=****/'
- name: Show Docker versions
run: |
docker --version
docker compose version
- name: Build Docker images
run: docker compose build backend
- name: Docker Compose Up (db/redis/backend)
run: |
docker compose up -d db redis backend
docker compose ps
- name: Wait for MySQL
run: |
for i in $(seq 1 30); do
if docker compose exec -T db mysqladmin ping -h 127.0.0.1 -uroot -p"${{ env.DB_PASSWORD }}" --silent; then
echo "MySQL is ready"
exit 0
fi
echo "Waiting for MySQL... ($i/30)"
sleep 2
done
echo "MySQL did not become ready"
docker compose logs db
exit 1
- name: Run Gradle Tests in Docker
run: docker compose run --rm test
- name: Backend logs (tail)
if: always()
run: docker compose logs --no-color --tail=200 backend || true
- name: Stop containers
if: always()
run: docker compose down -v