# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

# https://www.gitpod.io
# https://www.gitpod.io/docs/41_Config_Gitpod_File/
# https://github.com/gitpod-io/workspace-images/tree/master/mysql

image: gitpod/workspace-mysql:2022-08-04-13-40-17
ports:
- port: 3306
  onOpen: ignore
- port: 8005
  onOpen: ignore
- port: 8009
  onOpen: ignore
- port: 8080
- port: 8081
  onOpen: ignore
- port: 8443
tasks:
- command: |
      # NB MySQL on GitPod.io is currently quite slow.
      # Using authentication_string= instead of password= due to mysql major version difference
      mysql -e "USE mysql;\nUPDATE user SET authentication_string=PASSWORD('mysql') WHERE user='root';\nFLUSH PRIVILEGES;\n"
      ./gradlew createDB -PdbName=fineract_tenants
      ./gradlew createDB -PdbName=fineract_default
      ./gradlew build -x test
  init: sdk default java 17.0.4.fx-zulu
