My Workflow
This is a workflow that covers Kotlin Building, Test Coverage Badge Generation and Cloud Functions Deployment.
At the begging of the year I wanted to create a project to try out serverless computation and cloud-native, using Kotlin with the Cloud Functions form GCP seems like a good start point to me, so I created a small crawler to crawl some apartment buying registration information and send out an email notification. (In my city the building companies publish buying registration information once they decide to start selling, and you need to register first if you want to buy one).
So my next problem was to create a CI/CD pipeline, which I decided to try out Github Actions, and I was happy to found out there are already some great actions that could help me to generate a fancy test coverage badge and deploy my code to Cloud Functions easily. By leveraging cicirello/jacoco-badge-generator@v2
and google-github-actions/deploy-cloud-functions@v0.1.2
, my pipeline was built quickly.
And the final result looks like this:
Submission Category:
Wacky Wildcards
Yaml File or Link to Code
name: CI/CD on: push: branches: [ master ] paths: - src/** # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 8 uses: actions/setup-java@v2 with: java-version: '8' distribution: 'adopt' - name: Build with Gradle run: ./gradlew build - name: Generate JaCoCo Badge uses: cicirello/jacoco-badge-generator@v2 with: jacoco-csv-file: build/reports/jacoco/test/jacocoTestReport.csv generate-branches-badge: true - name: Log coverage percentage run: | echo "coverage = ${{ steps.jacoco.outputs.coverage }}" echo "branch coverage = ${{ steps.jacoco.outputs.branches }}" - name: Commit and push the badge (if it changed) uses: EndBug/add-and-commit@v7 with: default_author: github_actions message: 'doc: update badge' add: '*.svg' - name: Upload JaCoCo coverage report uses: actions/upload-artifact@v2 with: name: jacoco-report path: build/reports/jacoco/test/html deploy: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Cloud Functions Deploy uses: google-github-actions/deploy-cloud-functions@v0.1.2 with: credentials: ${{ secrets.GCP_SA_KEY }} name: apartment-registration-alert region: asia-northeast1 env_vars: AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }},AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }} entry_point: Application runtime: java11 service_account_email: ${{ secrets.SERVICE_ACCOUNT_EMAIL }} max_instances: 1 event_trigger_type: google.pubsub.topic.publish event_trigger_resource: projects/apartment-registration-alert/topics/schedule-trigger
hyrepo / apartment-registration-notification
A serverless, cloud-native crawler that uses AWS and GCP free tier to crawl apartment purchasing information and sending email notifications.
This application crawls apartments information hourly, if there are new apartments in particular areas open for purchase, then an email notification will be triggered.
The logic is pretty simple, but the main purpose of this application is to try out:
- Running an application in the cloud for totally free
- Serverless computation
- Cloud-native
Architecture
Cost
All cloud components are covered in the free tier as bellow, this application cost $0.
Component | Type | Free Tier | Platform |
---|---|---|---|
Cloud Functions | Serverless Platform(FaaS) | 200M calls / month | GCP |
Cloud Scheduler | Scheduler | 3 jobs / month | GCP |
Cloud Pub/Sub | Message Service | 10GB / month | GCP |
Cloud Firestore | NoSQL DB | 1GB storage, 50000 reads & 20000 writes / day | GCP |
SNS | Notification Service | 1000 Email | AWS |
Top comments (0)