kind: pipeline
type: kubernetes
name: staging

trigger:
  event:
    - push
  branch:
    - main

# STAGING!!!!
steps:
- name: build-wasm
  image: golang:1.17.8-alpine
  volumes:
    - name: build-staging
      path: /drone/src/build
  environment:
    APIURL: https://api.quenten.nl/api/testing
    CGO_ENABLED: 0
  commands:
    - mkdir ./build/web
    - GOARCH=wasm GOOS=js go build -o ./build/web/app.wasm -ldflags="-X 'main.ApiURL=$APIURL'" ./src
- name: build-server
  image: golang:1.17.8-alpine
  volumes:
    - name: build-staging
      path: /drone/src/build
  environment:
    APIURL: https://api.quenten.nl/api/testing
    CGO_ENABLED: 0
  commands:
    - go build -o ./build/app -ldflags="-X 'main.ApiURL=$APIURL'" ./src
- name: build-publish-image
  image: plugins/docker
  privileged: true
  volumes:
    - name: build-staging
      path: /drone/src/build
  settings:
    cache_from:
      - "dutchellie/proper-website-2:dev"
    username:
      from_secret: docker_username
    password:
      from_secret: docker_password
    dockerfile: Dockerfile
    repo: dutchellie/proper-website-2
    tags:
      - dev-${DRONE_COMMIT_SHA:0:8}
  depends_on:
    - build-wasm
    - build-server
- name: deploy-staging
  image: pelotech/drone-helm3
  settings:
    mode: upgrade
    chart: .drone/helm/chart
    namespace: drone-staging
    release: newsite-staging
    skip_tls_verify: true
    values_files:
      - .drone/helm/staging-val.yaml
    values:
      - "image=dutchellie/proper-website-2:dev-${DRONE_COMMIT_SHA:0:8}"
      - "baseURL=staging.quenten.nl"
      - "name=newsite-staging"
    kube_api_server:
      from_secret: staging_api_server
    kube_token:
      from_secret: staging_kube_token
    kube_certificate:
      from_secret: staging_kube_certificate
    kube_service_account: drone-deploy
    dry_run: false
  depends_on:
    - build-publish-image

volumes:
  - name: build-staging
    temp: {}

---

kind: pipeline
type: kubernetes
name: production

trigger:
  event:
    - promote
  target:
    - production
  branch:
    - main

# PRODUCTION!!!!
steps:
- name: build-wasm
  image: golang:1.17.8-alpine
  volumes:
    - name: build
      path: /drone/src/build
  environment:
    APIURL: https://api.quenten.nl/api
    CGO_ENABLED: 0
  commands:
    - mkdir ./build/web
    - GOARCH=wasm GOOS=js go build -o ./build/web/app.wasm -ldflags="-X 'main.ApiURL=$APIURL'" ./src
- name: build-server
  image: golang:1.17.8-alpine
  volumes:
    - name: build
      path: /drone/src/build
  environment:
    APIURL: https://api.quenten.nl/api
    CGO_ENABLED: 0
  commands:
    - go build -o ./build/app -ldflags="-X 'main.ApiURL=$APIURL'" ./src
- name: build-publish-image
  image: plugins/docker
  privileged: true
  volumes:
    - name: build
      path: /drone/src/build
  settings:
    cache_from:
      - "dutchellie/proper-website-2:latest"
    username:
      from_secret: docker_username
    password:
      from_secret: docker_password
    dockerfile: Dockerfile
    repo: dutchellie/proper-website-2
    tags:
      - latest-${DRONE_COMMIT_SHA:0:8}
  depends_on:
    - build-wasm
    - build-server
- name: deploy-production
  image: pelotech/drone-helm3
  settings:
    mode: upgrade
    chart: .drone/helm/chart
    namespace: drone-production
    release: newsite-production
    skip_tls_verify: true
    values_files:
      - .drone/helm/prod-val.yaml
    values:
      - "image=dutchellie/proper-website-2:latest-${DRONE_COMMIT_SHA:0:8}"
      - "baseURL=quenten.nl"
      - "name=newsite-prod"
    kube_api_server:
      from_secret: prod_api_server
    kube_token:
      from_secret: prod_kube_token
    kube_certificate:
      from_secret: prod_kube_certificate
    kube_service_account: drone-deploy
    dry_run: false
  depends_on:
    - build-publish-image

volumes:
  - name: build
    temp: {}

---

kind: pipeline
type: kubernetes
name: feature-branch

trigger:
  event:
    - push
  branch:
    exclude:
      - main

# FEATURE DEPLOY
steps:
- name: build-wasm
  image: golang:1.17.8-alpine
  volumes:
    - name: build-feature
      path: /drone/src/build
  environment:
    APIURL: https://api.quenten.nl/api/testing
    CGO_ENABLED: 0
  commands:
    - mkdir ./build/web
    - GOARCH=wasm GOOS=js go build -o ./build/web/app.wasm -ldflags="-X 'main.ApiURL=$APIURL'" ./src
- name: build-server
  image: golang:1.17.8-alpine
  volumes:
    - name: build-feature
      path: /drone/src/build
  environment:
    APIURL: https://api.quenten.nl/api/testing
    CGO_ENABLED: 0
  commands:
    - go build -o ./build/app -ldflags="-X 'main.ApiURL=$APIURL'" ./src
- name: build-publish-image
  image: plugins/docker
  privileged: true
  volumes:
    - name: build-feature
      path: /drone/src/build
  settings:
    username:
      from_secret: docker_username
    password:
      from_secret: docker_password
    dockerfile: Dockerfile
    repo: dutchellie/proper-website-2
    tags:
      - feature-${DRONE_BRANCH}-${DRONE_COMMIT_SHA:0:8}
  depends_on:
    - build-wasm
    - build-server
- name: deploy-staging
  image: pelotech/drone-helm3
  settings:
    mode: upgrade
    chart: .drone/helm/chart
    namespace: drone-staging
    release: feature-${DRONE_BRANCH}
    skip_tls_verify: true
    values_files:
      - .drone/helm/staging-val.yaml
    values:
      - "image=dutchellie/proper-website-2:feature-${DRONE_BRANCH}-${DRONE_COMMIT_SHA:0:8}"
      - "baseURL=${DRONE_BRANCH}.quenten.nl"
      - "name=${DRONE_BRANCH}-deployment"
    kube_api_server:
      from_secret: staging_api_server
    kube_token:
      from_secret: staging_kube_token
    kube_certificate:
      from_secret: staging_kube_certificate
    kube_service_account: drone-deploy
    dry_run: false
  depends_on:
    - build-publish-image

volumes:
  - name: build-feature
    temp: {}