stages:
  - prepare
  - prepare2
  - pack
  - deploy

variables:
  GIT_DEPTH: "1"

# redtext:
#   stage: pack
#   dependencies: []
#   tags:
#     - linux
#   image: git-registry.mycard.moe/nanahira/srvpro:lite
#   variables:
#     DATABASE_FILE: expansions/test-release.cdb
#   script:
#     - apt update && apt -y install sqlite3
#     - mv /ygopro-server/ygopro .
#     - mkdir dist
#     - cd ygopro
#     - mkdir -p expansions
#     - mv ../script expansions/
#     - mv ../*.cdb expansions
#     - echo "# Result of redtext test of commit $CI_COMMIT_SHA"
#     - echo "select id from datas where type != 0x10 and (type & 0x4000) = 0;" | sqlite3 $DATABASE_FILE | xargs -I {} ./ygopro {} 2>&1 | tee ../dist/redtext.txt
#     - cd ..
#     - exit $(cat dist/redtext.txt | wc -l)

merge_databases:
  stage: prepare
  dependencies: []
  tags:
    - linux
  script:
    - apt update && apt -y install sqlite3
    - ls -1 *.cdb | sed '/test-update.cdb/d' | xargs -I '{}' sqlite3 '{}' .dump | sqlite3 test-release.cdb || true
  artifacts:
    paths:
      - test-release.cdb

.json:
  stage: prepare2
  dependencies:
    - merge_databases
  tags:
    - linux
  image: git-registry.mycard.moe/mycard/ygopro-cdb-descgen:master-x86
  variables:
    YGOPRO_PIC_URL_PREFIX: 'https://cdn02.moecube.com:444/ygopro-super-pre/data/pics/'
    YGOPRO_PIC_URL_SUFFIX: '.jpg'
    FIELDS: 'name,desc,overallString,picUrl'
    GIT_DEPTH: '1000'
    OUTPUT_FILENAME: test-release.json
    REF_COMMIT: '2.32' # 更新的时候改这里，修改成上一个tag的版本号
  script:
    - apt update;apt -y install wget
    - currentPath=$PWD
    - cd /usr/src/app
    - wget -O strings.conf https://code.mycard.moe/mycard/ygopro-database/-/raw/master/locales/zh-CN/strings.conf
    - env GIT_PATH=$currentPath node dist $currentPath/test-release.cdb ./strings.conf $currentPath/test-strings.conf > $currentPath/$OUTPUT_FILENAME
    - cd $currentPath
  artifacts:
    paths:
      - test-release.json

json:
  extends: .json

json2:
  extends: .json
  variables:
    FIELDS: 'id,name,desc,overallString,picUrl,createTime,createCommit,updateTime,updateCommit,created,updated'
    OUTPUT_FILENAME: test-release-v2.json
  artifacts:
    paths:
      - test-release-v2.json

neos:
  stage: pack
  dependencies:
    - merge_databases
  tags: 
    - linux
  script:
    - apt update && apt -y install sqlite3
    - mkdir neos
    - sqlite3 test-release.cdb .dump >> ygopro-super-pre-neos.sql
    - sqlite3 test-update.cdb .dump >> ygopro-super-pre-neos.sql
    - wget -O cards.cdb https://code.mycard.moe/mycard/ygopro-database/-/raw/master/locales/zh-CN/cards.cdb
    - sqlite3 cards.cdb .dump >> ygopro-super-pre-neos.sql
    - cat ygopro-super-pre-neos.sql | sqlite3 neos/ygopro-super-pre-neos.cdb || true
  artifacts:
    paths:
      - neos

