[
  {
    "path": ".github/workflows/ibm.yml",
    "content": "name: IBM Cloud Deploy\n\non:\n  workflow_dispatch:\n  push:\n    branches: [ master ]\n  schedule:\n    - cron: '0 7 * * 3'\n\ndefaults:\n  run:\n    shell: bash\n\nenv:\n  IBM_ACCOUNT: ${{ secrets.IBM_ACCOUNT }}\n  RESOURSE_ID: ${{ secrets.RESOURSE_ID }}\n  IBM_APP_NAME: ${{ secrets.IBM_APP_NAME }}\n  IBM_MEMORY: ${{ secrets.IBM_MEMORY }}\n  V2_ID: ${{ secrets.V2_ID }}\n  V2_PATH: ${{ secrets.V2_PATH }}\n  ALTER_ID: ${{ secrets.ALTER_ID }}\n  VLESS_EN: ${{ secrets.VLESS_EN }}\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - name: Deploy\n        run: |\n          ./deploy.sh\n"
  },
  {
    "path": ".github/workflows/leanengine.yml",
    "content": "name: LeanEngine Deploy\non:\n  workflow_dispatch:\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Deploy to LeanEngine\n      uses: enflo/curl-action@v1.2\n      with:\n        curl: -X POST https://console.leancloud.app/1.1/engine/groups/web/production/version?gitTag=${{ github.sha }}&token=${{ secrets.DEPLOY_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "config/v2ctl\nconfig/v2ray\nconfig/geoip.dat\nconfig/geosite.dat\nBluemix_CLI\ntest.sh\n\n"
  },
  {
    "path": "README.md",
    "content": "fork [https://github.com/CCChieh/IBMYes](https://github.com/CCChieh/IBMYes)  \n\n\n# fork修改内容:\n* `Secrets` 加入 `V2_ID`, `V2_PATH`, `ALTER_ID`,  \n  对应`vmess id`, `ws path`, `alterId`\n* 使用actions, 每周自动更新`v2ray`, 部署到 `IBM Cloud Foundray`.\n\n\n# 配置流程\n\n### 配置IBM Cloud Fonudray\n* 注册并登录[https://cloud.ibm.com/](https://cloud.ibm.com/)\n* 点击右侧 创建资源\n* 点击`Cloud Foundray`\n* 创建公共应用程序\n* 填写相关信息: 区域达拉斯(免费). 内存最高256M. 应用名称. 配置资源选Python\n* 应用程序域名 就是 应用名称+域, 比如: `ibmyes.us-south.cf.appdomain.cloud`\n* 点击右侧 创建\n\n### 配置 Cloudflare 高速节点中转\n这部分不配置也可以直接连 应用程序域名 使用, 就是有点慢.\n* 注册并登录[https://www.cloudflare.com/](https://www.cloudflare.com/)\n* 点击 Workers\n* 点击 创建Worker\n* 在脚本位置加入下面这段, `url.hostname`修改为对应的 应用程序域名.\n```\naddEventListener(\n  \"fetch\",event => {\n    let url=new URL(event.request.url);\n    url.hostname=\"ibmyes.us-south.cf.appdomain.cloud\";\n    let request=new Request(url,event.request);\n    event.respondWith(\n      fetch(request)\n    )\n  }\n)\n```\n* 点击保存并部署, 这里会给一个网址(比如`cloudflare_workers.dev`), 这个就是 v2ray 客户端要连的地址.\n\n### 利用Github Actions 自动部署 IBM Cloud Fonudray\n* 返回 github, 到本项目 [https://github.com/fcying/IBMYes](https://github.com/fcying/IBMYes)\n* 点击右上角 `Use this template`, 生成一个自己的仓库(设为`public`,如果要用`private`,需要修改`deploy.sh`,提供一个可以下载的`config.json`连接)\n* 点击自己仓库的 Settings.\n* 点击 `Secrets` 建立以下几个`secret`, 不修改默认值的可以不建:  \n    |  |  |\n    | ---- | ---- |\n    | IBM_ACCOUNT  | IBM Cloud的登录邮箱和密码, 一行邮箱, 一行密码.   |\n    | IBM_APP_NAME | IBM应用的名称.|\n    | IBM_MEMORY   | IBM应用内存大小, 默认值`128M`.|\n    | V2_ID        | vmess id, 默认值`d007eab8-ac2a-4a7f-287a-f0d50ef08680`.|\n    | V2_PATH      | ws path, 默认值`path`.|\n    | ALTER_ID     | alterId, 默认值`1`.|\n    | VLESS_EN     | 是否使用`vless`, 默认值`false`.|\n* 点击项目 `Actions`, 点击`IBM Cloud Deploy`, 点击`Run workflow`, 后续每周会自动部署一次(IBM 10天不用会停).\n* 如果需要其他配置, 可以编辑自己仓库的`config/config.json`文件.\n\n### 客户端设置\n#### Clash\n下面为对应的`vmess`部分设置.修改其中的`server`,`uuid`,`alterId`,`path`就好了.\n```\n  - name: \"IBM\"\n    type: vmess\n    server: cloudflare_workers.dev\n    port: 443\n    uuid: V2_ID\n    alterId: ALTER_ID\n    cipher: none\n    udp: true\n    tls: true\n    network: ws\n    ws-path: /V2_PATH\n```\n\n#### v2rayng\n```\n    address: cloudflare_workers.dev\n    port: 443\n    id: V2_ID\n    alterId: ALTER_ID\n    security: none\n    network: ws\n    path: /V2_PATH\n    底层传输安全: tls\n```\n\n`server` `address` 可以使用 `cloudflare.com`或者别的`CF`的比较快的IP,对应的加一个伪装设置就行.\n```\n    clash:\n    server: cloudflare.com\n    ws-headers:\n      Host: cloudflare_workers.dev\n\n    v2rayng:\n    address: cloudflare.com\n    伪装域名: cloudflare_workers.dev\n\n```\n"
  },
  {
    "path": "config/config_vless.json",
    "content": "{\n  \"inbounds\": [\n    {\n      \"sniffing\": {\n        \"enabled\": true,\n        \"destOverride\": [\"http\", \"tls\"]\n      },\n      \"port\": 8080,\n      \"listen\":\"0.0.0.0\",\n      \"protocol\": \"vless\",\n      \"settings\": {\n        \"decryption\": \"none\",\n        \"clients\": [\n          {\n            \"id\": \"V2_ID\"\n          }\n        ]\n      },\n      \"streamSettings\": {\n        \"network\": \"ws\",\n        \"wsSettings\": {\n          \"path\": \"/V2_PATH\"\n        }\n      }\n    }\n  ],\n  \"outbounds\": [\n    {\n      \"protocol\": \"freedom\",\n      \"settings\": {},\n      \"tag\": \"direct\"\n    },\n    {\n      \"protocol\": \"blackhole\",\n      \"settings\": {},\n      \"tag\": \"block\"\n    }\n  ],\n  \"routing\": {\n    \"domainStrategy\": \"AsIs\",\n    \"rules\": [\n      {\n        \"type\": \"field\",\n        \"outboundTag\": \"block\",\n        \"protocol\": [\"bittorrent\"]\n      },\n      {\n        \"type\": \"field\",\n        \"outboundTag\": \"block\",\n        \"ip\": [\n          \"0.0.0.0/8\",\n          \"10.0.0.0/8\",\n          \"127.0.0.0/8\",\n          \"172.16.0.0/12\",\n          \"192.168.0.0/16\"\n        ]\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "config/config_vmess.json",
    "content": "{\n  \"inbounds\": [\n    {\n      \"sniffing\": {\n        \"enabled\": true,\n        \"destOverride\": [\"http\", \"tls\"]\n      },\n      \"port\": 8080,\n      \"listen\":\"0.0.0.0\",\n      \"protocol\": \"vmess\",\n      \"settings\": {\n        \"clients\": [\n          {\n            \"alterId\": ALTER_ID,\n            \"security\": \"none\",\n            \"id\": \"V2_ID\"\n          }\n        ]\n      },\n      \"streamSettings\": {\n        \"network\": \"ws\",\n        \"wsSettings\": {\n          \"path\": \"/V2_PATH\"\n        }\n      }\n    }\n  ],\n  \"outbounds\": [\n    {\n      \"protocol\": \"freedom\",\n      \"settings\": {},\n      \"tag\": \"direct\"\n    },\n    {\n      \"protocol\": \"blackhole\",\n      \"settings\": {},\n      \"tag\": \"block\"\n    }\n  ],\n  \"routing\": {\n    \"domainStrategy\": \"AsIs\",\n    \"rules\": [\n      {\n        \"type\": \"field\",\n        \"outboundTag\": \"block\",\n        \"protocol\": [\"bittorrent\"]\n      },\n      {\n        \"type\": \"field\",\n        \"outboundTag\": \"block\",\n        \"ip\": [\n          \"0.0.0.0/8\",\n          \"10.0.0.0/8\",\n          \"127.0.0.0/8\",\n          \"172.16.0.0/12\",\n          \"192.168.0.0/16\"\n        ]\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "config/manifest.yml",
    "content": "applications:\n- path: .\n  name: IBM_APP_NAME\n  instances: 1\n  random-route: true\n  disk_quota: 128M\n  memory: IBM_MEMORY\n  command: ./d.sh && ./IBM_APP_NAME -c config.json\n  buildpacks:\n  - binary_buildpack\n"
  },
  {
    "path": "deploy.sh",
    "content": "#! /bin/bash\n\ncd $(dirname $0)\n\nIBMCLOUD=$(pwd)/Bluemix_CLI/bin/ibmcloud\nCF=~/.bluemix/.cf/cfcli/cf\n#BLUE=\"\\e[00;34m\"\n#RED=\"\\e[00;31m\"\n#END=\"\\e[0m\"\nBLUE=\"\"\nRED=\"\"\nEND=\"===================================\"\n\nif [ ! -f \"$IBMCLOUD\" ]; then\n    echo \"${BLUE}download ibm-cloud-cli-release${END}\"\n    ver=$(curl -s https://github.com/IBM-Cloud/ibm-cloud-cli-release/releases/latest | grep -Po \"(\\d+\\.){2}\\d+\")\n    #ver=1.1.0\n    wget -q -Oibm_cli.tgz https://clis.cloud.ibm.com/download/bluemix-cli/$ver/linux64\n    if [ $? -eq 0 ]; then\n        tar xzf ibm_cli.tgz\n    else\n        echo \"${RED}download new version failed!${END}\"\n        exit 1\n    fi\n    rm -fv ibm_cli.tgz\nfi\n\n# set default env\nIBM_MEMORY=${IBM_MEMORY:-\"128M\"}\nV2_ID=${V2_ID:-\"d007eab8-ac2a-4a7f-287a-f0d50ef08680\"}\nV2_PATH=${V2_PATH:-\"path\"}\nALTER_ID=${ALTER_ID:-\"1\"}\nVLESS_EN=${VLESS_EN:-\"false\"}\nmkdir -p $IBM_APP_NAME\n\nif [ ! -f \"./config/v2ray\" ]; then\n    echo \"${BLUE}download v2ray${END}\"\n    pushd ./config\n    new_ver=$(curl -s https://github.com/v2fly/v2ray-core/releases/latest | grep -Po \"(\\d+\\.){2}\\d+\")\n    wget -q -Ov2ray.zip https://github.com/v2fly/v2ray-core/releases/download/v${new_ver}/v2ray-linux-64.zip\n    if [ $? -eq 0 ]; then\n        7z x v2ray.zip v2ray v2ctl *.dat\n        chmod 700 v2ctl v2ray\n    else\n        echo \"${RED}download new version failed!${END}\"\n        exit 1\n    fi\n    rm -fv v2ray.zip\n    popd\nfi\n\n# cloudfoundry config\ncp -rvf ./config/manifest.yml ./$IBM_APP_NAME/\nsed \"s/IBM_APP_NAME/${IBM_APP_NAME}/\" ./$IBM_APP_NAME/manifest.yml -i\nsed \"s/IBM_MEMORY/${IBM_MEMORY}/\" ./$IBM_APP_NAME/manifest.yml -i\n\n# v2ray config\ncp -vf ./config/v2ray ./$IBM_APP_NAME/$IBM_APP_NAME\ncp -vf ./config/v2ctl ./$IBM_APP_NAME/\n\nbranch=${GITHUB_REF#refs/heads/}\nif [ $VLESS_EN == \"false\" ]; then\n    {\n        echo \"#! /bin/bash\"\n        echo \"wget -Oconfig.json https://raw.githubusercontent.com/$GITHUB_REPOSITORY/$branch/config/config_vmess.json\"\n        echo \"sed 's/V2_ID/$V2_ID/' config.json -i\"\n        echo \"sed 's/V2_PATH/$V2_PATH/' config.json -i\"\n        echo \"sed 's/ALTER_ID/$ALTER_ID/' config.json -i\"\n    } > ./$IBM_APP_NAME/d.sh\nelse\n    {\n        echo \"#! /bin/bash\"\n        echo \"wget -Oconfig.json https://raw.githubusercontent.com/$GITHUB_REPOSITORY/$branch/config/config_vless.json\"\n        echo \"sed 's/V2_ID/$V2_ID/' config.json -i\"\n        echo \"sed 's/V2_PATH/$V2_PATH/' config.json -i\"\n    } > ./$IBM_APP_NAME/d.sh\nfi\nchmod +x ./$IBM_APP_NAME/d.sh\n\n#cat ./$IBM_APP_NAME/d.sh\n#exit 0\n\nif [ ! -f \"$CF\" ]; then\n    echo \"${BLUE}ibmcloud cf install${END}\"\n    $IBMCLOUD cf install -f\nfi\n\necho \"${BLUE}cf login${END}\"\n$CF login -a https://api.us-south.cf.cloud.ibm.com <<EOF\n$IBM_ACCOUNT\nEOF\n\ncd ./$IBM_APP_NAME\necho \"${BLUE}cf push${END}\"\n$CF push\n\nif [ $? -ne 0 ]; then\n    echo \"${BLUE}print cf push error${END}\"\n    $CF logs $IBM_APP_NAME --recent\n    exit 1\nfi\n"
  }
]