name: Deploy to WordPress on: push: branches: [ main ] permissions: contents: write # Cancel previous deploys if a new push arrives while one is running. concurrency: group: deploy-production cancel-in-progress: true jobs: # -- Run tests first -- test: name: Pre-deploy tests uses: ./.github/workflows/ci.yml # -- Validate deployment readiness -- validate: name: Validate deployment runs-on: ubuntu-latest needs: test steps: - uses: actions/checkout@v4 with: ref: main - name: Verify required files exist run: | echo "Checking for required plugin files..." required_files=( "peptide-search-ai.php" "includes/" "assets/" "readme.txt" ) for file in "${required_files[@]}"; do if [ ! -e "$file" ]; then echo "❌ Missing required file: $file" exit 1 fi echo "βœ“ Found: $file" done - name: Verify PSA_VERSION constant run: | echo "Checking PSA_VERSION constant..." if grep -q "define( 'PSA_VERSION'" peptide-search-ai.php; then version=$(grep "define( 'PSA_VERSION'" peptide-search-ai.php | sed "s/.*'|\([5ujVκK±qΫ }[]i\υiW-ΝΡ(ν%θόυ1 %9Υ aΩ5ΜΕPΑ½E΅YQ9₯E9Y%© ΐΝ9YQ8¨½pΔΌˆ€(€€€€€€€€€€€•‘Ό€‹ŠrLAM}YIM%=8™½ΥΉθ€‘Ω•ΙΝ₯½Έˆ(€€€€€€€€€•±Ν”(€€€€€€€€€€€•‘Ό€‹Šv0AM}YIM%=8½ΉΝΡ…ΉΠΉ½Π™½ΥΉ₯ΈΑ•ΑΡ₯‘”΅Ν•…ɍ ΅…€ΉΑ‘ΐˆ(€€€€€€€€€€€•α₯Π€Δ(€€€€€€€€€™€((€€€€€€΄Ή…΅”θM•ЁΥΐA!@(€€€€€€€ΥΝ•ΜθΝ‘₯Ω…΅΅…Ρ‘ΥΘ½Ν•ΡΥΐ΅Α‘ΑΨΘ(€€€€€€€έ₯Ρ θ(€€€€€€€€€Α‘ΐ΅Ω•ΙΝ₯½Έθ€œΰΈΔœ((€€€€€€΄Ή…΅”θY…±₯‘…Ρ”A!@ΝεΉΡ…ΰ½Έ…±°™₯±•Μ(€€€€€€€ΙΥΈθπ(€€€€€€€€€•‘Ό€‰Y…±₯‘…Ρ₯ΉœA!@ΝεΉΡ…ΰΈΈΈˆ(€€€€€€€€€™₯Ή€Έ€΅Ή…΅”€œ¨ΉΑ‘ΐœ€΅Ή½Π€΅Α…Ρ €œΈ½Ω•Ή‘½ΘΌ¨œ€΅Ή½Π€΅Α…Ρ €œΈ½Ή½‘•}΅½‘Υ±•ΜΌ¨œ€΅ΑΙ₯ΉΠΐπp(€€€€€€€€€α…ɝ̀΄ΐ€΅ΈΔΑ‘ΐ€΅°€ψ€½‘•Ψ½ΉΥ±°€˜˜•‘Ό€‹ŠrL±°A!@™₯±•́…Ι”Ω…±₯ˆ((€€€€€€΄Ή…΅”θ ‘•¬™½ΘΝ•ΉΝ₯Ρ₯Ω”™₯±•Μ(€€€€€€€ΙΥΈθπ(€€€€€€€€€•‘Ό€‰M…ΉΉ₯Ήœ™½ΘΝ•ΉΝ₯Ρ₯Ω”™₯±•ΜΈΈΈˆ(€€€€€€€€€™½ΥΉ‘}Ν•ΉΝ₯Ρ₯Ω”τΐ((€€€€€€€€€Ν•ΉΝ₯Ρ₯Ω•}Α…ΡΡ•ΙΉΜτ (€€€€€€€€€€€€‰pΉ•ΉΨˆ(€€€€€€€€€€€€‰pΉ•ΉΩpΈˆ(€€€€€€€€€€€€‰Ι•‘•ΉΡ₯…±Μˆ(€€€€€€€€€€€€‰pΉ­•δˆ(€€€€€€€€€€€€‰pΉΑ•΄ˆ(€€€€€€€€€€€€‰ΑΙ₯Ω…Ρ•}­•δˆ(€€€€€€€€€€€€‰pΉΝΕ°ˆ(€€€€€€€€€€€((€€€€€€€€€™½ΘΑ…ΡΡ•ΙΈ₯Έ€ˆ‘νΝ•ΉΝ₯Ρ₯Ω•}Α…ΡΡ•ΙΉΝmuτˆμ‘Ό(€€€€€€€€€€€₯˜™₯Ή€Έ€΅Ή…΅”€ˆ‘Α…ΡΡ•ΙΈˆ€΅Ή½Π€΅Α…Ρ €œΈ½Ω•Ή‘½ΘΌ¨œ€΅Ή½Π€΅Α…Ρ €œΈΌΉ₯ΠΌ¨œ€Θψ½‘•Ψ½ΉΥ±°πΙ•ΐ€΅Δ€ΈμΡ‘•Έ(€€€€€€€€€€€€€•‘Ό€‹Šv0½ΥΉΝ•ΉΝ₯Ρ₯Ω”™₯±”΅…э‘₯ΉœΑ…Ρѕɸ耑Α…ΡΡ•ΙΈˆ(€€€€€€€€€€€€€™₯Ή€Έ€΅Ή…΅”€ˆ‘Α…ΡΡ•ΙΈˆ€΅Ή½Π€΅Α…Ρ €œΈ½Ω•Ή‘½ΘΌ¨œ€΅Ή½Π€΅Α…Ρ €œΈΌΉ₯ΠΌ¨œ€Θψ½‘•Ψ½ΉΥ±°(€€€€€€€€€€€€€™½ΥΉ‘}Ν•ΉΝ₯Ρ₯Ω”τΔ(€€€€€€€€€€€™€(€€€€€€€€€‘½Ή”((€€€€€€€€€₯˜l€‘™½ΥΉ‘}Ν•ΉΝ₯Ρ₯Ω”€΅•ĀātμΡ‘•Έ(€€€€€€€€€€€•α₯Π€Δ(€€€€€€€€€™€(€€€€€€€€€•‘Ό€‹ŠrL9ΌΝ•ΉΝ₯Ρ₯Ω”™₯±•́‘•Ρ•Ρ•ˆ((€€Œ€΄΄AΥΝ ±•…ΈΑ±Υ₯Έ™₯±•́ѼΡ‘”‘•Α±½δ‰Ι…Ή €΄΄(€Ν幌΅‘•Α±½δ΅‰Ι…Ή θ(€€€Ή…΅”θM幌‘•Α±½δ‰Ι…Ή (€€€ΙΥΉΜ΅½ΈθΥ‰ΥΉΡΤ΅±…Ρ•ΝΠ(€€€Ή••‘ΜθmΡ•ΝΠ°Ω…±₯‘…Ρ•t(€€€•ΉΩ₯Ι½Ή΅•ΉΠθΑΙ½‘ՍΡ₯½Έ(€€€ΝΡ•ΑΜθ(€€€€€€΄ΥΝ•Μ聅Ρ₯½ΉΜ½‘•­½ΥΡΨΠ(€€€€€€€έ₯Ρ θ(€€€€€€€€€™•э ΅‘•ΑΡ θ€ΐ((€€€€€€΄Ή…΅”θM幌‘•Α±½δ‰Ι…Ή (€€€€€€€ΙΥΈθπ(€€€€€€€€€₯Ё½Ή™₯œΥΝ•ΘΉΉ…΅”€‰₯ёՈ΅…Ρ₯½ΉΝm‰½Ρtˆ(€€€€€€€€€₯Ё½Ή™₯œΥΝ•ΘΉ•΅…₯°€‰₯ёՈ΅…Ρ₯½ΉΝm‰½ΡuΥΝ•ΙΜΉΉ½Ι•Α±δΉ₯ёՈΉ½΄ˆ((€€€€€€€€€€Œ•э Ρ‘”Ι•΅½Ρ”‘•Α±½δ‰Ι…Ή €‘΅…䁹½Π•α₯ΝЁ½Έ™₯ΙΝЁΙΥΈ€Έ(€€€€€€€€€₯Ё™•э ½Ι₯₯Έ‘•Α±½δι‘•Α±½δ€Θψ½‘•Ψ½ΉΥ±°ρπΡΙΥ”((€€€€€€€€€€Œ%˜‘•Α±½δ‰Ι…Ή •α₯ΝΡΜ°‘•¬₯Ё½ΥΠ쁽ё•Ιέ₯Ν”Ι•…Ρ”₯ΠΈ(€€€€€€€€€₯˜₯ЁɕءΑ…ΙΝ”€΄΅Ω•Ι₯™δ‘•Α±½δ€ψ½‘•Ψ½ΉΥ±°€Θψ˜ΔμΡ‘•Έ(€€€€€€€€€€€₯Ё‘•­½ΥЁ‘•Α±½δ(€€€€€€€€€•±Ν”(€€€€€€€€€€€₯Ё‘•­½ΥΠ€΄΅½ΙΑ‘…Έ‘•Α±½δ(€€€€€€€€€€€₯Ёɴ€΅Ι˜€΄΅…‘•€Έ€ψ€½‘•Ψ½ΉΥ±°€Θψ˜ΔρπΡΙΥ”(€€€€€€€€€™€((€€€€€€€€€€ŒI•΅½Ω”…±°ΡΙ…­•™₯±•́ͼέ”ΝΡ…ΙЁ±•…Έ•… Ρ₯΅”Έ(€€€€€€€€€₯Ёɴ€΅Ι˜€Έ€ψ€½‘•Ψ½ΉΥ±°€Θψ˜ΔρπΡΙΥ”((€€€€€€€€€€Œ ‘•­½ΥЁ½Ή±δΡ‘”Α±Υ₯ΈΙΥΉΡ₯΅”™₯±•́™Ι½΄΅…₯ΈΈ(€€€€€€€€€₯Ё‘•­½ΥЁ΅…₯Έ€΄΄p(€€€€€€€€€€€…ΝΝ•ΡΜΌp(€€€€€€€€€€€₯Ή±Υ‘•ΜΌp(€€€€€€€€€€€Α•ΑΡ₯‘”΅Ν•…ɍ ΅…€ΉΑ‘ΐp(€€€€€€€€€€€Ι•…‘΅”ΉΡαΠ((€€€€€€€€€€Œ ½΅΅₯Ё½Ή±δ₯˜Ρ‘•Ι”…Ι”…ΡΥ…°‘…Ή•ΜΈ(€€€€€€€€€₯Ё…‘€΅(€€€€€€€€€₯˜₯Ё‘₯™˜΅₯Ή‘•ΰ€΄΅ΕΥ₯•Ё!€΄΄€Θψ½‘•Ψ½ΉΥ±°μΡ‘•Έ(€€€€€€€€€€€•‘Ό€‰9Ό‘…Ή•́Ѽ‘•Α±½δΈˆ(€€€€€€€€€•±Ν”(€€€€€€€€€€€₯Ё½΅΅₯Π€΅΄€‰•Α±½δ€‘ν%Q!U }M!θθέτ™Ι½΄΅…₯Έˆ(€€€€€€€€€™€((€€€€€€€€€€Œ9½Ι΅…°ΑΥΝ €‘™…ΝΠ΅™½Ι݅ɐ€Έ(€€€€€€€€€₯ЁΑΥΝ ½Ι₯₯Έ‘•Α±½δ((€€Œ€΄΄•Α±½δΡΌ!½ΝΡ₯Ή•ȁΩ₯„MM €΄΄(€‘•Α±½δθ(€€€Ή…΅”聕Α±½δΡΌ!½ΝΡ₯Ή•Θ(€€€ΙΥΉΜ΅½ΈθΥ‰ΥΉΡΤ΅±…Ρ•ΝΠ(€€€Ή••‘ΜθΝ幌΅‘•Α±½δ΅‰Ι…Ή (€€€•ΉΩ₯Ι½Ή΅•ΉΠθΑΙ½‘ՍΡ₯½Έ(€€€ΝΡ•ΑΜθ(€€€€€€΄Ή…΅”θAΥ±°‘•Α±½δ‰Ι…Ή ½Έ!½ΝΡ₯Ή•Θ(€€€€€€€ΥΝ•Μ聅ΑΑ±•‰½δ½ΝΝ ΅…Ρ₯½ΉΨΔ(€€€€€€€έ₯Ρ θ(€€€€€€€€€‘½ΝΠ耑νμΝ•Ι•ΡΜΉMM!}!=MPυτ(€€€€€€€€€ΥΝ•ΙΉ…΅”耑νμΝ•Ι•ΡΜΉMM!}UMI95υτ(€€€€€€€€€­•δ耑νμΝ•Ι•ΡΜΉMM!}AI%YQ}-dυτ(€€€€€€€€€Α½ΙΠ耑νμΝ•Ι•ΡΜΉMM!}A=IPυτ(€€€€€€€€€ΝΙ₯ΑΡ}ΝΡ½ΐθΡΙΥ”(€€€€€€€€€•ΉΩΜθA1=e}-d(€€€€€€€€€ΝΙ₯ΑΠθπ(€€€€€€€€€€€€ŒΉΝΥΙ”₯Ρ!Ո‘½ΝЁ­•δ₯́ΡΙΥΝΡ•€‘½Ή”΅Ρ₯΅”Ν•ΡΥΐ€Έ(€€€€€€€€€€€΅­‘₯Θ€΅ΐψΌΉΝΝ (€€€€€€€€€€€ΝΝ ΅­•ε͍…Έ₯ёՈΉ½΄€ψψψΌΉΝΝ ½­Ή½έΉ}‘½ΝΡΜ€Θψ½‘•Ψ½ΉΥ±°((€€€€€€€€€€€€Œ%ΉΝΡ…±°‘•Α±½δ­•δΝΌ!½ΝΡ₯Ή•ȁ…ΈΑΥ±°™Ι½΄Ρ‘”ΑΙ₯Ω…Ρ”Ι•ΑΌΈ(€€€€€€€€€€€₯˜l€„€΅˜ψΌΉΝΝ ½‘•Α±½ε}­•δtμΡ‘•Έ(€€€€€€€€€€€€€•‘Ό€ˆ‘A1=e}-dˆ€ψψΌΉΝΝ ½‘•Α±½ε}­•δ(€€€€€€€€€€€€€‘΅½€ΨΐΐψΌΉΝΝ ½‘•Α±½ε}­•δ(€€€€€€€€€€€™€((€€€€€€€€€€€€Œ ½Ή™₯ΥΙ”MM ΡΌΥΝ”Ρ‘”‘•Α±½δ­•䁙½Θ₯ёՈΉ½΄Έ(€€€€€€€€€€€₯˜€„Ι•ΐ€΅Δ€‰₯ёՈΉ½΄ˆψΌΉΝΝ ½½Ή™₯œ€Θψ½‘•Ψ½ΉΥ±°μΡ‘•Έ(€€€€€€€€€€€€€…Π€ψψψΌΉΝΝ ½½Ή™₯œ€ππMM!=œ(€€€€€€€€€€€!½ΝЁ₯ёՈΉ½΄(€€€€€€€€€€€€€%‘•ΉΡ₯Ρε₯±”ψΌΉΝΝ ½‘•Α±½ε}­•δ(€€€€€€€€€€€€€MΡΙ₯Ρ!½ΝΡ-•ε ‘•­₯ΉœΉΌ(€€€€€€€€€€€MM!=(€€€€€€€€€€€€€‘΅½€ΨΐΐψΌΉΝΝ ½½Ή™₯œ(€€€€€€€€€€€™€((€€€€€€€€€€€A1U%9}%Hτˆ‘!=5½‘½΅…₯ΉΜ½Α•ΑΡ₯‘•Ι•ΑΌΉ½΄½ΑΥ‰±₯}‘Ρ΅°½έΐ΅½ΉΡ•ΉΠ½Α±Υ₯ΉΜ½Α•ΑΡ₯‘”΅Ν•…ɍ ΅…€ˆ(€€€€€€€€€€€IA=}UI0τ‰₯ѝ₯ёՈΉ½΄ιΑ•ΑΡ₯‘•Ι•ΑΌ½Α•ΑΡ₯‘”΅Ν•…ɍ ΅…€Ή₯Ј((€€€€€€€€€€€₯˜l€΅€ˆ‘A1U%9}%HΌΉ₯ЈtμΡ‘•Έ(€€€€€€€€€€€€€€Œα₯ΝΡ₯Ήœ±½Ή”€΄΄©ΥΝЁΑΥ±°±…Ρ•ΝΠΈ(€€€€€€€€€€€€€€ˆ‘A1U%9}%Hˆ(€€€€€€€€€€€€€₯Ё™•э ½Ι₯₯Έ‘•Α±½δ(€€€€€€€€€€€€€₯Ёɕ͕Ѐ΄΅‘…ɐ½Ι₯₯Έ½‘•Α±½δ(€€€€€€€€€€€•±Ν”(€€€€€€€€€€€€€€Œ₯ΙΝЁ‘•Α±½δ€΄΄±½Ή”Ρ‘”‘•Α±½δ‰Ι…Ή Έ(€€€€€€€€€€€€€Ι΄€΅Ι˜€ˆ‘A1U%9}%Hˆ(€€€€€€€€€€€€€₯Ё±½Ή”€΅ˆ‘•Α±½δ€ˆ‘IA=}UI0ˆ€ˆ‘A1U%9}%Hˆ(€€€€€€€€€€€™€((€€€€€€€€€€€•‘Ό€‰•Α±½ε•ΡΌ€‘A1U%9}%Hˆ(€€€€€€€€€€€±Μ€΅±„€ˆ‘A1U%9}%Hˆ(€€€€€€€•ΉΨθ(€€€€€€€€€A1=e}-d耑νμΝ•Ι•ΡΜΉA1=e}-dυτ((€€€€€€΄Ή…΅”θY•Ι₯™δ‘•Α±½ε΅•ΉΠ½ΈΝ•ΙΩ•Θ(€€€€€€€ΥΝ•Μ聅ΑΑ±•‰½δ½ΝΝ ΅…Ρ₯½ΉΨΔ(€€€€€€€έ₯Ρ θ(€€€€€€€€€‘½ΝΠ耑νμΝ•Ι•ΡΜΉMM!}!=MPυτ(€€€€€€€€€ΥΝ•ΙΉ…΅”耑νμΝ•Ι•ΡΜΉMM!}UMI95υτ(€€€€€€€€€­•δ耑νμΝ•Ι•ΡΜΉMM!}AI%YQ}-dυτ(€€€€€€€€€Α½ΙΠ耑νμΝ•Ι•ΡΜΉMM!}A=IPυτ(€€€€€€€€€ΝΙ₯ΑΡ}ΝΡ½ΐθΡΙΥ”(€€€€€€€€€ΝΙ₯ΑΠθπ(€€€€€€€€€€€A1U%9}%Hτˆ‘!=5½‘½΅…₯ΉΜ½Α•ΑΡ₯‘•Ι•ΑΌΉ½΄½ΑΥ‰±₯}‘Ρ΅°½έΐ΅½ΉΡ•ΉΠ½Α±Υ₯ΉΜ½Α•ΑΡ₯‘”΅Ν•…ɍ ΅…€ˆ((€€€€€€€€€€€•‘Ό€‰Y•Ι₯™ε₯Ήœ‘•Α±½ε΅•ΉΠΈΈΈˆ(€€€€€€€€€€€₯˜l€„€΅€ˆ‘A1U%9}%HˆtμΡ‘•Έ(€€€€€€€€€€€€€•‘Ό€‹Šv0A±Υ₯Έ‘₯Ι•Ρ½Ι䁹½Π™½ΥΉ…Π€‘A1U%9}%Hˆ(€€€€€€€€€€€€€•α₯Π€Δ(€€€€€€€€€€€™€((€€€€€€€€€€€€Œ ‘•¬™½ΘΙ•ΕΥ₯Ι•™₯±•Μ(€€€€€€€€€€€Ι•ΕΥ₯Ι•‘}™₯±•Μτ (€€€€€€€€€€€€€€‰Α•ΑΡ₯‘”΅Ν•…ɍ ΅…€ΉΑ‘ΐˆ(€€€€€€€€€€€€€€‰₯Ή±Υ‘•Μˆ(€€€€€€€€€€€€€€‰…ΝΝ•Ρ̈(€€€€€€€€€€€€€€‰Ι•…‘΅”ΉΡαЈ(€€€€€€€€€€€€€((€€€€€€€€€€€™½Θ™₯±”₯Έ€ˆ‘νΙ•ΕΥ₯Ι•‘}™₯±•Νmuτˆμ‘Ό(€€€€€€€€€€€€€₯˜l€„€΅”€ˆ‘A1U%9}%HΌ‘™₯±”ˆtμΡ‘•Έ(€€€€€€€€€€€€€€€•‘Ό€‹Šv05₯ΝΝ₯Ήœ™₯±”耑™₯±”ˆ(€€€€€€€€€€€€€€€•α₯Π€Δ(€€€€€€€€€€€€€™€(€€€€€€€€€€€€€•‘Ό€‹ŠrL½ΥΉθ€‘™₯±”ˆ(€€€€€€€€€€€‘½Ή”((€€€€€€€€€€€€ŒαΡΙ…Π…Ή±½œ‘•Α±½ε•Ω•ΙΝ₯½Έ(€€€€€€€€€€€₯˜l€΅˜€ˆ‘A1U%9}%H½Α•ΑΡ₯‘”΅Ν•…ɍ ΅…€ΉΑ‘ΐˆtμΡ‘•Έ(€€€€€€€€€€€€€Ω•ΙΝ₯½Έτ‘Ι•ΐ€‰Y•ΙΝ₯½Έθˆ€ˆ‘A1U%9}%H½Α•ΑΡ₯‘”΅Ν•…ɍ ΅…€ΉΑ‘ΐˆπ‘•…€΄ΔπΝ•€ΜΌΈ©Y•ΙΝ₯½Έθ€¨ΌΌμΜΌ€¨Έ¨ΌΌœ€(€€€€€€€€€€€€€•‘Ό€‹ŠrL•Α±½ε•Ω•ΙΝ₯½Έθ€‘Ω•ΙΝ₯½Έˆ(€€€€€€€€€€€•±Ν”(€€€€€€€€€€€€€•‘Ό€‹Šv0A±Υ₯Έ™₯±”Ή½Π™½ΥΉˆ(€€€€€€€€€€€€€•α₯Π€Δ(€€€€€€€€€€€™€((€€€€€€€€€€€•‘Ό€‹ŠrL•Α±½ε΅•ΉΠΩ•Ι₯™₯…Ρ₯½ΈΝՍ•ΝΝ™Υ°ˆ((€€€€€€΄Ή…΅”聕Α±½δΝΥ΅΅…Ιδ(€€€€€€€ΙΥΈθπ(€€€€€€€€€•‘Ό€ˆŒŒ•Α±½ε΅•ΉΠ ½΅Α±•Ρ”ˆ€ψψ€‘%Q!U }MQA}MU55Id(€€€€€€€€€•‘Ό€ˆˆ€ψψ€‘%Q!U }MQA}MU55Id(€€€€€€€€€•‘Ό€ˆ΄€¨© Ι…Ή θ¨¨q€‘ν쁝₯ёՈΉΙ•™}Ή…΅”υυq€ˆ€ψψ€‘%Q!U }MQA}MU55Id(€€€€€€€€€•‘Ό€ˆ΄€¨© ½΅΅₯Π訨q€‘ν%Q!U }M!θθέυq€ˆ€ψψ€‘%Q!U }MQA}MU55Id(€€€€€€€€€•‘Ό€ˆ΄€¨©5•Ρ‘½θ¨¨MM ‘₯Ι•Π‘•Α±½δ€‘₯ЁΑΥ±°½Έ!½ΝΡ₯Ή•Θ€ˆ€ψψ€‘%Q!U }MQA}MU55Id(€€€€€€€€€•‘Ό€ˆ΄€¨©•Α±½ε•ΡΌθ¨¨Α•ΑΡ₯‘•Ι•ΑΌΉ½΄ˆ€ψψ€‘%Q!U }MQA}MU55Id(