pack:
  stage: pack
  dependencies:
    - merge_databases
    - json
    - json2
  tags: 
    - linux
  script:
    - mkdir -p data archive
    - mv test-release.cdb data/
    - mv test-update.cdb data/
    - mv pics data/
    - mv script data/
    - mv *.conf data/
    - mv pack data/
    - mv *.ini data/
    - mv test-release.json data/
    - mv test-release-v2.json data/
    - git show -s --format=%ct $CI_COMMIT_SHA > data/version.txt
    - cd data
    - 7z a -mx9 ../archive/ygopro-super-pre.zip pics script pack *.cdb *.conf *.ini
    - cd ..
    - mv archive/ygopro-super-pre.zip archive/ygopro-super-pre.ypk
    - cp archive/ygopro-super-pre.ypk archive/ygopro-super-pre-$CI_COMMIT_REF_NAME.ypk
  artifacts:
    paths:
      - data
      - archive

server:
  stage: pack
  dependencies:
    - merge_databases
  tags: 
    - linux
  script:
    - mkdir server-dist
    - mv test-release.cdb server-dist
    - mv test-update.cdb server-dist
    - mv *.conf server-dist
    - mv script server-dist
    # merge ygopro-pre-data
    # - git clone --depth=1 https://code.mycard.moe/mycard/ygopro-pre-data
    # - mv ygopro-pre-data/expansions/* server-dist/
    # - mv ygopro-pre-data/script/* server-dist/script/
  artifacts:
    paths:
      - server-dist

.minio:
  stage: deploy
  dependencies:
    - pack
  tags: 
    - linux
  script:
    - aws s3 --endpoint=https://minio.mycard.moe:9000 sync $uploadDir/ s3://mycard/ygopro-super-pre/$uploadDir

upload_archive:
  extends: .minio
  variables:
    uploadDir: archive
  only:
    - tags

upload_data:
  extends: .minio
  variables:
    uploadDir: data
  only:
    - tags

upload_neos:
  extends: .minio
  variables:
    uploadDir: neos
  dependencies:
    - neos
  only:
    - master

upload_version_json:
  extends: .minio
  script:
    - aws s3 --endpoint=https://minio.mycard.moe:9000 cp data/version.txt s3://mycard/ygopro-super-pre/versions/$CI_COMMIT_REF_NAME/version.txt
    - aws s3 --endpoint=https://minio.mycard.moe:9000 cp data/test-release.json s3://mycard/ygopro-super-pre/versions/$CI_COMMIT_REF_NAME/test-release.json
    - aws s3 --endpoint=https://minio.mycard.moe:9000 cp data/test-release-v2.json s3://mycard/ygopro-super-pre/versions/$CI_COMMIT_REF_NAME/test-release-v2.json

deploy:
  stage: deploy
  dependencies:
    - pack
  tags: 
    - linux
  variables:
    username: $MYCARD_USERNAME
    password: $MYCARD_PASSWORD
    appVersion: $CI_COMMIT_REF_NAME
  script:
    - apt update; apt -y install tar zstd curl jq
    - git clone https://code.mycard.moe/mycard/mycard-package-script
    - cd mycard-package-script
    - ./index.sh makeBuild ygopro-super-pre ../data || true
    - ./index.sh makeBuild ygopro2-super-pre ../data || true
    - cd ..
  only:
    # - master
    - tags

.deploy_to_server:
  stage: deploy
  tags:
    - linux
  dependencies:
    - server
  variables:
    SERVER_PATH: ~/ygopro-super-pre/expansions
  script:
    - apt update && apt -y install openssh-client rsync coreutils
    - mkdir ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan $SERVER_HOST >> ~/.ssh/known_hosts
    - echo $NANAHIRA_SSH_KEY | base64 --decode > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/*
    - rsync -4cavzP --exclude=pics --delete ./server-dist/ $SERVER_USER@$SERVER_HOST:$SERVER_PATH
  only:
    - master
    - tags

deploy_to_tiramisu:
  extends: .deploy_to_server
  variables:
    SERVER_HOST: tiramisu.mycard.moe
    SERVER_USER: mycard

deploy_to_koishi:
  extends: .deploy_to_server
  variables:
    SERVER_HOST: koishi.momobako.com
    SERVER_USER: nanahira
