kind: pipeline
type: kubernetes
name: staging

trigger:
  event:
    - push

# 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}"
    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

# 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}"
    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: {}