diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index f2c9e97c..d909c09e 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -1,43 +1,124 @@ -# Simple workflow for deploying static content to GitHub Pages -name: Deploy static content to Pages +name: build Gmeek on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: + issues: + types: [opened, edited] + schedule: + - cron: "0 16 * * *" + +jobs: -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false + check-membership: + runs-on: ubuntu-20.04 + outputs: + is_member: ${{ steps.check_membership.outputs.is_member }} + steps: + - name: Check if user is org member + id: check_membership + uses: actions/github-script@v6 + env: + ORG_NAME: '${{ github.event.repository.owner.login }}' + USER_LOGIN: '${{ github.event.sender.login }}' + with: + script: | + console.log('Repository owner:', process.env.ORG_NAME); + console.log('User login:', process.env.USER_LOGIN); + console.log('Repository owner ID:', context.payload.repository.owner.id); + console.log('Sender ID:', context.payload.sender.id); + const org = process.env.ORG_NAME; + const username = process.env.USER_LOGIN; + try { + const response = await github.rest.orgs.checkMembershipForUser({ + org: org, + username: username, + }); + console.log('API Response:', response); + console.log(`User ${username} is a member of ${org}`); + core.setOutput('is_member', 'true'); + } catch (error) { + console.log('Error details:', error); + console.log(`User ${username} is NOT a member of ${org}`); + core.setOutput('is_member', 'false'); + } -jobs: - # Single deploy job since we're just deploying - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest + build: + name: Generate blog + needs: check-membership + runs-on: ubuntu-20.04 + if: ${{ github.event.repository.owner.id == github.event.sender.id || needs.check-membership.outputs.is_member == 'true' || github.event_name == 'schedule' }} + permissions: write-all steps: - name: Checkout uses: actions/checkout@v4 + - name: Setup Pages - uses: actions/configure-pages@v5 + id: pages + uses: actions/configure-pages@v4 + + - name: Get config.json + run: | + echo "====== check config.josn file ======" + cat config.json + echo "====== check config.josn end ======" + sudo apt-get install jq + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.8 + + - name: Clone source code + run: | + GMEEK_VERSION=$(jq -r ".GMEEK_VERSION" config.json) + git clone https://github.com/Meekdai/Gmeek.git /opt/Gmeek; + cd /opt/Gmeek/ + lastTag=$(git describe --tags `git rev-list --tags --max-count=1`) + if [ $GMEEK_VERSION == 'last' ]; then git checkout $lastTag; else git checkout $GMEEK_VERSION; fi; + + - name: Install dependencies + run: | + pip install --upgrade pip + pip install -r /opt/Gmeek/requirements.txt + + - name: Generate new html + run: | + cp -r ./* /opt/Gmeek/ + cd /opt/Gmeek/ + python Gmeek.py ${{ secrets.GITHUB_TOKEN }} ${{ github.repository }} --issue_number '${{ github.event.issue.number }}' + cp -a /opt/Gmeek/docs ${{ github.workspace }} + cp -a /opt/Gmeek/backup ${{ github.workspace }} + cp /opt/Gmeek/blogBase.json ${{ github.workspace }} + + - name: update html + run: | + git config --local user.email "$(jq -r ".email" config.json)" + git config --local user.name "${{ github.repository_owner }}" + git add . + git commit -a -m '🎉auto update by Gmeek action' || echo "nothing to commit" + git push || echo "nothing to push" + sleep 3 + - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - # Upload entire repository - path: '.' + path: 'docs/.' + + deploy: + name: Deploy blog + runs-on: ubuntu-20.04 + needs: build + permissions: + contents: write + pages: write + id-token: write + concurrency: + group: "pages" + cancel-in-progress: false + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4