diff --git a/.github/workflows/vaddy/prepare/action.yml b/.github/workflows/vaddy/prepare/action.yml new file mode 100644 index 00000000000..1c6752edbee --- /dev/null +++ b/.github/workflows/vaddy/prepare/action.yml @@ -0,0 +1,161 @@ +name: 'Prepare VAddy' +on: + workflow_call: + +inputs: + vaddy-verification-code: + description: 'VAddy verification code' + required: true + type: string + vaddy-fqdn: + description: 'VAddy FQDN' + required: true + type: string + vaddy-user: + description: 'VAddy USER' + required: true + type: string + vaddy-auth-key: + description: 'VAddy AUTH key' + required: true + type: string + +runs: + using: "composite" + steps: + + - name: Setup PHP + uses: nanasess/setup-php@master + with: + php-version: '7.4' + + - name: setup-chromedriver + uses: nanasess/setup-chromedriver@master + + - name: Install fonts + shell: bash + run: sudo apt install fonts-noto + + - name: "VAddy: install" + working-directory: /tmp + shell: bash + run: | + wget -q https://github.com/vaddy/go-vaddy/archive/master.zip + unzip master.zip + echo 'export VADDY_AUTH_KEY="${{ inputs.vaddy-auth-key }}" + export VADDY_FQDN="${{ inputs.vaddy-fqdn }}" + export VADDY_VERIFICATION_CODE="${{ inputs.vaddy-verification-code }}" + export VADDY_USER="${{ inputs.vaddy-user }}" + export VADDY_YOUR_LOCAL_IP="127.0.0.1" + export VADDY_YOUR_LOCAL_PORT="8080" + export VADDY_HTTPS_PROXY=""' > go-vaddy-master/privatenet/conf/vaddy.conf + mkdir -p ${HOME}/.ssh + echo 'Host *.vaddy.net + StrictHostKeyChecking no' >> ${HOME}/.ssh/config + + - name: Get Composer Cache Directory + id: composer-cache + shell: bash + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-composer- + + - name: "EC-CUBE: setup" + shell: bash + env: + DATABASE_URL: postgres://postgres:password@127.0.0.1:5432/eccube_db + DATABASE_SERVER_VERSION: 14 + run: | + composer install --no-scripts --no-dev --no-interaction --optimize-autoloader --no-plugins + php bin/template_jp.php + rm -rf app/Plugin/* + echo 'getEntityManager()->detach($event->getEntity()); + } + }' > src/Eccube/Doctrine/EventSubscriber/CancelDeletionEventSubscriber.php + sed -i.bak -e 's_$fs->remove_// $fs->remove_' src/Eccube/Controller/Admin/Content/PageController.php + rm -f app/config/eccube/packages/dev/web_profiler.yaml + sed -i -e "s/eccube_login_throttling_max_attempts: 5/eccube_login_throttling_max_attempts: 1024/" -e "s/eccube_login_throttling_interval: '30 minutes'/eccube_login_throttling_interval: '1 minutes'/" app/config/eccube/packages/eccube.yaml + rm -f app/config/eccube/packages/prod/eccube_rate_limiter.yaml + sed -i -e 's/30 min/1 min/g' app/config/eccube/packages/eccube_rate_limiter.yaml + bin/console cache:clear + bin/console debug:container --parameter eccube_login_throttling_max_attempts + bin/console debug:container --parameter eccube_login_throttling_interval + bin/console debug:config eccube + bin/console doctrine:database:create --env=dev + bin/console doctrine:schema:create --env=dev + bin/console eccube:fixtures:load --env=dev + chmod -R 777 html + + - name: Setup Plugins + shell: bash + env: + APP_ENV: 'prod' + DATABASE_URL: postgres://postgres:password@127.0.0.1:5432/eccube_db + DATABASE_SERVER_VERSION: 14 + PGPASSWORD: 'password' + run: | + bin/console eccube:composer:require "ec-cube/recommend42" + bin/console eccube:composer:require "ec-cube/coupon42" + bin/console eccube:composer:require "ec-cube/mailmagazine42" + bin/console eccube:composer:require "ec-cube/salesreport42" + bin/console eccube:composer:require "ec-cube/relatedproduct42" + bin/console eccube:composer:require "ec-cube/securitychecker42" + bin/console eccube:composer:require "ec-cube/productreview42" + bin/console eccube:composer:require "ec-cube/api42" + bin/console eccube:composer:require "ec-cube/sitekit42" + psql eccube_db -h 127.0.0.1 -U postgres -c "select id,name,code,0 as enabled,version,source,0 as initialized,'2021-08-13 00:00:00' as create_date,'2021-08-13 00:00:00' as update_date,discriminator_type from dtb_plugin;" -A -F, --pset footer > src/Eccube/Resource/doctrine/import_csv/ja/dtb_plugin.csv + + - name: "EC-CUBE: package" + shell: bash + working-directory: ../ + run: ${{ github.event.repository.name }}/package.sh + + - name: "EC-CUBE: build" + shell: bash + run: docker build -t ec-cube . + + - name: "Codeception: prepare" + shell: bash + run: | + echo "APP_ENV=codeception" > .env + export DISPLAY=:99 + chromedriver --url-base=/wd/hub & + echo ">>> Started chrome-driver" + sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & + echo ">>> Started xvfb" + composer install --no-scripts --no-interaction --optimize-autoloader + sudo echo "127.0.0.1 ${{ inputs.vaddy-fqdn }}" | sudo tee -a /etc/hosts + echo "modules: + config: + WebDriver: + host: '127.0.0.1' + port: 9515 + url: "http://${{ inputs.vaddy-fqdn }}:8080" + browser: chrome + capabilities: + chromeOptions: + args: ["--headless", "--disable-gpu"] + prefs: + download.default_directory: '%PWD%/codeception/_support/_downloads' + MailCatcher: + url: '172.17.0.1' + port: 1080" > codeception/_envs/local.yml diff --git a/.github/workflows/vaddy/scan/action.yml b/.github/workflows/vaddy/scan/action.yml new file mode 100644 index 00000000000..179eae0da04 --- /dev/null +++ b/.github/workflows/vaddy/scan/action.yml @@ -0,0 +1,97 @@ +name: 'Run VAddy scan' +on: + workflow_call: + +inputs: + command: + description: 'codeception command' + required: true + vaddy-verification-code: + description: 'VAddy verification code' + required: true + type: string + vaddy-proxy: + description: 'VAddy proxy' + required: true + type: string + vaddy-proxy-port: + description: 'VAddy proxy port number' + required: true + type: string + vaddy-fqdn: + description: 'VAddy FQDN' + required: true + type: string + +runs: + using: "composite" + steps: + - name: "EC-CUBE: run" + shell: bash + run: | + docker run \ + -e APP_ENV=prod \ + -e APP_DEBUG=0 \ + -e DATABASE_URL="postgres://postgres:password@172.17.0.1:5432/eccube_db" \ + -e DATABASE_SERVER_VERSION=14 \ + -e MAILER_URL="smtp://172.17.0.1:1025" \ + -v ${PWD}/html:/tmp/html \ + --rm -d -p 8080:80 --name eccube ec-cube + until [ $(docker inspect -f {{.State.Health.Status}} eccube) != "starting" ]; do + echo -n . + sleep 10; + done; + docker cp ../eccube.tar.gz eccube:/tmp/ + docker exec -w /tmp eccube bash -c "rm -rf /var/www/html; tar xf /tmp/eccube.tar.gz -C /var/www; mv /var/www/ec-cube /var/www/html; chown -R www-data: /var/www/html" + docker exec eccube bash -c "rm -rf /var/www/html/html; ln -s /tmp/html /var/www/html/html;" + docker exec -u www-data eccube bin/console eccube:install -n + docker exec -u www-data -e VADDY_VERIFICATION_CODE=${{ inputs.vaddy-verification-code }} eccube bash -c 'echo ${VADDY_VERIFICATION_CODE} > vaddy-${VADDY_VERIFICATION_CODE}.html' + docker exec -u www-data eccube bash -c 'for code in Api42 Coupon42 MailMagazine42 ProductReview42 Recommend42 RelatedProduct42 SalesReport42 Securitychecker42 SiteKit42; do bin/console eccube:plugin:enable --code $code; done' + + - name: "VAddy: connect" + shell: bash + working-directory: /tmp/go-vaddy-master/privatenet + run: ./vaddy_privatenet.sh connect + + - name: "VAddy: crawl" + shell: bash + env: + APP_ENV: "codeception" + DATABASE_URL: "postgres://postgres:password@127.0.0.1:5432/eccube_db" + DATABASE_SERVER_VERSION: "14" + MAILER_URL: "smtp://127.0.0.1:1025" + BASE_URL: "http://${{ inputs.vaddy-fqdn }}:8080" + VADDY_PROXY: "${{ inputs.vaddy-proxy }}" + VADDY_PROXY_PORT: "${{ inputs.vaddy-proxy-port }}" + VADDY_VERIFICATION_CODE: "${{ inputs.vaddy-verification-code }}" + VADDY_CRAWL: "${{ inputs.command }}" + run: | + vendor/bin/codecept -vvv run acceptance --env chrome,local,vaddy VaddyCest:begin + vendor/bin/codecept -vvv run -g vaddy acceptance --env chrome,local,vaddy --html report.html ${{ inputs.command }} || true + vendor/bin/codecept -vvv run acceptance --env chrome,local,vaddy VaddyCest:commit + + - name: Upload report + uses: actions/upload-artifact@v2 + with: + name: crawl-reports + path: codeception/_output/**/* + + - name: "VAddy: disconnect" + shell: bash + if: ${{ always() }} + working-directory: /tmp/go-vaddy-master/privatenet + run: ./vaddy_privatenet.sh disconnect + + - name: "VAddy: scan" + shell: bash + continue-on-error: true + env: + VADDY_CRAWL: "${{ inputs.command }}" + working-directory: /tmp/go-vaddy-master/privatenet + run: ./vaddy_privatenet.sh scan + + - name: "EC-CUBE: stop" + shell: bash + if: ${{ always() }} + continue-on-error: true + run: docker rm -f -v eccube \ No newline at end of file diff --git a/.github/workflows/vaddyscan.yml b/.github/workflows/vaddyscan.yml new file mode 100644 index 00000000000..a722c4d4a75 --- /dev/null +++ b/.github/workflows/vaddyscan.yml @@ -0,0 +1,194 @@ +name: VAddy-test +on: push +jobs: + vaddy: + name: VAddy + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + include: +# - vaddy_project: 'ADMIN01' +# command1: 'EA03ProductCest' +# command2: 'EA05CustomerCest' +# command3: 'EA04OrderCest:order_個別出荷済みステータス変更' +# command4: 'EA04OrderCest:order_納品書の一括出力' +# command5: 'EA04OrderCest:order_受注メール通知' +# command6: 'EA04OrderCest:order_受注削除' +# command7: 'EA04OrderCest:order_受注CSVダウンロード' +# command8: 'EA04OrderCest:order_受注登録' +# command9: 'EA06ContentsManagementCest' +# - vaddy_project: 'ADMIN02' +# command1: 'EA04OrderCest:order_受注編集' +# - vaddy_project: 'FRONT' +# command1: ' -x delivery -x basicsetting -x taxrule -x mailsetting -x csvsetting -x orderstatus -x pluginauth EA07BasicinfoCest' +# command2: '-x paymentmethod -x basicsetting -x taxrule -x mailsetting -x csvsetting -x orderstatus -x pluginauth EA07BasicinfoCest' +# command3: '-x paymentmethod -x delivery -x mailsetting -x csvsetting -x orderstatus EA07BasicinfoCest' +# - vaddy_project: 'ADMIN01' +# command1: '-x paymentmethod -x delivery -x basicsetting -x taxrule -x orderstatus -x pluginauth EA07BasicinfoCest' +# command2: '-x paymentmethod -x delivery -x basicsetting -x taxrule -x mailsetting -x csvsetting -x pluginauth EA07BasicinfoCest' +# - vaddy_project: 'ADMIN02' // 時間オーバー +# command1: '-x admin -x plugin -x order' +# - vaddy_project: 'FRONT' +# command1: 'EF03OrderCest:order_ログインユーザ購入複数配送' +# command2: 'EF03OrderCest:order_ログインしてカートをマージ' +# command3: 'EF03OrderCest:order_カート数量減らす' +# - vaddy_project: 'ADMIN01' +# command1: 'EF03OrderCest:order_カート数量増やす' +# command2: 'EF03OrderCest:order_ゲスト購入情報変更' +# - vaddy_project: 'ADMIN02' +# command1: '-x admin -x front' +# command2: 'EA09ShippingCest' +# - vaddy_project: 'FRONT' +# command1: 'EF03OrderCest:order_ログインユーザ購入複数配送' +# command2: 'EF03OrderCest:order_ログインしてカートをマージ' +# command3: 'EF03OrderCest:order_カート数量減らす' +# - vaddy_project: 'ADMIN01' +# command1: 'EF03OrderCest:order_カート数量増やす' +# command2: 'EF03OrderCest:order_ゲスト購入情報変更' +# - vaddy_project: 'ADMIN02' +# command1: 'EA08SysteminfoCest' +# - vaddy_project: 'FRONT' +# command1: 'EF03OrderCest:order_ゲスト購入' +# - vaddy_project: 'ADMIN01' +# command1: 'EF01TopCest:topページ_初期表示' +# command2: 'EF02ProductCest:product_商品一覧ソート' +# command3: 'EF02ProductCest:product_商品詳細カート4' +# - vaddy_project: 'ADMIN02' +# command1: 'EF04CustomerCest:customer_会員登録正常' +# command2: 'EF04CustomerCest:customer_会員登録利用規約' +# - vaddy_project: 'FRONT' +# command1: 'EF05MypageCest:mypage_ご注文履歴詳細' +# command2: 'EF05MypageCest:mypage_お気に入り一覧' +# command3: 'EF05MypageCest:mypage_会員情報編集' +# command4: 'EF05MypageCest:mypage_お届け先編集作成変更' +# command5: 'EF05MypageCest:mypage_お届け先編集削除' +# command6: 'EF05MypageCest:mypage_退会手続き未実施' + - vaddy_project: 'ADMIN01' + command1: 'EF06OtherCest:other_パスワード再発行' + command2: 'EF06OtherCest:other_ログアウト' + command3: 'EF06OtherCest:other_当サイトについて' + command4: 'EF06OtherCest:other_プライバシーポリシー' + command5: 'EF06OtherCest:other_特定商取引法に基づく表記' + command6: 'EF06OtherCest:other_お問い合わせ1' + services: + postgres: + image: postgres:14 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password + ports: + - 5432:5432 + # needed because the postgres container does not provide a healthcheck + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + mailcatcher: + image: schickling/mailcatcher + ports: + - 1080:1080 + - 1025:1025 + steps: + - name: Checkout + uses: actions/checkout@master + + - name: "Prepare" + uses: ./.github/workflows/vaddy/prepare + with: + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + vaddy-user: "${{ secrets.VADDY_USER }}" + vaddy-auth-key: "${{ secrets.VADDY_AUTH_KEY }}" + + - name: "Scan 1" + if: ${{ matrix.command1 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command1 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + + - name: "Scan 2" + if: ${{ matrix.command2 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command2 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + + - name: "Scan 3" + if: ${{ matrix.command3 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command3 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + + - name: "Scan 4" + if: ${{ matrix.command4 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command4 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + + - name: "Scan 5" + if: ${{ matrix.command5 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command5 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + + - name: "Scan 6" + if: ${{ matrix.command6 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command6 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + + - name: "Scan 7" + if: ${{ matrix.command7 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command7 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + + - name: "Scan 8" + if: ${{ matrix.command8 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command8 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + + - name: "Scan 9" + if: ${{ matrix.command9 != '' }} + uses: ./.github/workflows/vaddy/scan + with: + command: "${{ matrix.command9 }}" + vaddy-verification-code: "${{ secrets[format('{0}{1}', 'VADDY_VERIFICATION_CODE_', matrix.vaddy_project)] }}" + vaddy-proxy: "${{ secrets.VADDY_PROXY }}" + vaddy-proxy-port: "${{ secrets.VADDY_PROXY_PORT }}" + vaddy-fqdn: "${{ secrets[format('{0}{1}', 'VADDY_FQDN_', matrix.vaddy_project)] }}" + +# - name: VAddy private net logs +# if: ${{ always() }} +# working-directory: /tmp/go-vaddy-master/privatenet +# run: cat vaddy/*.txt diff --git a/codeception/acceptance/EF03OrderCest.php b/codeception/acceptance/EF03OrderCest.php index 41e8d27b34f..b2952fd2943 100644 --- a/codeception/acceptance/EF03OrderCest.php +++ b/codeception/acceptance/EF03OrderCest.php @@ -345,7 +345,7 @@ public function order_ゲスト購入情報変更(AcceptanceTester $I) /** * @see https://github.com/EC-CUBE/ec-cube/pull/3133 - * @vaddy + * @group vaddy */ public function order_ログインしてカートをマージ(AcceptanceTester $I) { diff --git a/codeception/acceptance/EF05MypageCest.php b/codeception/acceptance/EF05MypageCest.php index 71732a22bf2..375e57d731b 100644 --- a/codeception/acceptance/EF05MypageCest.php +++ b/codeception/acceptance/EF05MypageCest.php @@ -252,7 +252,7 @@ public function mypage_お届け先編集作成変更(AcceptanceTester $I) /** * @group excludeCoverage - * @vaddy + * @group vaddy */ public function mypage_お届け先編集削除(AcceptanceTester $I) {