diff --git a/.env.ci.dev b/.env.ci.test similarity index 100% rename from .env.ci.dev rename to .env.ci.test diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 29e74086..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,122 +0,0 @@ -name : Deploy to Dev - -on: - push: - branches: [development] - -env: - PROJECT_ID: ${{ secrets.GKE_PROJECT }} - GKE_CLUSTER: nmrxiv-dev - GKE_ZONE: europe-west3-a - DEPLOYMENT_NAME: nmrxiv-nmrxiv-app - SCHEDULER_DEPLOYMENT_NAME: nmrxiv-scheduler - WORKER_DEPLOYMENT_NAME: nmrxiv-worker - REPOSITORY_NAME: nmrxiv-dev - APP_IMAGE: nmrxiv-app - NGINX_IMAGE: nmrxiv-nginx - -jobs: - php-unit-test: - name: Run test - runs-on: ubuntu-latest - container: - image: kirschbaumdevelopment/laravel-test-runner:8.2 - - services: - postgres: - image: postgres:13 - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: nmrxiv - ports: - - 5432:5432 - options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 - - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - - name: Install composer dependencies - run: | - composer install --ignore-platform-reqs - - name: Prepare Laravel Application - run: | - php -r "file_exists('.env') || copy('.env.ci.dev', '.env');" - - echo AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID_DEV }} >> .env - echo AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} >> .env - echo MEILISEARCH_KEY=${{ secrets.MEILISEARCH_KEY_DEV }} >> .env - echo MEILISEARCH_PUBLICKEY=${{ secrets.MEILISEARCH_PUBLICKEY_DEV }} >> .env - echo TWITTER_CLIENT_ID=${{ secrets.TWITTER_CLIENT_ID_DEV }} >> .env - echo TWITTER_CLIENT_SECRET=${{ secrets.TWITTER_CLIENT_SECRET_DEV }} >> .env - echo GITHUB_CLIENT_ID=${{ secrets.CLIENT_ID_GITHUB_DEV }} >> .env - echo GITHUB_CLIENT_SECRET=${{ secrets.CLIENT_SECRET_GITHUB_DEV }} >> .env - - php artisan key:generate - php artisan migrate --seed - - name: Install front-end dependencies - run: | - npm install - npm run build - - name: Run Test - run: php artisan test --parallel - - - setup-build-publish-deploy: - name: Build & deploy to development - if: github.ref == 'refs/heads/development' - runs-on: ubuntu-latest - needs: php-unit-test - steps: - - name: Checkout - uses: actions/checkout@v2 - - # Setup gcloud CLI - - uses: google-github-actions/setup-gcloud@94337306dda8180d967a56932ceb4ddcf01edae7 - with: - service_account_key: ${{ secrets.GKE_SA_KEY }} - project_id: ${{ secrets.GKE_PROJECT }} - - # Configure docker to use the gcloud command-line tool as a credential helper - - run: |- - gcloud auth configure-docker europe-west3-docker.pkg.dev - # Get the GKE credentials so we can deploy to the cluster - - uses: google-github-actions/get-gke-credentials@v0.3.0 - with: - cluster_name: ${{ env.GKE_CLUSTER }} - location: ${{ env.GKE_ZONE }} - credentials: ${{ secrets.GKE_SA_KEY }} - - # Build the Docker image - - name: Build App Image - run: |- - docker build -f ./resources/ops/docker/app/app.dockerfile \ - --tag "europe-west3-docker.pkg.dev/$PROJECT_ID/$REPOSITORY_NAME/$APP_IMAGE:latest" \ - --build-arg GITHUB_SHA="$GITHUB_SHA" \ - --build-arg GITHUB_REF="$GITHUB_REF" \ - . - - name: Build Nginx Image - run: |- - docker build -f ./resources/ops/docker/nginx/nginx.dockerfile \ - --tag "europe-west3-docker.pkg.dev/$PROJECT_ID/$REPOSITORY_NAME/$NGINX_IMAGE:latest" \ - --build-arg GITHUB_SHA="$GITHUB_SHA" \ - --build-arg GITHUB_REF="$GITHUB_REF" \ - . - # Push the Docker image to Google Container Registry - - name: Publish App Image to GCR - run: |- - docker push "europe-west3-docker.pkg.dev/$PROJECT_ID/$REPOSITORY_NAME/$APP_IMAGE:latest" - - - name: Publish Nginx Image to GCR - run: |- - docker push "europe-west3-docker.pkg.dev/$PROJECT_ID/$REPOSITORY_NAME/$NGINX_IMAGE:latest" - - - name: Deploy - run: |- - kubectl rollout restart deployment/$DEPLOYMENT_NAME - kubectl rollout restart deployment/$WORKER_DEPLOYMENT_NAME - kubectl rollout restart deployment/$SCHEDULER_DEPLOYMENT_NAME - kubectl rollout status deployment/$DEPLOYMENT_NAME --timeout=300s - kubectl get services -o wide \ No newline at end of file diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml new file mode 100644 index 00000000..ec89c760 --- /dev/null +++ b/.github/workflows/dev-build.yml @@ -0,0 +1,83 @@ +name : Deploy to Dev + +on: + push: + branches: [development] + +env: + PROJECT_ID: ${{ secrets.GKE_PROJECT }} + GKE_CLUSTER: nmrxiv-dev + GKE_ZONE: europe-west3-a + DEPLOYMENT_NAME: nmrxiv-nmrxiv-app + SCHEDULER_DEPLOYMENT_NAME: nmrxiv-scheduler + WORKER_DEPLOYMENT_NAME: nmrxiv-worker + DOCKER_HUB_USERNAME : ${{ secrets.DOCKER_HUB_USERNAME }} + DOCKER_HUB_PASSWORD : ${{ secrets.DOCKER_HUB_PASSWORD }} + REPOSITORY_NAME: nmrxiv + REPOSITORY_NAMESPACE: nfdi4chem + +jobs: + php-unit-test: + uses: NFDI4Chem/nmrxiv/.github/workflows/test.yml@development + + setup-build-publish-deploy: + name: Build & deploy to development + runs-on: ubuntu-latest + needs: php-unit-test + steps: + - name: Checkout + uses: actions/checkout@v2 + + # Setup gcloud CLI + - uses: google-github-actions/setup-gcloud@94337306dda8180d967a56932ceb4ddcf01edae7 + with: + service_account_key: ${{ secrets.GKE_SA_KEY }} + project_id: ${{ secrets.GKE_PROJECT }} + + # Get the GKE credentials + - uses: google-github-actions/get-gke-credentials@v0.3.0 + with: + cluster_name: ${{ env.GKE_CLUSTER }} + location: ${{ env.GKE_ZONE }} + credentials: ${{ secrets.GKE_SA_KEY }} + + - name: Log in to Docker Hub + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a + with: + username: ${{ env.DOCKER_HUB_USERNAME }} + password: ${{ env.DOCKER_HUB_PASSWORD }} + + # Build and push the app Docker image + - name: Build and push App Docker image + uses: docker/build-push-action@v4 + with: + context: . + file: ./resources/ops/docker/app/app.dockerfile + push: true + build-args: | + RELEASE_VERSION=dev-app-latest + tags: ${{ env.REPOSITORY_NAMESPACE }}/${{ env.REPOSITORY_NAME }}:dev-app-latest + username: ${{ env.DOCKER_HUB_USERNAME }} + password: ${{ env.DOCKER_HUB_PASSWORD }} + + # Build and push the nginx Docker image + - name: Build and push Nginx Docker image + uses: docker/build-push-action@v4 + with: + context: . + file: ./resources/ops/docker/nginx/nginx.dockerfile + push: true + build-args: | + RELEASE_VERSION=dev-nginx-latest + tags: ${{ env.REPOSITORY_NAMESPACE }}/${{ env.REPOSITORY_NAME }}:dev-nginx-latest + username: ${{ env.DOCKER_HUB_USERNAME }} + password: ${{ env.DOCKER_HUB_PASSWORD }} + + # Deploy the latest Docker image to the GKE cluster + - name: Deploy + run: |- + kubectl rollout restart deployment/$DEPLOYMENT_NAME + kubectl rollout restart deployment/$WORKER_DEPLOYMENT_NAME + kubectl rollout restart deployment/$SCHEDULER_DEPLOYMENT_NAME + kubectl rollout status deployment/$DEPLOYMENT_NAME --timeout=300s + kubectl get services -o wide \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..62fdc3d0 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,52 @@ +name : Test + +on: + workflow_call: + +jobs: + php-unit-test: + name: Run test + runs-on: ubuntu-latest + container: + image: kirschbaumdevelopment/laravel-test-runner:8.2 + + services: + postgres: + image: postgres:13 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: nmrxiv + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + + - name: Install composer dependencies + run: | + composer install --ignore-platform-reqs + - name: Prepare Laravel Application + run: | + php -r "file_exists('.env') || copy('.env.ci.test', '.env');" + + echo AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID_DEV }} >> .env + echo AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} >> .env + echo MEILISEARCH_KEY=${{ secrets.MEILISEARCH_KEY_DEV }} >> .env + echo MEILISEARCH_PUBLICKEY=${{ secrets.MEILISEARCH_PUBLICKEY_DEV }} >> .env + echo TWITTER_CLIENT_ID=${{ secrets.TWITTER_CLIENT_ID_DEV }} >> .env + echo TWITTER_CLIENT_SECRET=${{ secrets.TWITTER_CLIENT_SECRET_DEV }} >> .env + echo GITHUB_CLIENT_ID=${{ secrets.CLIENT_ID_GITHUB_DEV }} >> .env + echo GITHUB_CLIENT_SECRET=${{ secrets.CLIENT_SECRET_GITHUB_DEV }} >> .env + + php artisan key:generate + php artisan migrate --seed + - name: Install front-end dependencies + run: | + npm install + npm run build + - name: Run Test + run: php artisan test --parallel \ No newline at end of file