diff --git a/.env.local b/.env.local index 0750ba860..45d5d65dd 100644 --- a/.env.local +++ b/.env.local @@ -1,16 +1,19 @@ # nx -NX_CLOUD_AUTH_TOKEN=MTIzMmRkZjctM2RjOS00OTRkLWE0ODgtYjIyNzk1ZjlkZTFmfHJlYWQtd3JpdGU= -NX_CACHE_DIRECTORY=/tmp/nx-cache +NX_CACHE_DIRECTORY=/tmp/cache +NX_VERCEL_REMOTE_CACHE_TOKEN=8HfZAvj1ZCUEYLuNISczuuF2 +NX_VERCEL_REMOTE_CACHE_TEAM=team_cNOd6z2HTsiaB0cibAjaQSIM # hasura -HASURA_VERSION=v2.27.0 +HASURA_VERSION=v2.35.0 HASURA_GRAPHQL_SERVER_PORT=8080 HASURA_GRAPHQL_ADMIN_SECRET=password HASURA_CONSOLE_PORT=9695 HASURA_GRAPHQL_DATABASE_URL=postgres://postgres:password@db:5432/postgres HYGRAPH_CMS_WEBHOOK_READ_URL=https://eu-central-1-shared-euc1-02.cdn.hygraph.com/content/cliyf1fte05rf01um257o2lim/master HYGRAPH_CMS_READ_TOKEN=Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImdjbXMtbWFpbi1wcm9kdWN0aW9uIn0.eyJ2ZXJzaW9uIjozLCJpYXQiOjE2ODczNDQzODgsImF1ZCI6WyJodHRwczovL2FwaS1ldS1jZW50cmFsLTEtc2hhcmVkLWV1YzEtMDIuaHlncmFwaC5jb20vdjIvY2xpeWYxZnRlMDVyZjAxdW0yNTdvMmxpbS9tYXN0ZXIiLCJtYW5hZ2VtZW50LW5leHQuZ3JhcGhjbXMuY29tIl0sImlzcyI6Imh0dHBzOi8vbWFuYWdlbWVudC5ncmFwaGNtcy5jb20vIiwic3ViIjoiNWI1ZjUwMWMtYjQyOC00OGY1LWI2ZGEtOTcwMWZiZDlhZjViIiwianRpIjoiY2xqNWxhNnpwMDh5ZTAxdW0wcWsyN3A1byJ9.gMlU5X5OzMHiUPB_NlsOWogmh61uNn4mdsEm83cPOAcX4hkahhJqrgva2ODjfldC7C26RbWSdxTOJH3MNn_Dc6Vl38MweNtuVivkyHirC7S_ts9apoyfr_MGyfc0UxzvGyja06ljQ78F-NlizXpFGGZKPlPwTrq0_2wY_SlY6S1YRFDMqNbmYAiQTlzzrvB0ccd0Pnjp4dQ9-gygr4SA6lBfd44w9dN31JyvX2rzMyviFb1dEh9VxWGtgw-C41JP_Fkn30SSnFt1u2lmJt848d0vxT8mzwE6hg9uPSCzcALe3AjHP95_S2BqTSGw7a43iyfDVx3UhRMCbmPWntnX95v_Ht1XB7QDEarDavYlc8cFx5g1GRxGUrh2gfeJxGki2AQIToM3uaFtuq2hJ9R70_GX5k7DOK2_P8KgzCCXozMiHIGeCtJ6O5MGjA1U3AUOSw4F78u7AL9bid8g-v8zuAMEl7zBCcErqgKdcp28ehesDXEY0vBk9p5VfWpW_jNspD6G7hMg1gKCyYa2d4px-2Ftr3OpKnu9cSKQkKWWB_UvwNKZcZy1q0fI5hzz3wcLnsMiT_qHf8JBvXJ7wzOJBR2YTd1HsWv66NOVGESacUGRqUcsgR4ZjQHbWOxMcgsk3fe5oAKR3zDMR_CCWi3Q17s9_0z155GBGm-GPb0mjgE +HYGRAPH_CMS_READ_TOKEN_SITEMAP=Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImdjbXMtbWFpbi1wcm9kdWN0aW9uIn0.eyJ2ZXJzaW9uIjozLCJpYXQiOjE3MDE3NjgyODAsImF1ZCI6WyJodHRwczovL2FwaS1ldS1jZW50cmFsLTEtc2hhcmVkLWV1YzEtMDIuaHlncmFwaC5jb20vdjIvY2xpeWYxZnRlMDVyZjAxdW0yNTdvMmxpbS9tYXN0ZXIiLCJtYW5hZ2VtZW50LW5leHQuZ3JhcGhjbXMuY29tIl0sImlzcyI6Imh0dHBzOi8vbWFuYWdlbWVudC5ncmFwaGNtcy5jb20vIiwic3ViIjoiODg4NWY2NzQtZjcxYy00YzYyLWI1ZDItZTgxMTc4NDI3YzcxIiwianRpIjoiY2xwczR3OHUxM2RlZTAxdWYxNW1sN2I4bSJ9.lFaj0cx7qUtRZNhk23NKnu-VtM7mW4MjMcU9BlW7FuRRRJzjIwfyExlRo6oCgRZy6K1W5u0NmbSnBxP3bA8T563fwITbmINhKhsnj_kZer5BKP2hfmQuefUzHAlvjMJIa2wxzI2PQni5ZjflFK3Y-SZitPwViLJo3Txrnq3ucYaujlAb4V2RG9aqmIiv4Xz1zWuGEa_MlmvkqqHQnsKzIcHslVk6v44J-eX45q9QfHpExgc23C7HmOLtIoqsq0zOIeKoxHoSFijgiL6XMI0FkNYq8OxHDob6kBo-1l64qjRunR6bdoYSXLwE52iJtYCEdUU8y2G603E4Ilsq4sNsWJInomoT9IGfQ_tgAreyGDBv5i2zH85JTj2FRIp-kvJJFgos6dxvFM47HYoRMgOyLDXRBommJE1l9h8s59X0cwLbWfIsLSbiCdRNbL7nAhpBG8un4ZDydvfNsUcsCUq7hNDYFt9x_LLPZvnhCf_mEiy6H5Y772QamWEqVlgi8FTBvvAe2KgrGMae3B4C2_HgeargNvbtbYDH7FuUGHsAWA4JrJdo57Jy8FG0N_ZMV5REnKvlwcRBssWiYt3f5iQy7fPqy4-BQzBy98KuWjXx119tMFCKb8ED-6rqkHBhU7REYFL0hYAfmriBSWCMLROOPRgIHb1FkTzbKF-Y-qiCv1Y HASURA_GRAPHQL_UNAUTHORIZED_ROLE=anonymous +HASURA_GRAPHQL_DEV_MODE=true # TODO: activate once allow list fonctionnal # HASURA_GRAPHQL_ENABLE_ALLOWLIST=true @@ -30,23 +33,24 @@ HASURA_PROJECT_ENDPOINT=http://localhost:8080/v1/graphql NEXT_PORT=8888 NEXT_HOST=localhost NEXTAUTH_URL=http://localhost:8888 +## This is corresponding to the RSA key for web app ## IMPORTANT ! Keep the "" arround in NEXTAUTH_SECRET to avoid convertion to string litteral, otherwise \n not interpreted and private key will not work -NEXTAUTH_SECRET="-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCUT2D12vnJqrz2\nCviWdnXJFvYMqKw+GtWYC9U9NxeQWs7NDMm+4hV2fKiNPEs5OiSo/W12KNvvbA9R\nZBrG4G6KYihABDaXXP+i80uDM9CH9zaDysLdKrc7ixWB1lISsYa0q+Idz75rdX9k\ncnjmomCtamiyPTmrxIdC58/ovo37G7XDCLwI/0vEmHWCn9Gdps+CA8xGPT3BXq6e\npwy4r+iEvrJx+B5OZUaVwK9Qs3+2dwfDfiwac4ETeRB+CFHQpEUZHY/A7gaciScF\n5u6XRbv6GtS2XKLZ/M/lZSfqfzwEu7/Zx332zE6Rsb0aTxMwpvfS85vjm63sJa+3\nugV8ejDvAgMBAAECggEABwpJmQIfD2Kqe6eDq2jOKJCNd4ZePsh5UTFmmvRNiw20\neWlc/lGvISPDwIiXLY1EBj2Zf51q60+e3oc4+i3XMXx9WqSYjtDcVbjk4cKI6Jtk\nnBb47xTDA/GTQMmStc51jYgHQNEGwgUe2f7RHGmi2ziM5cEgRrYakaN9bBf3l27j\nyW1Kz0TXl4zSjQakNlKqvTz+8Ych2NjHnskqS3VZ31lPaps+mpeqQipzfNZDM+Sl\n1SSHgh6puHfBi1CMyPhq3eZ2p0Cn10xHb1zKN3FpQB/RrPLA82oCbDeNnW+ykcPC\nmSCEBs7WUKD3yMDMIZtwYs31vCipwwaQ1UUzNXuOsQKBgQC5h0/iUEEIfHNpSzE6\nCfjMRsqF6SHa4f7rIfMv5yEWgZZyy3IgR/qBIuLCmXjKrdysQx5OsPRaMnnaZOG/\nbOwmf9IoBTpBIXP1HRlfL/tHlCW2eoAeNtM+kDIGdx8SHwQKYm9+Th7r3E+8uKpk\nm6jpzqxT5a7tYHo5adnjIs3ieQKBgQDMpPZ3F/rWtfdJc6bGkQ5zJtaDdgjCFQ6W\nrPD/FOYvBfCkDKvo+PtdXhJe/bBgbZVcQmGfJgGCnrcgHxFVSd0prn9yyIOK5SSa\n218UxjNGRcbjaqX4ExQFgXkXADpkh/a2TGEzzaLXr0UqnlMPpjnhEStXSa4OATu5\ny1ztN8oUpwKBgFzjLk+0tpq1FGNnTiIs0/ASkVsyOc0I0USQHt2g7qQCBX079svK\nvdThzn53sE5pdc6ZXBcx6WUvWGrLj2rz8dfkrydyVpQ9V30lMIrDzx8rQSZ3dqWp\n9WGheCpcgaXk+XTpi8DFBB46k4F9Q3JTrOJCo2zt1gLrBsawBHL//eyhAoGBAKkj\nNqlb4nAPWWEV+yNmxICb+vQQXFC8wp/6M/0/srfuuuN7raISFv8mPxzPpDUunSHx\no2m8Kcdhko0z4EmTkP1gQeoGm+HyXXy4Dy/GWJ6eETHo9V/BtOyQBBrkj16DmX82\nRahhL1QAgrQkwxXOF0xTunScawUcM9bto9JUJ+tFAoGAYNW+AnwfXAkVSRRMTlIv\nFRIahrPOxUh5K0lvtIms7DNthhKjX3Up65y3IO/O/2ritALSSo0pjHHG3r00Cepr\nB3qMi/sBgOjyCpt8kZbYPlmbh5mFthd7tC4T6MRAtZo7C7/PJ+9oZVLdsNMvkP23\nvmM6kfyt8NbHrFqS6Z8VJn8=\n-----END PRIVATE KEY-----\n" +NEXTAUTH_SECRET="-----BEGIN RSA PRIVATE KEY-----\nMIIJKQIBAAKCAgEAtHmpqKfTdp2DNnolB3B8FrDxm64vbOXiH14GFT77PqcMtlss\nyFKkR2Ak6bpCa63tRuTJmrItMOYEmTmTfOAi0ttVqnTSdLrMLYpGR6dLl6tbUAIO\nYiJ9TbPsZaEPbBEGiG/vTe9kpdGQG66q+QydmrGRmZd1JQnC2fXo3ZpVT1URrpL5\n0UCRbXH1rVBfuhd1lkpItszZxJ4T4M6JSzMfCkNG3TyezRHytecNftAJICeaEtMH\nV+2ZJ/Dy8+DL5CuRhyLDOyGDsjaQi6Wj8tLFNGg3BX/uXL47iqdtGT5ucYgNF9X9\nzxTvQ21pC+bZCnVN2B0ucJtMH+vXVb1iwqKjnxKEXfdqyLpux4LCZM9lTpScf2yX\nJKGFX3kTTLy/vQESXUxCiSO4p0OIuQKbS5Zj/i3d4rpXhC1Q3aE2KXVm/OXrv9ly\nN33P46BbzKHP8wwRSlBd1wMCn6RGw2+SdP+jdjNp3bawdvRoktk2t2FWGXn22fng\nk1z2azs0aBzW373nuhUBz6vOPAzxIxIjsmTIcYq5uU35ozxtn4bToaHvVefF7LjT\n1tyTbN6vUjMOJsOpK3hoGOzHHBMH+HZhAZvehb02peNABIceaXXsnrTZDn9BJul6\n795d4lQt6kH4hrgZ/DgF7ENg51MKP2gBszVMWvf+tA8ZSNDbvfo6BrGC4qUCAwEA\nAQKCAgBvQu4QVt6sKrEg3a6EZplpl85rzrfYJ+T+t4WChaB44J2aspzqJuC2TBSV\nr0mRftlgMl4Dq8LmeXfuSqudecSeP7ARdRHl+t8zWCK5u+6DY5XYvlvFrkOXqsub\nX+7VDa38YR2j62kePRLdrhIjld535u6/RLtoiRsCKnNUYvgi/2v2NxAiK+88DNyL\n65gIbrwEWml3oNTEPTw+BLZpkOua9Rzz+ZJhFKaP9BDC1Fg75Y47+rN1Rrp8ADSX\nm0e3tBB0wj6f7qp1LORx4z0uzzfadkEtd9AohvLIKS2+OVn3TgvcXQWrK9nRtNrl\nBn1Z0DWcfWkK7QLCTzAi4K3JFmFOAAGxTtRxd38NCeRQOuyBAAIWHOMXdJ/9TYVg\nNv10IFS1XCtuEzMcaB0VQoZsjA20bHiYkMwteEjvrjK0fJlbcIS+lKAqIrBeS9SZ\nnFpWk5/jOs9dj4KK18RwzGFGRyt4/flfIrnZXV/MRQr64n+IJ4eGLNc3UPN9Rboa\nKnVJMkwYFSIw0+r/ul1Yzg3L19wNLyfUdPyc39piw2yOX+naYtb3H1HuMbjYPRcF\nZ1k5i3T4wNWV5z6PPUsi2te8WPUlPJgBtxMmvM/x9YJlz1Mgm5tfAM8i9PCvboDk\nQKVwe8Bu/TfnPKbr17P4bxfvgEZdthbVyhj5Bk3SImEzq4U0hQKCAQEA3bLydO7b\njqkohkdNQPwFH5pOCE5kYX6cSlpwkVefpriX1AxU7SvtmBT1j5VTr0EBQJGP0/xT\nVFXddKkvVO8BLQgzyfgsf3FeG9Zep91o5r4k2DPtGHqhG2qnBd8Lqs2Cu6b3kJDd\njrT4Q15bXT7JRLYedxsd4cFTdR6nQfd52J+0qA8ZyjX/w0bTrn6uxUrJrInOcZwN\nQEJf5h9xmh222IkvLEGso6DZjgu2C84BLrZg5LG8V5TJMxLzjCf9L5iVRqjpW7tu\nMNHgvLWRknvQ/UhhPYgQqB7kd5CFATiZeSY+IDwbsdSjj9xgTtz0hUSMrDct1c7o\nyqeH40Ne/STmVwKCAQEA0GXsyhpy8/9txg0LdYSnP3/GYWTCz8wnQ+sqHV4sJ9PA\nNHq/PLhO0lPqYZT0w3GHLlA6ByQiWpWImNvOqKi/BCesQ8vJjF9DUo+sIMnWKTZW\nNYXESVUOPXBMLq9yel3Nvu1DDJN8r8uu+4HfC3hVuFgBzukXrf4zhljd3V3BiCgq\nuaIISEeVsE+GRUJFpETbq8urSo6t6ezsEVCAha3Os/zqn21SvpIWrt5uiXUF07YO\nz/eU2VhtJT871kD0jYQTqyEtUAOT7Fqe7cpO3GtyRUcdbSgNhb3osqK9CxwV3aeO\n5AXG/BiIEzGFLmsD90TRHNtM3Okol/5jnr7OzolJYwKCAQAZOcBOv9Lpo6PBy6El\nsMdgdi1E0q6nTUG5UBsY3pCC5uQXs6OCLQpm0JO0V7hi65GZ6DYmV8KfiPmeyZVi\nI6PNnO5Pn9ZoVdzwa+7vSMkj4CTPGPF0ZJeqR/NjPqLUN3gVpATtRR6Am2TYPYdF\nz9wU3mgPA13eDyJQ5EEBx4fstxdWPAmiMYy9inSRmUaHml/iKvf7g1capbLFu3Qw\npgrlDo74iSx8ndPDTt/S7gjCaOwTeYnFqV9PWWuu2en8HW92z8dlsajzEx5wOnSq\n5z27ZB30Y2QJzSIP3LjVj7wexdQx1MUN8fT+bIPk1U1ZUJh1C/5CIr3oOTHEESlg\nwm8XAoIBAQDM4zi/putXysxxSEf43VfVjVlMTdVemXgNRXqdbwX4ji5NKlU0bHxK\nO2iXUeym7soaFZRHixYfex7WMl1m4qkSe7LY4NWiJdK5rDlt7yKYWCy/6GkINBCR\nBQRRbfseJXVv/jLKfYK8D4RVD+VrkH6uhBAbDn5SeTbNIjfXOSNaKyt+YLjF32Ni\n+XyoQTTZAT38FHyvC8Ie1+lsSHpjc3Ni8Aj4f3I3nMeiW1vP1vbIpBjCDMcSPObq\nFNZOmoQVUkJIIJE9NpdLa/kPDrUj7ptlUzqyJAvPbtwGLQuxjYZN6zwIIUn2dmPq\nguhOr7YxeD4jodRa6P0ZGml1HGGVG9LDAoIBAQCgMyPvM04hiLXDP/TV22qZUlaq\nnZK+ucyaosJ/lZZ0v9bNpsPz5s6yrzFUictW6j2Zi3p9Gd+yN1vCPPYE+gVHkSVv\n+cw0OATZGQYKbptIAxv5lEORzramtS5huHwYVgm0LXPSLcuU92zfqNKJ1mk/7oeV\ndvHS55Z6eEoukrwweG8y+f4yKreBV7wNg/TENm6SzooTjMddI8BCUzqhp2ddMP6S\nK7RID8jCstbhlaqYfuDOGOc6HaLTbPwM/2wwj9j8D53QfksRvcwSuqtZSQe+QF9W\noiHqZpJ/qIeLN4Yv2rWYLpNdNOF7dpF+0mwRFeQwMm0YonWYoTdroPqkDeDt\n-----END RSA PRIVATE KEY-----\n" TOKEN_LIFE_TIME="648000" # NEXT_PUBLIC_WEB3AUTH_CLIENT_ID="BNIxn1mWyMcmbMPI9sns29pGFoMlgN0j3X3rkC9u8w7LFnIkwIaUMYJ2mQkZIUILZtg8acRnlLQ2FnlUgyu_BAo" # NEXT_PUBLIC_WEB3AUTH_NETWORK='testnet' -NEXT_PUBLIC_WEB3AUTH_CLIENT_ID="BPZ8nA8FiIV7gPgcvSW_dV88vcBe-6T-P3zVAbBsonXLRbth6YcaHrNVUYfHEJq1hEExhocBMbqaEmGc6QVMajY" +NEXT_PUBLIC_WEB3AUTH_CLIENT_ID="BAUs8kuD5gMYu_O5n4ywJ2lrFIQg0Ug6quLkM9X6uavfML8r6gaCKG8GI7qNOEV63x89cCijOULR7oftnKFfjC8" NEXT_PUBLIC_WEB3AUTH_NETWORK='sapphire_devnet' NEXT_PUBLIC_WEB3AUTH_SESSION_TIME="648000" ## web3 ## Here we take the Eth Goerli chain -NEXT_PUBLIC_CHAIN='5' -CHAIN='5' +NEXT_PUBLIC_CHAIN='11155111' +CHAIN='11155111' ## Alchemy -NEXT_PUBLIC_ALCHEMY_API_KEY='suWCSUU8QCZyA8U4VHEXzGYJZobJPSfc' -ALCHEMY_API_KEY='suWCSUU8QCZyA8U4VHEXzGYJZobJPSfc' +NEXT_PUBLIC_ALCHEMY_API_KEY='aTwl7l6SRRC22e-7joQbT7oMG6yTjUm0' +ALCHEMY_API_KEY='aTwl7l6SRRC22e-7joQbT7oMG6yTjUm0' ALCHEMY_AUTH_TOKEN='dGlcmvJsh6Oac3KFJFok2r0R2UgTrcYm' WEB_APP_URL='https://www.staging.offline.live' @@ -78,7 +82,7 @@ NEXT_PUBLIC_UPLOAD_ACCOUNT_ID=FW25ba3 ## those are the local api key with `/local/*/**` access, production have other secret key with access to `/production/*/**` UPLOAD_PATH_PREFIX=local NEXT_PUBLIC_UPLOAD_PATH_PREFIX=local -UPLOAD_SECRET_JWT="-----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----\n" +UPLOAD_SECRET_JWT="-----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----\n" UPLOAD_SECRET_API_KEY=secret_FW25ba32vi58j8Xr45gBcpAcVG4W UPLOAD_PUBLIC_API_KEY=public_FW25ba36mEdkrUv4r6qd45EtSRpT NEXT_PUBLIC_UPLOAD_PUBLIC_API_KEY=public_FW25ba36mEdkrUv4r6qd45EtSRpT @@ -88,10 +92,11 @@ NEXT_PUBLIC_UPLOAD_PUBLIC_API_KEY=public_FW25ba36mEdkrUv4r6qd45EtSRpT THIRDWEB_MASTER_ADDRESS="0xe63Ba72a20F7d4F5B9F442A0E005dD90aB040bb8" NEXT_PUBLIC_THIRDWEB_MASTER_ADDRESS="0xe63Ba72a20F7d4F5B9F442A0E005dD90aB040bb8" THIRDWEB_MASTER_PRIVATE_KEY="53a8c4d9607b88b10f72d44c965257df9344aed1e3b7fb98c0106994eb179eff" -THIRDWEB_SECRET_KEY=rzdwO51Vk3qhaDJ2Wy4WQfOMYG8Ttwdp1SD6HvwKPAxzwUT1IA9u6A8pqo-aDwcwpC_aLVyiSmsDSNhCgkmHxg +THIRDWEB_SECRET_KEY=HtEev6sxyoWa4Xdgt_DWkVIcbkRaHoRKB8SMqdH17RbWiO99hBBq6mppuD8b2yWpKJuCPhRroNMy2rUbj7oOwg NEXT_PUBLIC_THIRDWEB_CLIENT_ID=3ce7c20950e008cb1d6138a4a06d7e7f THIRDWEB_CLIENT_ID=3ce7c20950e008cb1d6138a4a06d7e7f NEXT_PUBLIC_OPENZEPPELIN_URL=https://api.defender.openzeppelin.com/autotasks/9faf0959-3d0d-489a-abba-bffdabfb41d0/runs/webhook/6e5dfd33-6689-4e6e-9218-ab9cf52ca8b0/LcgLp7bSkuhxF5isCothHE +OPENZEPPELIN_URL=https://api.defender.openzeppelin.com/autotasks/9faf0959-3d0d-489a-abba-bffdabfb41d0/runs/webhook/6e5dfd33-6689-4e6e-9218-ab9cf52ca8b0/LcgLp7bSkuhxF5isCothHE # Sumsub SUMSUB_API_KEY=sbx:gsEAPxKKMo3QToEyr3CdXmVK.NVOTAJYMlJ15W21dAr82FTucB5P18Dz0 @@ -114,3 +119,12 @@ TZ=UTC ## currency FIXER_CURRENCY_API_KEY='0f0ab52ebe369b4693f500cd98188313' EXCHANGE_RATE_API_KEY='6c9a453dde30336217525dad' + +# e2e +NEXT_PUBLIC_E2E_TEST=true +E2E_TEST=true + +## posthog +POSTHOG_KEY=phc_FcjrV3dP2qG5qVafKh6ULkTYGq5FWD5mT8XPk7t9Y8Q +POSTHOG_PERSONAL_API_KEY=phx_wIGzuBaUWMAdzBpxpkil4yIDdINhy5FfnFR4QYhUj6q +NEXT_PUBLIC_POSTHOG_KEY=phc_FcjrV3dP2qG5qVafKh6ULkTYGq5FWD5mT8XPk7t9Y8Q diff --git a/.eslintignore b/.eslintignore index 2091da67f..270deb273 100644 --- a/.eslintignore +++ b/.eslintignore @@ -11,4 +11,5 @@ hasura/app/** .next/** .next .swcrc -mockServiceWorker.js \ No newline at end of file +mockServiceWorker.js +.nx \ No newline at end of file diff --git a/.eslintrc.ci.json b/.eslintrc.ci.json new file mode 100644 index 000000000..f530149b6 --- /dev/null +++ b/.eslintrc.ci.json @@ -0,0 +1,8 @@ +{ + "extends": [".eslintrc.json"], + "rules": { + "import/no-cycle": "error", + "import/no-unused-modules": "error", + "import/no-deprecated": "error" + } +} diff --git a/.eslintrc.json b/.eslintrc.json index 77818e120..a28a87b4b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,12 +1,6 @@ { "root": true, - "plugins": [ - "@nx/nx", - "eslint-plugin-prettier", - "markdown", - "sonarjs", - "tailwindcss" - ], + "plugins": ["@nx/eslint-plugin", "markdown", "sonarjs", "tailwindcss"], "extends": [ "eslint-config-prettier", "plugin:import/recommended", @@ -15,13 +9,14 @@ "plugin:json/recommended", "plugin:sonarjs/recommended", "plugin:storybook/recommended", + "plugin:playwright/recommended", "plugin:tailwindcss/recommended" ], "settings": { "import/resolver": { "node": "true", "typescript": { - "project": ["apps/**/tsconfig.*?.json", "libs/**/tsconfig.*?.json"] + "project": ["apps/*/tsconfig.json", "libs/*/tsconfig.json"] } }, "tailwindcss": { @@ -32,6 +27,10 @@ } }, "rules": { + "import/named": "off", + "import/namespace": "off", + "import/default": "off", + "import/no-named-as-default-member": "off", "tailwindcss/no-custom-classname": [ "error", { @@ -63,19 +62,26 @@ "sonarjs/no-duplicate-string": "off" } }, + { + "files": ["!**/*", "**/e2e/**/*.spec.ts"], + "extends": ["plugin:playwright/recommended"] + }, { "files": ["*.ts", "*.tsx"], - "extends": ["plugin:@nx/typescript"], + "extends": ["plugin:@nx/eslint-plugin/typescript"], "rules": { "@typescript-eslint/ban-ts-comment": "off", - "import/no-cycle": "error" + "import/no-cycle": "off", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-explicit-any": "warn" } }, { "files": ["*.js", "*.jsx"], - "extends": ["plugin:@nx/javascript"], + "extends": ["plugin:@nx/eslint-plugin/javascript"], "rules": { - "import/no-cycle": "error" + "import/no-cycle": "off", + "@typescript-eslint/no-unused-vars": "warn" } }, { diff --git a/.github/workflows/build-and-e2e-back-office-tests.yml b/.github/workflows/build-and-e2e-back-office-tests.yml new file mode 100644 index 000000000..42dbcf7c0 --- /dev/null +++ b/.github/workflows/build-and-e2e-back-office-tests.yml @@ -0,0 +1,55 @@ +name: Build and E2E back-office tests + +on: + workflow_dispatch: + +env: + NODE_OPTIONS: '--max_old_space_size=4096' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + e2e: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + name: Checkout [Pull Request] + if: ${{ github.event_name == 'pull_request' }} + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - uses: actions/checkout@v3 + name: Checkout [Default Branch] + if: ${{ github.event_name != 'pull_request' }} + with: + fetch-depth: 0 + + - name: Derive appropriate SHAs for base and head for nx affected commands + id: nx + uses: nrwl/nx-set-shas@v3 + with: + main-branch-name: staging + + - name: Set up environment and cache dependencies + uses: sebpalluel/ci/.github/actions/setup-environment@latest + + - name: Build and check if back-office affected + id: check + run: | + affected=$(pnpm nx affected -t=build) + if [[ $affected == *"back-office:build:production"* ]]; then + echo "::set-output name=back-office::true" + else + echo "::set-output name=back-office::false" + fi + + - name: Launch docker services + if: steps.check.outputs.back-office == 'true' + run: pnpm docker:services & pnpm nx run back-office:build:production + + - name: Run e2e tests + if: steps.check.outputs.back-office == 'true' + run: pnpm nx run back-office:e2e --skipInstall diff --git a/.github/workflows/build-and-e2e-web-tests.yml b/.github/workflows/build-and-e2e-web-tests.yml new file mode 100644 index 000000000..22244b78f --- /dev/null +++ b/.github/workflows/build-and-e2e-web-tests.yml @@ -0,0 +1,55 @@ +name: Build and E2E web tests + +on: + workflow_dispatch: + +env: + NODE_OPTIONS: '--max_old_space_size=4096' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + e2e: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + name: Checkout [Pull Request] + if: ${{ github.event_name == 'pull_request' }} + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - uses: actions/checkout@v3 + name: Checkout [Default Branch] + if: ${{ github.event_name != 'pull_request' }} + with: + fetch-depth: 0 + + - name: Derive appropriate SHAs for base and head for nx affected commands + id: nx + uses: nrwl/nx-set-shas@v3 + with: + main-branch-name: staging + + - name: Set up environment and cache dependencies + uses: sebpalluel/ci/.github/actions/setup-environment@latest + + - name: Build and check if web affected + id: check + run: | + affected=$(pnpm nx affected -t=build) + if [[ $affected == *"web:build:production"* ]]; then + echo "::set-output name=web::true" + else + echo "::set-output name=web::false" + fi + + - name: Launch docker services + if: steps.check.outputs.web == 'true' + run: pnpm docker:services & pnpm nx run web:build:production + + - name: Run e2e tests + if: steps.check.outputs.web == 'true' + run: pnpm nx run web:e2e --skipInstall diff --git a/.github/workflows/chromatic-back-office.yml b/.github/workflows/chromatic-back-office.yml new file mode 100644 index 000000000..47cec0431 --- /dev/null +++ b/.github/workflows/chromatic-back-office.yml @@ -0,0 +1,50 @@ +name: 'Chromatic Back-Office' + +on: + pull_request: + paths: + - libs/ui/** + - libs/features/** + push: + branches: ['staging'] + paths: + - libs/ui/** + - libs/features/** + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + chromatic-deployment: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + name: Checkout [Pull Request] + if: ${{ github.event_name == 'pull_request' }} + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - uses: actions/checkout@v3 + name: Checkout [Default Branch] + if: ${{ github.event_name != 'pull_request' }} + with: + fetch-depth: 0 + + - name: Set up environment and cache dependencies + uses: sebpalluel/ci/.github/actions/setup-environment@latest + + - name: Install Libvips + run: sudo apt-get update && sudo apt-get install -y libvips-dev + + - name: Publish to Chromatic + uses: chromaui/action@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + projectToken: ${{ secrets.CHROMATIC_BACK_OFFICE_PROJECT_TOKEN }} + exitZeroOnChanges: true + onlyChanged: true + buildScriptName: build-storybook:back-office diff --git a/.github/workflows/chromatic-ui.yml b/.github/workflows/chromatic-ui.yml index 4ad78b591..b3b6e274e 100644 --- a/.github/workflows/chromatic-ui.yml +++ b/.github/workflows/chromatic-ui.yml @@ -5,7 +5,7 @@ on: paths: - libs/ui/** push: - branches: ['main'] + branches: ['staging'] paths: - libs/ui/** workflow_dispatch: @@ -19,6 +19,15 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + name: Checkout [Pull Request] + if: ${{ github.event_name == 'pull_request' }} + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - uses: actions/checkout@v3 + name: Checkout [Default Branch] + if: ${{ github.event_name != 'pull_request' }} with: fetch-depth: 0 diff --git a/.github/workflows/chromatic-web.yml b/.github/workflows/chromatic-web.yml index 02279d68e..aa646455b 100644 --- a/.github/workflows/chromatic-web.yml +++ b/.github/workflows/chromatic-web.yml @@ -4,12 +4,14 @@ on: pull_request: paths: - libs/ui/** - - apps/web/** + - libs/features/** + - '!libs/features/back-office/**' push: - branches: ['main'] + branches: ['staging'] paths: - libs/ui/** - - apps/web/** + - libs/features/** + - '!libs/features/back-office/**' workflow_dispatch: concurrency: @@ -22,6 +24,15 @@ jobs: steps: - uses: actions/checkout@v3 + name: Checkout [Pull Request] + if: ${{ github.event_name == 'pull_request' }} + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - uses: actions/checkout@v3 + name: Checkout [Default Branch] + if: ${{ github.event_name != 'pull_request' }} with: fetch-depth: 0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 169dcd978..69409a675 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,54 +7,47 @@ on: workflow_dispatch: env: - CYPRESS_CACHE_FOLDER: ~/.cache/Cypress + NODE_OPTIONS: '--max_old_space_size=4096' concurrency: group: ${{ github.workflow }}-${{ github.event.number || github.ref }} cancel-in-progress: true jobs: - main: - name: Nx Cloud - Main Job - uses: sebpalluel/ci/.github/workflows/nx-cloud-main.yml@latest - secrets: - ENV_FILE: ${{ secrets.ENV_FILE }} - with: - runs-on: ubuntu-latest - artifacts-path: | - dist/cypress - artifacts-name: cypress - environment-variables: | - CYPRESS_CACHE_FOLDER=~/.cache/Cypress - cypress_cache_path: ~/.cache/Cypress - node-version: 20 - pnpm-version: 7 - environment: staging - init-commands: | - pnpm exec nx-cloud record -- pnpm docker:test & pnpm docker:services + ci: + runs-on: ubuntu-latest + environment: ${{ github.ref == 'refs/heads/staging' && 'staging' || 'preview' }} + steps: + - uses: actions/checkout@v3 + name: Checkout [Pull Request] + if: ${{ github.event_name == 'pull_request' }} + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 - parallel-commands: | - pnpm nx workspace-lint - pnpm nx format:check --verbose - ## test relying in prisma + hasura not working in parallel, docker services not available ? - # pnpm nx affected --target=test-prisma --ci --code-coverage - pnpm nx affected --target=test-integration --parallel=false --ci --code-coverage - ## TODO set back when cypress upgraded to webpack 5, compilation error with this code `headers['Cookie'] = cookies().toString()`; - # pnpm nx affected --target=e2e --no-watch - parallel-commands-on-agents: | - pnpm affected:lint --parallel=3 & - pnpm affected:build --parallel=3 & - pnpm nx affected --target=test --parallel=3 --ci --code-coverage & - agents: - name: Nx Cloud - Agents - uses: sebpalluel/ci/.github/workflows/nx-cloud-agents.yml@latest - secrets: - ENV_FILE: ${{ secrets.ENV_FILE }} - with: - runs-on: ubuntu-latest - environment: staging - node-version: 20 - pnpm-version: 7 - number-of-agents: 3 - # init-commands: | - # pnpm prisma generate + - uses: actions/checkout@v3 + name: Checkout [Default Branch] + if: ${{ github.event_name != 'pull_request' }} + with: + fetch-depth: 0 + + - name: Derive appropriate SHAs for base and head for nx affected commands + id: nx + uses: nrwl/nx-set-shas@v3 + with: + main-branch-name: staging + + - name: Set up environment and cache dependencies + uses: sebpalluel/ci/.github/actions/setup-environment@latest + - name: Setup docker tests containers and run check 'format' + run: | + set -e + pnpm docker:test & + pnpm nx format:check --verbose & + wait -n + # # Prefered to run sequentially because otherwise slower with vercel cache hanging + # pnpm nx affected:lint --parallel --maxParallel=3 && pnpm nx affected:test --parallel --maxParallel=3 & + # wait -n + - name: Run integration tests + run: | + pnpm affected:test-integration diff --git a/.github/workflows/pr-approval-trigger-preview.yml b/.github/workflows/pr-approval-trigger-preview.yml new file mode 100644 index 000000000..2dbc83a6e --- /dev/null +++ b/.github/workflows/pr-approval-trigger-preview.yml @@ -0,0 +1,37 @@ +name: Manual Trigger for Preview Apps + +on: + pull_request_review: + types: [submitted] + +jobs: + # # For now we build web from e2e + # preview-apps: + # if: github.event.review.state == 'approved' && github.event.pull_request.base.ref != 'main' + # runs-on: ubuntu-latest + # environment: preview + # steps: + # - name: Trigger Preview Apps Workflow + # uses: benc-uk/workflow-dispatch@v1.2.2 + # with: + # workflow: Deploy preview apps + # token: ${{ secrets.GITHUB_TOKEN }} + # ref: ${{ github.event.pull_request.head.ref }} + e2e-web: + if: github.event.review.state == 'approved' && github.event.pull_request.base.ref != 'main' + runs-on: ubuntu-latest + environment: preview + steps: + - name: Trigger Build and E2E Workflow for Web + uses: benc-uk/workflow-dispatch@v1.2.2 + with: + workflow: Build and E2E web tests + token: ${{ secrets.GITHUB_TOKEN }} + ref: ${{ github.event.pull_request.head.ref }} + + - name: Trigger Build and E2E Workflow for Back-office + uses: benc-uk/workflow-dispatch@v1.2.2 + with: + workflow: Build and E2E back-office tests + token: ${{ secrets.GITHUB_TOKEN }} + ref: ${{ github.event.pull_request.head.ref }} diff --git a/.github/workflows/preview-apps-delete.yml b/.github/workflows/preview-apps-delete.yml index 37dd36a88..4d8611298 100644 --- a/.github/workflows/preview-apps-delete.yml +++ b/.github/workflows/preview-apps-delete.yml @@ -39,33 +39,3 @@ jobs: project_id: ${{ secrets.NEON_PROJECT_ID }} branch_name: ${{ env.PULL_REQUEST_SHA }} api_key: ${{ secrets.NEON_API_KEY }} - - - name: Download PREVIEW_URL cache - uses: actions/cache@v3 - id: cache-preview-url - with: - path: ./preview_url.txt - key: preview-url-${{ env.PULL_REQUEST_SHA }} - - - name: Get PREVIEW_URL from cache - id: get_preview_url - run: | - preview_url=$(cat preview_url.txt) - echo "PREVIEW_URL=$preview_url" >> $GITHUB_ENV - - - name: Cache Vercel CLI - uses: actions/cache@v2 - id: cache-vercel - with: - path: ~/.npm # adjust this path if needed - key: vercel-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} - - - name: Install Vercel CLI - run: | - if [ -z "$(npm list -g --depth=0 | grep vercel)" ] - then - npm install --global vercel@latest - fi - - - name: Delete Vercel Preview - run: vercel remove [${{ env.PREVIEW_URL }}] --yes --token ${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/preview-apps.yml b/.github/workflows/preview-apps.yml index e58e66bd8..8e22182d0 100644 --- a/.github/workflows/preview-apps.yml +++ b/.github/workflows/preview-apps.yml @@ -1,23 +1,23 @@ name: Deploy preview apps on: - pull_request: - types: [opened, reopened, synchronize] - branches-ignore: - - main + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true env: VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + NODE_OPTIONS: '--max_old_space_size=4096' jobs: - deploy-preview: + setup: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - - name: Set up environment and cache dependencies - uses: sebpalluel/ci/.github/actions/setup-environment@latest + with: + ref: ${{ github.ref }} - name: Get PR sha id: get_pull_request_sha @@ -35,46 +35,6 @@ jobs: username: ${{ secrets.PG_USERNAME }} password: ${{ secrets.PG_PASSWORD }} - - name: Cache Vercel CLI - uses: actions/cache@v2 - id: cache-vercel - with: - path: ~/.npm # adjust this path if needed - key: vercel-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} - - - name: Install Vercel CLI - run: | - if [ -z "$(npm list -g --depth=0 | grep vercel)" ] - then - npm install --global vercel@latest - fi - - - name: Vercel Environment Information - run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} - - - name: Save environment variables to a file - run: | - echo "HASURA_CLOUD_ACCESS_TOKEN=$HASURA_CLOUD_ACCESS_TOKEN" >> env_vars.txt - echo "HASURA_GRAPHQL_ADMIN_SECRET=$HASURA_GRAPHQL_ADMIN_SECRET" >> env_vars.txt - echo "HYGRAPH_CMS_WEBHOOK_READ_URL=$HYGRAPH_CMS_WEBHOOK_READ_URL" >> env_vars.txt - echo "HYGRAPH_CMS_READ_TOKEN=$HYGRAPH_CMS_READ_TOKEN" >> env_vars.txt - echo "HASURA_GRAPHQL_JWT_SECRET=$HASURA_GRAPHQL_JWT_SECRET" >> env_vars.txt - echo "HASURA_GRAPHQL_DATABASE_URL=$HASURA_GRAPHQL_DATABASE_URL" >> env_vars.txt - env: - HASURA_CLOUD_ACCESS_TOKEN: ${{secrets.HASURA_CLOUD_ACCESS_TOKEN}} - HASURA_GRAPHQL_ADMIN_SECRET: ${{secrets.HASURA_GRAPHQL_ADMIN_SECRET}} - HYGRAPH_CMS_WEBHOOK_READ_URL: ${{secrets.HYGRAPH_CMS_WEBHOOK_READ_URL}} - HYGRAPH_CMS_READ_TOKEN: ${{secrets.HYGRAPH_CMS_READ_TOKEN}} - HASURA_GRAPHQL_JWT_SECRET: ${{secrets.HASURA_GRAPHQL_JWT_SECRET}} - HASURA_GRAPHQL_DATABASE_URL: ${{steps.create_branch.outputs.db_url}}/neondb - - - name: Upload env_vars.txt as an artifact - uses: actions/upload-artifact@v2 - with: - name: env-vars - path: ./env_vars.txt - retention-days: 5 # set the retention period to 5 days - # - name: Create Hasura Cloud preview app # id: hasura_cloud_preview # uses: hasura/hasura-cloud-preview-apps@v0.1.10 @@ -99,37 +59,65 @@ jobs: # - name: Set Hasura GraphQL endpoint to .env # run: | - # echo HASURA_GRAPHQL_ENDPOINT=${{steps.hasura_cloud_preview.outputs.graphQLEndpoint}} >> .env + # echo HASURA_PROJECT_ENDPOINT=${{steps.hasura_cloud_preview.outputs.graphQLEndpoint}} >> .env # echo NEXT_PUBLIC_HASURA_PROJECT_ENDPOINT=${{steps.hasura_cloud_preview.outputs.graphQLEndpoint}} >> .env - # TODO remove this, was temporary to fix missing env issue - - name: Set Hasura GraphQL endpoint to .env - run: | - echo HASURA_GRAPHQL_ENDPOINT=https://www.hasura.staging.offline.live/ >> .env - echo HASURA_PROJECT_ENDPOINT=https://www.hasura.staging.offline.live/ >> .env - echo NEXT_PUBLIC_HASURA_PROJECT_ENDPOINT=https://www.hasura.staging.offline.live/ >> .env - echo NEXTAUTH_URL=https://www.preview.offline.live/ >> .env + deploy: + needs: setup + runs-on: ubuntu-latest + strategy: + matrix: + app: ['web', 'back-office'] + env: + VERCEL_PROJECT_ID: ${{ matrix.app == 'web' && secrets.VERCEL_PROJECT_ID_WEB || secrets.VERCEL_PROJECT_ID_BACK_OFFICE }} + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.ref }} + fetch-depth: 0 - - name: Deploy Preview to Vercel - id: deploy_vercel - run: | - preview_url=$(vercel deploy --token=${{secrets.VERCEL_TOKEN}}) - echo "PREVIEW_URL=$preview_url" >> $GITHUB_ENV + - name: Set up environment and cache dependencies + uses: sebpalluel/ci/.github/actions/setup-environment@latest - - name: Comment on Pull Request - uses: thollander/actions-comment-pull-request@v2 + - name: Cache Vercel CLI + uses: actions/cache@v2 + id: cache-vercel with: - message: | - Vercel Preview URL :rocket: : ${{env.PREVIEW_URL}} - Neon branch :elephant: : https://console.neon.tech/app/projects/${{secrets.NEON_PROJECT_ID}}/branches/${{steps.create_branch.outputs.branch_id}} - Hasura Console :computer: : ${{steps.hasura_cloud_preview.outputs.consoleURL}} + path: ~/.pnpm # adjust this path if needed + key: vercel-${{ runner.os }} - - name: Save PREVIEW_URL as artifact - run: echo ${{env.PREVIEW_URL}} > preview_url.txt + - name: Install Vercel CLI + run: | + if [ -z "$(npm list -g --depth=0 | grep vercel)" ] + then + npm install --global vercel@latest + fi - - name: Save PREVIEW_URL as cache - uses: actions/cache@v3 - id: cache-preview-url - with: - path: ./preview_url.txt - key: preview-url-${{ env.PULL_REQUEST_SHA }} + - name: Check if app should be built + id: app_check_build + run: | + output=$(npx --y nx-ignore ${{ matrix.app }}) || true + if [[ "$output" == *"✅ - Build can proceed"* ]]; then + echo "BUILD_REQUIRED_${{ matrix.app }}=true" >> $GITHUB_ENV + else + echo "BUILD_REQUIRED_${{ matrix.app }}=false" >> $GITHUB_ENV + fi + + - name: Deploy Preview to Vercel + id: deploy_vercel + env: + BUILD_REQUIRED: ${{ env[format('BUILD_REQUIRED_{0}', matrix.app)] }} + run: | + if [[ $BUILD_REQUIRED == true ]]; then + vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} --local-config=apps/${{ matrix.app }}/vercel.json + # TODO remove this when Hasura correctly deployed, was temporary to fix missing env issue + echo HASURA_PROJECT_ENDPOINT=https://www.hasura.staging.offline.live/ >> .vercel/.env.preview.local + echo NEXT_PUBLIC_HASURA_PROJECT_ENDPOINT=https://www.hasura.staging.offline.live/ >> .vercel/.env.preview.local + echo NEXTAUTH_URL=https://www.preview.offline.live/ >> .vercel/.env.preview.local + # + vercel build --token=${{ secrets.VERCEL_TOKEN }} --local-config=apps/${{ matrix.app }}/vercel.json + preview_url=$(vercel deploy -e HASURA_PROJECT_ENDPOINT=https://www.hasura.staging.offline.live/ -e NEXT_PUBLIC_HASURA_PROJECT_ENDPOINT=https://www.hasura.staging.offline.live -e NEXTAUTH_URL=https://www.preview.offline.live/ --token=${{secrets.VERCEL_TOKEN}} --prebuilt --local-config=apps/${{ matrix.app }}/vercel.json --global-config=.vercel) + echo "PREVIEW_URL_${{ matrix.app }}=$preview_url" >> $GITHUB_ENV + else + echo "Build not required - skipping Deploy Preview to Vercel" + fi diff --git a/.github/workflows/staging-apps.yml b/.github/workflows/staging-apps.yml index 8c90ec462..2e749df83 100644 --- a/.github/workflows/staging-apps.yml +++ b/.github/workflows/staging-apps.yml @@ -1,11 +1,15 @@ name: Deploy staging apps on: - push: - branches: - - staging workflow_dispatch: +env: + NODE_OPTIONS: '--max_old_space_size=4096' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: deploy-staging: runs-on: ubuntu-latest @@ -27,8 +31,8 @@ jobs: uses: actions/cache@v2 id: cache-vercel with: - path: ~/.npm # adjust this path if needed - key: vercel-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} + path: ~/.pnpm # adjust this path if needed + key: vercel-${{ runner.os }} - name: Install Vercel CLI run: | @@ -37,18 +41,23 @@ jobs: npm install --global vercel@latest fi - # Deploy app - name: Check if app should be built id: app_check_build run: | - npx --y nx-ignore ${{ matrix.app }} - echo "build_required=$?" >> $GITHUB_ENV + output=$(npx --y nx-ignore ${{ matrix.app }}) || true + if [[ "$output" == *"✅ - Build can proceed"* ]]; then + echo "BUILD_REQUIRED_${{ matrix.app }}=true" >> $GITHUB_ENV + else + echo "BUILD_REQUIRED_${{ matrix.app }}=false" >> $GITHUB_ENV + fi - name: App // Vercel Environment Information and Deploy Staging to Vercel + env: + BUILD_REQUIRED: ${{ env[format('BUILD_REQUIRED_{0}', matrix.app)] }} run: | - if [[ $build_required == '1' ]]; then - cd apps/${{ matrix.app }} && vercel pull --yes --environment=preview --git-branch=staging --token=${{ secrets.VERCEL_TOKEN }} && - vercel deploy --token=${{ secrets.VERCEL_TOKEN }} + if [[ $BUILD_REQUIRED == true ]]; then + vercel pull --yes --environment=preview --git-branch=staging --token=${{ secrets.VERCEL_TOKEN }} --local-config=apps/${{ matrix.app }}/vercel.json && + vercel deploy --token=${{ secrets.VERCEL_TOKEN }} --local-config=apps/${{ matrix.app }}/vercel.json else echo "Build not required - skipping Vercel Environment Information and Deploy Staging to Vercel" fi diff --git a/.gitignore b/.gitignore index 8b4a598b1..035891386 100755 --- a/.gitignore +++ b/.gitignore @@ -67,7 +67,6 @@ testem.log *.pem *.log *.eslintcache -storybook-static static # System Files @@ -75,4 +74,7 @@ static Thumbs.db # Sentry Auth Token -.sentryclirc \ No newline at end of file +.sentryclirc + +#playwright +playwright-report \ No newline at end of file diff --git a/.opencommitignore b/.opencommitignore index da38105dc..36f40b0a0 100644 --- a/.opencommitignore +++ b/.opencommitignore @@ -19,3 +19,6 @@ \*.7z# **/generated/** pnpm-lock.yaml +schema.graphql +schema.json + diff --git a/.prettierignore b/.prettierignore index 0305fa06f..aef666481 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,4 +11,5 @@ hasura/app/** .next .next/** .vscode/** -**/generated/** \ No newline at end of file +**/generated/** +/.nx/cache \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json index ddad431b4..995efed78 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -16,6 +16,7 @@ "lokalise.i18n-ally", "ms-azuretools.vscode-docker", "bradlc.vscode-tailwindcss", - "irongeek.vscode-env" + "irongeek.vscode-env", + "ms-playwright.playwright" ] } diff --git a/README.md b/README.md index a1ec565a4..0466b216f 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ This is the mail-catcher where all the mail are going in dev environment. | **Apps and Libs** | **Description** | | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `apps/web` | A Next.js app | -| `apps/web-e2e` | Cypress e2e test for the web app | +| `apps/web/playwright` | Playwright e2e test for the web app | | `apps/nestjs-server` | A Nest.js server app used to extend Hasura functionalities | | `hasura` | Contains the config / metadata / migrations / seeds for the Hasura service | | `prisma` | Prisma database schema and migrations | @@ -169,7 +169,7 @@ This repo has some additional tools already setup for you: - [Prettier](https://prettier.io) for code formatting - [Jest](https://jestjs.io) test runner for all things JavaScript - [Husky](https://github.com/typicode/husky) Git hook library used to execute ESLint and Prettier on staged files before a commit. -- [Cypress](https://www.cypress.io/) test runner for E2E and components test +- [Playwright](https://playwright.dev) test runner for E2E and components test - [Graphql Code Generator](https://www.the-guild.dev/graphql/codegen/) a generator for the graphql schemas and a client builders with provided queries. ## Flavors @@ -276,11 +276,11 @@ To facilitate integration testing, you have access to 3 clients with correspondi You can check the tests in `users.spec.ts` and `adapter.spec.ts` for examples of these utilities in use. -### Cypress +### Playwright
User {user.id} is not an organizer
- ) : ( - children - ) - ) : ( -