GitHub Workflows

GitHub Workflows

原文链接:https://ovea-y.cn/github_workflows/

本文介绍GitHub工作流的创建和作用。

工作流创建方式

在git项目下,创建.github/workflows文件夹,里面编写的任何yml文件都是工作流的一部分。
Pasted image 20240519154126

secrets的创建方式

secrets.GITHUB_TOKEN是GitHub自动创建的,不需要自己创建。

secrets.SERVER_HOST这个的来源,需要在GitHub对应的项目的设置中设置。
Pasted image 20240519154915

readme的构建标签

Pasted image 20240519155308
配置好Branch、Event类型后,把下面这段内容复制到markdown文档里,就会自动显示自动化流程状态了。其实就是一张图片,由GitHub自动生成提供。
Screenshot 2024-05-19 at 15.53.30

一. 自动构建网站并推送到远程服务器

自动构建hugo,并更新远程服务器的静态网站内容。

自动化流程文件

name: Deploy Hugo Site

# 当推送到main分支时触发部署流程
on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    # 检出仓库的代码
    - name: Checkout code
      uses: actions/checkout@v2
      with:
        submodules: 'recursive' # 递归拉取子模块,包括子模块中的子模块

    # 安装Hugo
    - name: Setup Hugo
      uses: peaceiris/actions-hugo@v2
      with:
        hugo-version: 'latest'
        extended: true

    # 构建Hugo站点
    - name: Build Hugo site
      run: hugo --minify

    # 删除远程服务器上的旧网站内容
    - name: Remove old site content
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: ${{ secrets.SERVER_USER }}
        password: ${{ secrets.SERVER_PASSWORD }}
        port: ${{ secrets.SERVER_PORT }}
        script: |
          rm -rf ${{ secrets.ROOT_PATH }}/html/*
      continue-on-error: true

    # 部署到远程服务器
    - name: Deploy to Server
      uses: appleboy/scp-action@master
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: ${{ secrets.SERVER_USER }}
        password: ${{ secrets.SERVER_PASSWORD }}
        port: ${{ secrets.SERVER_PORT }}
        # 根据实际部署路径进行替换
        target: "${{ secrets.ROOT_PATH }}/"
        # 注意,这里假设你的Hugo站点是构建在public目录下
        source: "public/*"
        # 如果使用SSH密钥而不是密码,请替换成以下内容:
        # key: ${{ secrets.SERVER_SSH_KEY }}
        # 使用SSH密钥时,不要使用password字段

    # Delete temp files
    - name: Remove old site content
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: ${{ secrets.SERVER_USER }}
        password: ${{ secrets.SERVER_PASSWORD }}
        port: ${{ secrets.SERVER_PORT }}
        script: |
          cp -r ${{ secrets.ROOT_PATH }}/public/* ${{ secrets.ROOT_PATH }}/html/
          rm -rf ${{ secrets.ROOT_PATH }}/public

二、设置CI

自动化流程文件

name: CI

# 当向main分支推送时触发
on:
  push:
    branches:
      - '*'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    # 设置Rust环境
    - name: Set up Rust
      uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: stable
        override: true

    # 添加构建步骤
    - name: Build project
      run: |
        cargo build --release
        echo "Build project here"

三、发布新版本时自动构建产物

打tag和更新到GitHub的方式

git push -u origin main
git tag "0.9.0"
git push -u origin 0.9.0

自动化流程文件

name: Build and Release

# 当向main分支推送时触发
on:
  push:
    # branches:
    #   - main
    tags:
        - '*'

permissions:
    contents: write

jobs:
  build:
    runs-on: ubuntu-latest
    permissions: write-all
    steps:
    - uses: actions/checkout@v2

    # 设置Rust环境
    - name: Set up Rust
      uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: stable
        override: true

    # 添加构建步骤
    - name: Build project
      run: |
        cargo build --release
        echo "Build project here"

    # 编译产物打包
    - name: Archive production artifacts
      run: |
        tar czvf processtrace-${{ github.ref_name }}.tar.gz -C target/release process_trace

    - name: Create release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ github.ref_name }}
        release_name: Release ${{ github.ref_name }}
        draft: false
        prerelease: false

    # 添加构建产物上传步骤
    - name: Upload Release Asset
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: processtrace-${{ github.ref_name }}.tar.gz
        asset_name: processtrace-${{ github.ref_name }}-linux.zip
        asset_content_type: application/zip

原文链接:https://ovea-y.cn/github_workflows/

Read more

香港银行开户指南

香港银行开户指南

注意:本文所有内容,都是需要前往香港的情况下才能使用! 本文主要介绍2家实体银行和3家虚拟银行! 实体银行包含: * 中国银行(香港) * 汇丰银行(香港),该银行也被称为“香港上海汇丰银行” 虚拟银行包含: * 众安银行 * 天星银行 * 蚂蚁银行 1、各银行所需资料和办理方式 银行名称 办理方式 所需材料 & 要求 备注 汇丰银行(香港) 提前预约,线下到营业点办理 (如果没预约,只能很早排队取线下号,不一定能取到) 必备证件: 1. 港澳通行证 2. 入境海关小票 3. 身份证 投资证明: 1. 证券App近三月股票交割单 2. 中国结算近三月交割单 3. 银行近三月流水单 4. 支付宝投资流水 资产证明: 1. 银行资产证明 2.

By 夕元
C++协程(Coroutines)

C++协程(Coroutines)

原文链接:https://ovea-y.cn/cpp_coroutine_20/ C++协程(Coroutines) 1. 简单介绍协程 协程可以简单的理解为,它是一个可以随时“中断”,并再次恢复执行的函数。 C++协程框架的特点: * 无栈协程 * 非对称设计(开发者可以自行设计协程调度器,做成对称设计) 2. 协程和函数的区别 函数:函数调用是线性、同步、一次性的执行模式,调用者必须等待被调用方法执行完成后返回。 协程:协程可以异步执行,调用者不需要等待协程完成,可以在协程挂起时继续做其他事情。在执行过程中通过特定的语法(co__yield_和_co__await)暂停执行,并在之后的某个时刻恢复执行。 2.1 普通函数的执行过程 一个普通函数在执行的时候,主要包含两个操作,分别是调用(call)和返回(return)

By 夕元
代码版本管理工具(git/gerrit/repo)

代码版本管理工具(git/gerrit/repo)

原文链接:https://ovea-y.cn/code_version_control_tools__git_gerrit_repo/ 一、版本控制工具的历史 1.1 版本控制雏形 在版本控制软件出现之前,就具备diff与patch工具来对源码进行比较和打补丁了,在CVS出来的一段时间里,Linus一直在使用diff与patch工具管理着Linux的代码。diff与patch也是源码版本控制中最基本的概念。 1.1.1 diff —— 用于比较两个文件或目录之间的差异 -u 表示使用 unified 格式 -r 表示比较目录 -N 表示将不存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中 diff -urN a.c b.c > c.patch 1.1.2 patch —— 用于应用差异修改 通过patch可以将原始文件变成目标文件,

By 夕元
Android Property模块

Android Property模块

原文链接:https://ovea-y.cn/android_property_module/ 一、导言 在Android系统中,属性模块具备记录和控制能力。它不仅记录着系统本身的硬件/软件信息、控制系统功能、在进程间传递信息,还可以调用系统预置功能。 本文将对Android Property机制进行深入解析。 二、属性分类 属性一共有两种大类型,一种是普通属性,一种是控制属性。 普通属性是我们最常见的属性,它们仅记录Key-Value信息,软件设计上可以通过这样的Key-Value值,实现进程间通信、功能控制、暴露内部信息等功能。 而控制属性则较为少见,它的功能预置在系统中,用于控制程序的运行状态,控制设备开关机,控制Selinux。 接下来,我们将对普通属性和控制属性分别进行介绍。 2.1 普通属性 2.1.1 常规属性 2.1.1.1 常规属性特点 * 常规属性可以设置多次,重启后丢失。

By 夕元